mirror of
https://github.com/storytold/filmcraft.git
synced 2026-11-07 16:52:37 +00:00
* media: name Apple Intermediate Codec and say why a clip is unreadable Part of #3646. A MOV in Apple Intermediate Codec (fourcc icod, the editing codec of iMovie and Final Cut) imported with its codec named "unknown", and its frames failed with "no decoder for unknown video". Only the log showed that error: the Project panel's badge said "Unreadable" and nothing more. - codecs: codec_label names icod "Apple Intermediate Codec". The "no decoder" errors of make_video_decoder and software_video_decoder use that label for sample entries the parser keeps as Unknown, so the error reads "no decoder for Apple Intermediate Codec video". Other codecs keep their short names in that error. - ui-egui: an Unreadable badge shows on hover the error the media pool recorded, on cards (Icon and Freeform view) and in List view, which now registers its badge as project.item.<id>.offline as cards do. This covers every cause the pool records, such as "H.264: field pictures", not only this codec. - docs: an Apple Intermediate Codec row in codec-parity.md, and the hover in project-files.md. FilmCraft still has no AIC decoder. Apple publishes no specification for it, so a clean-room decoder (AGENTS.md section 2) needs a maintainer ruling, and #3646 stays open for that. Tests: apple_intermediate_codec_is_named_though_nothing_decodes_it in filmcraft-codecs (the label and all three errors), and unreadable_badge_says_why_on_hover in the ui-egui it suite (both views). Developed with an AI assistant (Árbol, running Muse). * ui: keep the List view's badges beside a long name (#3646) In List view, a name that left less than 40 px of its column hid the item's offline icon and proxy chip, and with them the Unreadable badge's automation id and the reason it shows on hover. The badges now keep their room at the end of the Name column, and a long name is cut short before them. Only a column too narrow for the badges leaves them out. Rows that showed their badges before, and rows without badges, draw as they did. unreadable_badge_says_why_on_hover imports a file whose name is wider than the Name column, so its List view pass covers this case. Found by CodeRabbit in its review of the pull request. Developed with an AI assistant (Árbol, running Muse). * codecs, ui: doc comments for codec_label and media_badge (#3646) Both functions gained a role with the Apple Intermediate Codec change: codec_label also names the codec in the no-decoder errors, and media_badge records why an Unreadable file cannot be read. Their doc comments say so. Developed with an AI assistant (Árbol, running Muse). * ui: end a List-view name cut short with "…" and show it in full on hover (#3646) Keeping the badges' room at the end of the Name column can cut short a name that used to fit, and the cut left no sign of it. The List view now draws the name with the cards' elided_name, so a cut name ends in "…", and hovering it shows the whole name, as the cards already do. Names that fit draw as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
69 lines
7.5 KiB
Markdown
69 lines
7.5 KiB
Markdown
# Codec parity
|
||
|
||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-02 · **Change:** minor (Apple Intermediate Codec row) · **Target:** Adobe Premiere Pro 2026 (26.5.2) and Media Encoder 2026
|
||
|
||
Video and audio codecs, decode and encode, with fidelity and how each is tested. Containers,
|
||
project and interchange files are in [file-format-parity.md](file-format-parity.md); hardware
|
||
paths per platform in [hardware-parity.md](hardware-parity.md). All our codecs are clean-room
|
||
pure Rust from public specifications ([AGENTS.md](../AGENTS.md) §2); ffmpeg is a test oracle only.
|
||
|
||
Premiere's list comes from Adobe's published supported-formats pages and the names of the
|
||
installed bundle's `MediaIO/systempresets` and `Frameworks` entries (listings only, never their
|
||
contents). Percent is ready-for-real-work for that codec: depth, profiles, speed.
|
||
|
||
## Video
|
||
|
||
| Codec | Premiere | Our decode | Our encode | Fidelity and tests | % | Est. |
|
||
|---|---|---|---|---|---|---|
|
||
| H.264 / AVC | decode all common profiles incl. High 10, 4:2:2 (XAVC S-I, AVC-Intra); encode 8/10-bit | own decoder, **8-bit 4:2:0 only** (Baseline / Main / High, CABAC / CAVLC); no High 10 / 4:2:2 / 4:4:4, interlaced field / MBAFF, lossless | own encoder (High / Main / Baseline, B-frames, CBR / VBR / 2-pass); 8-bit 4:2:0 only; hardware VideoToolbox / NVENC | decode bit-exact on 37+ conformance streams, 500–600 fps 1080p; encode ffprobe-checked, byte-identical across machines | 65% | 20–35 h |
|
||
| HEVC / H.265 | decode Main, Main 10, 4:2:2 10 (XAVC HS); encode 8/10-bit, HDR | own decoder Main / Main 10 / Main Still Picture, bit-exact on 41 fixtures, ~225 fps 1080p; **no 4:2:2 / RExt** | **hardware only** (VideoToolbox 8-bit; NVENC 8-bit and Main 10 HDR on Windows); no software encoder | NVENC round trip 48.9 dB (8-bit), 71.1 dB (10-bit); ffprobe | 60% | 30–60 h |
|
||
| ProRes 422 family / 4444 / XQ | decode + encode all | own decode + encode, all six profiles, alpha | yes (export UI exposes 422 flavours; 4444 / XQ request #342) | ±1 LSB, 318 fps; alpha final-run conformance and native macOS HD decode checked ([details](../crates/prores/README.md#alpha-bitstream-conformance)) | 85% | 3–6 h |
|
||
| ProRes RAW | decode | none (#345) | — | — | 0% | 30–50 h (spec availability uncertain) |
|
||
| DNxHD / DNxHR | decode + encode, MXF / MOV | own decode (all SMPTE ST 2019-1 CIDs, 8/10/12-bit, 4:2:2 / 4:4:4, interlaced, alpha) and encode LB / SQ / HQ / HQX / 444 | yes, MOV + MXF | within IDCT precision of ffmpeg on 22 fixtures | 90% | 2–4 h |
|
||
| AV1 | decode (hardware on Windows); export through Media Encoder plug-ins / recent versions | own decoder Main 8/10-bit, all tools, film grain, bit-exact vs libdav1d on 41 vectors; hardware on Windows | none | slow in software (~4 fps 1080p single-thread) | 55% | 30–50 h (encoder + speed) |
|
||
| VP9 | not a Premiere import format on all versions | own decoder profiles 0–3, 8/10/12-bit, bit-exact on 50+ fixtures, frame threading | none | conformance | ahead | — |
|
||
| APV (RFC 9924) | — (Samsung's pro codec; not in Premiere) | own decode | own encode | spec tests | ahead | — |
|
||
| MPEG-2 / MPEG-1 | decode incl. 4:2:2 (IMX, XDCAM); encode DVD / Blu-ray / MXF | own decoder (4:2:2, interlaced, field pictures, IEEE 1180 IDCT) | **none** | conformance fixtures | 60% | 20–35 h (encoder) |
|
||
| Motion JPEG | decode + encode | yes | yes (MOV) | — | 90% | — |
|
||
| JPEG 2000 (MXF, DCP) | decode + encode (Kakadu) | none | none | — | 0% | 40–70 h |
|
||
| JPEG XS | decode (`libjpegxs`) | none | none | — | 0% | 20–40 h |
|
||
| DV / DVCPRO / DV100 | decode + encode | none | none | — | 0% | 15–25 h |
|
||
| MPEG-4 Part 2 | decode | none | none | — | 0% | 10–20 h |
|
||
| Apple Intermediate Codec (`icod`, iMovie / Final Cut) | not in Adobe's supported-formats list | none (#3646): Apple publishes no specification, so a clean-room decoder needs a maintainer ruling ([AGENTS.md](../AGENTS.md) §2); import names the codec and the Project panel's Unreadable badge shows "no decoder for Apple Intermediate Codec video" on hover | none | — | 0% | — (no estimate without a specification) |
|
||
| WMV / VC-1 | decode, encode on Windows | none | none | — | 0% | 20–35 h |
|
||
| CinemaDNG / DNG | decode | own decoder (#1065): uncompressed and lossless JPEG raw, Bayer and LinearRaw, DNG colour model to linear Rec. 709 floats; folders of `.dng` frames as one clip with the CinemaDNG frame rate and time code; **no** lossy / JPEG XL DNG, MXF-wrapped CinemaDNG, opcode lists or Raw settings UI | — | raw samples bit-exact (and identical to LibRaw's on our synthetic files), processing against hand-computed values | 60% | 10–20 h |
|
||
| Camera RAW: R3D (incl. R3D NE), ARRIRAW, Sony RAW / X-OCN, Canon RAW, BRAW (plug-in) | decode (vendor SDKs) | none (#383) | — | — | 0% | 50–90 h for the ones with public specs; vendor-SDK-only formats need an owner decision |
|
||
| GIF (animated) | encode | decode as still | encode | — | 80% | — |
|
||
| Uncompressed / v210 / RGB | decode + encode (AVI, MOV) | partial (MOV PCM-style video not verified) | none | — | 30% | 8–15 h |
|
||
|
||
## Audio
|
||
|
||
| Codec | Premiere | Our decode | Our encode | Fidelity and tests | % | Est. |
|
||
|---|---|---|---|---|---|---|
|
||
| PCM (WAV, BWF, AIFF, MOV, MXF, Blu-ray / DVD LPCM) | yes | yes, BWF timecode | WAV, AIFF, MOV, MXF | sample-exact | 95% | — |
|
||
| AAC (LC, HE, LATM) | decode + encode | own decoder (LC, HE core), LATM | own LC encoder | loudness oracle vs ffmpeg | 90% | 3–5 h |
|
||
| AC-3 | decode (licensed) | own decoder (ATSC A/52) | none | conformance | 80% | — |
|
||
| E-AC-3 (Dolby Digital Plus) | decode | own decoder (ATSC A/52 Annex E, #647): independent substream, 1–6 blocks, spectral extension; **no** adaptive hybrid transform, enhanced coupling or 7.1 dependent substreams (plays the 5.1 core) | none | SNR vs ffmpeg 65–91 dB (raw, MP4, MOV, Matroska, TS) | 75% | 10–20 h |
|
||
| MP3 / MP2 | decode + MP3 encode | MP3: symphonia (MPL-2.0); MP1 / MP2: own decoder (ISO/IEC 11172-3 / 13818-3, #809), also the bit rate / mode combinations ffmpeg writes by default (mono 384 kbit/s); in raw, MP4, MOV (#800), Matroska, TS, PS | **none** | MP1 / MP2: SNR vs ffmpeg 73–84 dB; MP2 in MP4 / MOV within 1e-4 of ffmpeg, also after a seek (#800) | 65% | 10–20 h (MP3 encoder) |
|
||
| Opus | — (not a Premiere import format) | own decoder, RFC 8251 range-exact | none | conformance vectors | ahead | — |
|
||
| FLAC, ALAC, Vorbis | partial | decode (symphonia), also FLAC in MP4 / MOV (#603) | none | — | 70% | 3–6 h |
|
||
| WMA | decode on Windows | none | none | — | 0% | 10–20 h |
|
||
|
||
## Summary
|
||
|
||
- **Ahead of Premiere:** VP9, Opus, APV decode / encode; bit-exact software decoders everywhere,
|
||
including Linux and FreeBSD, where Premiere does not run.
|
||
- **Behind, by user impact:** 10-bit / 4:2:2 H.264 and HEVC in software ([G3](gaps.md#g3-10-bit-and-422-camera-media-needs-hardware)),
|
||
E-AC-3, camera RAW, HEVC and AV1 software encoding, MPEG-2 / JPEG 2000 encoding for broadcast
|
||
and DCP, DV, WMV.
|
||
- **Codec dimension: ~60%, 150–250 h** ([target-app-parity.md](target-app-parity.md#by-dimension)).
|
||
|
||
## Revision history
|
||
|
||
| Date | Change | Summary |
|
||
|---|---|---|
|
||
| 2026-11-02 | minor | Apple Intermediate Codec row: named on import and in the no-decoder error, no decoder (#3646) |
|
||
| 2026-10-22 | minor | ProRes alpha final-run syntax regression tests and native macOS HD decode validation |
|
||
| 2026-10-11 | minor | CinemaDNG / DNG decode (#1065) |
|
||
| 2026-10-10 | major | Created: codec-by-codec comparison with Premiere 26.5.2 from the codec crates' READMEs, the export format registry and the installed bundle's listings |
|