9.0 KiB
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.