[FFmpeg-user] Lossless encoding to ffv1 changes frames md5
Alberto Mattea
alberto at mattea.info
Tue Dec 17 15:18:14 EET 2019
Hi all, I'm trying to losslessly convert some videos from grassvalley hqx to ffv1.
Unfortunately it seems the conversion is not really lossless, as the frames md5 changes after the conversion.
Here's what I'm doing:
- Calculate md5 of the original video frames
$ ffmpeg -i 01.avi -f framemd5 orig.framemd5
ffmpeg version N-51066-ge52070e89c-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil 56. 36.101 / 56. 36.101
libavcodec 58. 65.100 / 58. 65.100
libavformat 58. 35.101 / 58. 35.101
libavdevice 58. 9.101 / 58. 9.101
libavfilter 7. 68.100 / 7. 68.100
libswscale 5. 6.100 / 5. 6.100
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
Input #0, avi, from '01.avi':
Duration: 00:15:04.40, start: 0.000000, bitrate: 202751 kb/s
Stream #0:0: Video: hqx (CHQX / 0x58514843), yuv422p16le(10 bpc, progressive), 1632x1200 [SAR 1:1 DAR 34:25], 202756 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (hqx (native) -> rawvideo (native))
Press [q] to stop, [?] for help
Output #0, framemd5, to 'orig.framemd5':
Metadata:
encoder : Lavf58.35.101
Stream #0:0: Video: rawvideo (Y3[10][16] / 0x100A3359), yuv422p16le(10 bpc), 1632x1200 [SAR 1:1 DAR 34:25], q=2-31, 1566720 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc58.65.100 rawvideo
frame=22610 fps= 50 q=-0.0 Lsize= 1767kB time=00:15:04.40 bitrate= 16.0kbits/s speed=1.98x
video:172966500kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
- Convert
$ ffmpeg -i 01.avi -c:v ffv1 01ffv1.mkv
ffmpeg version N-51066-ge52070e89c-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil 56. 36.101 / 56. 36.101
libavcodec 58. 65.100 / 58. 65.100
libavformat 58. 35.101 / 58. 35.101
libavdevice 58. 9.101 / 58. 9.101
libavfilter 7. 68.100 / 7. 68.100
libswscale 5. 6.100 / 5. 6.100
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
Input #0, avi, from '01.avi':
Duration: 00:15:04.40, start: 0.000000, bitrate: 202751 kb/s
Stream #0:0: Video: hqx (CHQX / 0x58514843), yuv422p16le(10 bpc, progressive), 1632x1200 [SAR 1:1 DAR 34:25], 202756 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (hqx (native) -> ffv1 (native))
Press [q] to stop, [?] for help
[ffv1 @ 0x6e1ce80] bits_per_raw_sample > 8, forcing range coder
Output #0, matroska, to '01ffv1.mkv':
Metadata:
encoder : Lavf58.35.101
Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv422p16le(10 bpc), 1632x1200 [SAR 1:1 DAR 34:25], q=2-31, 200 kb/s, 25 fps, 1k tbn, 25 tbc
Metadata:
encoder : Lavc58.65.100 ffv1
frame=22610 fps= 17 q=-0.0 Lsize=35631195kB time=00:15:04.36 bitrate=322759.1kbits/s speed=0.691x
video:35630872kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000908%
- Calculate md5 of the converted frames (I've stopped it after a few hundred frames, just to check the beginning)
$ ffmpeg -i 01ffv1.mkv -f framemd5 converted.framemd5
ffmpeg version N-51066-ge52070e89c-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil 56. 36.101 / 56. 36.101
libavcodec 58. 65.100 / 58. 65.100
libavformat 58. 35.101 / 58. 35.101
libavdevice 58. 9.101 / 58. 9.101
libavfilter 7. 68.100 / 7. 68.100
libswscale 5. 6.100 / 5. 6.100
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
Input #0, matroska,webm, from '01ffv1.mkv':
Metadata:
ENCODER : Lavf58.35.101
Duration: 00:15:04.40, start: 0.000000, bitrate: 322745 kb/s
Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv422p10le, 1632x1200, SAR 1:1 DAR 34:25, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
Metadata:
ENCODER : Lavc58.65.100 ffv1
DURATION : 00:15:04.400000000
Stream mapping:
Stream #0:0 -> #0:0 (ffv1 (native) -> rawvideo (native))
Press [q] to stop, [?] for help
Output #0, framemd5, to 'converted.framemd5':
Metadata:
encoder : Lavf58.35.101
Stream #0:0: Video: rawvideo (Y3[10][10] / 0xA0A3359), yuv422p10le, 1632x1200 [SAR 1:1 DAR 34:25], q=2-31, 979200 kb/s, 25 fps, 25 tbn, 25 tbc (default)
Metadata:
DURATION : 00:15:04.400000000
encoder : Lavc58.65.100 rawvideo
frame= 406 fps= 31 q=-0.0 Lsize= 32kB time=00:00:16.24 bitrate= 16.1kbits/s speed=1.23x
video:3105900kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
- Compare hashes
orig.framemd5:
#format: frame checksums
#version: 2
#hash: MD5
#software: Lavf58.35.101
#tb 0: 1/25
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 1632x1200
#sar 0: 1/1
#stream#, dts, pts, duration, size, hash
0, 0, 0, 1, 7833600, 39d64300c8b749b0776423a80746d8dc
0, 1, 1, 1, 7833600, 12e7317d49727740187d2e23439d87d8
0, 2, 2, 1, 7833600, 12e7317d49727740187d2e23439d87d8
0, 3, 3, 1, 7833600, 0b3b0136b008ec9d67e900595be0c923
0, 4, 4, 1, 7833600, 97cd9b7689d1f49d1e1988a3613ffa72
0, 5, 5, 1, 7833600, 97cd9b7689d1f49d1e1988a3613ffa72
0, 6, 6, 1, 7833600, 1632e4b3ba7dc28e9dde698f3b7ec9e7
0, 7, 7, 1, 7833600, 796bda137d768f4ad31eb7166ea16447
0, 8, 8, 1, 7833600, 796bda137d768f4ad31eb7166ea16447
0, 9, 9, 1, 7833600, 612c13b4824bd427faa51efa7a09660d
...
converted.framemd5:
#format: frame checksums
#version: 2
#hash: MD5
#software: Lavf58.35.101
#tb 0: 1/25
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 1632x1200
#sar 0: 1/1
#stream#, dts, pts, duration, size, hash
0, 0, 0, 1, 7833600, 3ed693fc02ba36cca92a2153afa960ac
0, 1, 1, 1, 7833600, 23d7482899eb8c854b26444dcdf38db4
0, 2, 2, 1, 7833600, 23d7482899eb8c854b26444dcdf38db4
0, 3, 3, 1, 7833600, 1fc392823ebc14001ee0e44c68d710e6
0, 4, 4, 1, 7833600, d63335f1c34132680e571549da51eac7
0, 5, 5, 1, 7833600, d63335f1c34132680e571549da51eac7
0, 6, 6, 1, 7833600, 09304bca4578458c353ecc119de0bd87
0, 7, 7, 1, 7833600, 0ec1e49008d1f70385dc4a1636559a30
0, 8, 8, 1, 7833600, 0ec1e49008d1f70385dc4a1636559a30
0, 9, 9, 1, 7833600, 78b22236d03517e5ceea3bd390ac2d0b
...
Any idea of why this is happening?
More information about the ffmpeg-user
mailing list