Files
filmcraft/docs/codec-parity.md
scks1andClaude Opus 5.5 8e81d41567 Name Apple Intermediate Codec and show why a clip is unreadable (part of #3646) (#4010)
* 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>
2026-11-03 00:02:55 -05:00

7.5 KiB
Raw Permalink Blame History

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; hardware paths per platform in hardware-parity.md. All our codecs are clean-room pure Rust from public specifications (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) 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 §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), 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).

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