feat: publish av-tools 0.1.0
This commit is contained in:
123
docs/FORMAT_SUPPORT.md
Normal file
123
docs/FORMAT_SUPPORT.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# Format and feature support
|
||||
|
||||
FFmpeg capability is determined from the **loaded core**, not from filename
|
||||
extensions or this document. The app queries muxers, demuxers, decoders,
|
||||
encoders and filters; a preset is disabled with missing components listed.
|
||||
Browser playback is a separate capability checked with MIME/media APIs.
|
||||
|
||||
## 0.1.0 candidate fixture matrix
|
||||
|
||||
All 15 files are generated and re-probed with native FFmpeg 7.1.3 for test
|
||||
preparation and pass the checksum/probe verifier. That proves fixture
|
||||
provenance, not ffmpeg.wasm behavior. A 2026-07-24 Vitest run passed 303 tests
|
||||
with one conditional native subtitle-filter skip and includes broad execution
|
||||
of typed plans against native FFmpeg 7.1.3.
|
||||
|
||||
Chromium automation also runs a broad operation matrix against the real pinned
|
||||
ST core. The real MT core is queried and completes an H.264/AAC conversion, but
|
||||
the complete ST operation matrix has not been duplicated under MT. The
|
||||
following table distinguishes exact browser evidence from still-pending
|
||||
coverage; it must not be generalized to Firefox, Safari or mobile.
|
||||
|
||||
| Input | Fixture | Expected streams | Browser preview expectation | Recorded pinned-core Chromium evidence |
|
||||
| ------------------- | ---------------------------------- | -------------------------------- | ------------------------------------------------------------------ | -------------------------------------------------------------- |
|
||||
| MP4 / H.264 + AAC | `pattern-av.mp4`, compatible clips | H.264 video, AAC audio | commonly playable after `canPlayType`/media load succeeds | broad ST operations; real MT conversion; exhaustive MT pending |
|
||||
| WebM / VP8 + Vorbis | `pattern.webm` | VP8 video, Vorbis audio | commonly playable in Chromium/Firefox; browser-dependent elsewhere | ST probe, remux and VP8/Vorbis re-encode; MT pending |
|
||||
| WAV / PCM s16le | `tone.wav` | mono PCM | commonly playable | ST WAV output re-probed; exact input fixture and MT pending |
|
||||
| MP3 | `tone.mp3` | mono MP3 | commonly playable | ST MP3 outputs re-probed; exact input fixture and MT pending |
|
||||
| FLAC | `tone.flac` | mono FLAC | browser/version-dependent | ST input and FLAC output re-probed; MT pending |
|
||||
| MP3 + attached PNG | `attached-cover.mp3` | MP3 audio, attached-picture PNG | audio may play; cover rendering is app-owned | ST probe/stream selection; MT pending |
|
||||
| MP4 tags | `metadata.mp4` | H.264/AAC | same as MP4 | ST import/removal and output metadata round-trip; MT pending |
|
||||
| MP4 chapters | `chapters.mp4` | H.264/AAC/data plus two chapters | media may play; browser does not expose all chapter data | ST generated-output chapter round-trip; fixture import pending |
|
||||
| malformed MP4 | `truncated.mp4` | no usable streams expected | must not preview | ST bounded failure, cleanup and recovery; MT pending |
|
||||
|
||||
The runtime query for pinned core 0.12.10 recorded 341 demuxers, 173 muxers,
|
||||
515 decoders, 204 encoders and 465 filters (1,698 entries total). Runtime
|
||||
discovery only says that FFmpeg exposes an item; the application must still
|
||||
build a valid plan, the input must be compatible, resources must fit and the
|
||||
browser may still be unable to preview the result.
|
||||
|
||||
## Output presets
|
||||
|
||||
Preset availability always depends on detected runtime requirements:
|
||||
|
||||
| Preset family | Required examples | Browser result preview |
|
||||
| ------------------ | ---------------------------------------- | ------------------------------------------------------ |
|
||||
| MP4 H.264/AAC | `mp4`, `libx264`, `aac` | usually, but verify actual output |
|
||||
| WebM VP9/Opus | `webm`, `libvpx-vp9`, `libopus` | browser-dependent; Opus core regression gate applies |
|
||||
| WebM VP8/Vorbis | `webm`, `libvpx`, `libvorbis` | commonly Chromium/Firefox |
|
||||
| Matroska H.264/AAC | `matroska`, `libx264`, `aac` | generally download-only in browsers |
|
||||
| animated WebP | `webp`, `libwebp_anim` | browser-dependent image preview |
|
||||
| GIF | `gif`, `gif`, `palettegen`, `paletteuse` | broadly image-previewable |
|
||||
| MP3 | `mp3`, `libmp3lame` | commonly playable |
|
||||
| M4A/AAC | `ipod`, `aac` | commonly playable |
|
||||
| Ogg Vorbis | `ogg`, `libvorbis` | browser-dependent |
|
||||
| Opus | `opus`, `libopus` | browser-dependent; pinned-core regression gate applies |
|
||||
| WAV/PCM | `wav`, `pcm_s16le` | commonly playable |
|
||||
| FLAC | `flac`, `flac` | browser-dependent |
|
||||
|
||||
“Lossless” applies only to a lossless audio codec such as PCM/FLAC relative to
|
||||
its decoded samples. It does not make a lossy source lossless. Stream-copy
|
||||
remux avoids re-encoding compatible streams but may change container metadata.
|
||||
|
||||
## Structural editing
|
||||
|
||||
- The Edit workspace exposes fast/accurate trim for the selected timeline range
|
||||
and fast/normalized concat for clips in visible timeline order. Availability
|
||||
still fails closed against loaded-core capabilities.
|
||||
- Fast trim uses stream copy where container/stream/timestamp constraints are
|
||||
compatible. It can begin at a nearby keyframe and is not promised
|
||||
frame-accurate.
|
||||
- Accurate trim decodes/re-encodes selected streams and can still be limited by
|
||||
source timestamps.
|
||||
- Stream-copy concat requires compatible codec parameters, time bases,
|
||||
dimensions, sample layout and selected streams; the UI requires a completed
|
||||
compatibility check before enabling it. Otherwise normalized re-encoding is
|
||||
required.
|
||||
- Normalized concat uses an explicit export preset and requires an explicit
|
||||
insert-silence, drop-all-audio or reject policy when clips have mismatched
|
||||
audio presence.
|
||||
- Crop, resize, frame-rate conversion, fades, normalization, burn-in and
|
||||
contact sheets require specific filters discovered at runtime.
|
||||
- Even-dimension correction is applied when the selected pixel format/encoder
|
||||
requires it and is reported in the plan/result.
|
||||
|
||||
## Subtitles
|
||||
|
||||
The text fixtures cover SRT, WebVTT and ASS import with explicit time shift.
|
||||
The Chromium ST matrix converts a generated SRT to WebVTT with a time shift,
|
||||
soft-muxes it into Matroska, burns it into H.264 video and extracts the
|
||||
soft-muxed stream. The exact standalone WebVTT and ASS fixtures and equivalent
|
||||
MT paths are not separately browser-smoked. Soft-subtitle muxing depends on
|
||||
container support (for example converted text in MP4 versus text/ASS in
|
||||
Matroska). ASS burn-in requires `subtitles`/libass and local font support; no
|
||||
remote font is fetched. Bitmap subtitle streams are identified but are not
|
||||
claimed to support arbitrary conversion or OCR. Unsupported container/codec
|
||||
combinations must remain disabled with reasons.
|
||||
|
||||
## Metadata and chapters
|
||||
|
||||
Format and stream tags can be inspected. Edits/removal are limited to fields
|
||||
the selected muxer writes; “remove metadata” is best effort and the output is
|
||||
re-probed to report remaining structural/encoder/container fields. Stream
|
||||
language, title and dispositions are separate from format tags.
|
||||
|
||||
Chapters use validated integer time bases, monotonic non-overlapping ranges and
|
||||
escaped titles. Some output containers do not support chapters. Browser media
|
||||
elements do not reliably expose them, so ffprobe round-trip is authoritative.
|
||||
|
||||
## Known unsupported or conditional cases
|
||||
|
||||
- remote protocols, live capture, DRM/encrypted media and network playlists;
|
||||
- hardware-accelerated encoding or desktop-FFmpeg performance;
|
||||
- files above the 2 GiB WASM input ceiling or stricter product policy;
|
||||
- arbitrary filters/commands, arbitrary compositing and nonlinear overlap;
|
||||
- frame-accurate stream-copy trimming;
|
||||
- complete metadata erasure/anonymity;
|
||||
- browser preview of every FFmpeg-readable result;
|
||||
- Opus presets until real non-empty ST/MT encoding smoke passes for core
|
||||
0.12.10;
|
||||
- any capability omitted by the active core's runtime query.
|
||||
|
||||
Update this file only from re-probed generated/public-domain fixtures and
|
||||
record the engine mode, browser and exact core version.
|
||||
Reference in New Issue
Block a user