[FFmpeg-user] libaom - first frame not lossless when > 7 frames in source

Kieran O Leary kieran.o.leary at gmail.com
Sat Jun 6 21:57:39 EEST 2020


Hi,

I was doing some tests with libaom and lossness encoding and with synthetic
files and some real world files, I kept finding that the framemd5s for the
first frame was different than the source, but every other libaom encoded
frame produced matching framemd5s for source and output.
I then tried with smaller frame counts, and with synthetic files, I found
that all frames would produce matching framemd5s when there was between 1
and 7 frames in the input. Once you went to 8 frames and above, the first
frame would produce a framemd5 mismatch.

here's a bunch of commands using ffmpeg git-master and what I assume to be
libaom git master, or whatever the Ubuntu ffmpeg compilation wiki is using:
0) framemd5 output of the 8fr source - note the first frame value
1) Make a 8frame v210 via testsrc
2) Turn into av1 with -crf 0
3) get framemd5 of av1 output - note that first framemd5 value is different
4-6 - same as 1 to 3 but with a 7 frame testsrc file

Any idea what's happening? Will I get the libx264-style answer: 'this is
googles issue, not
ffmpeg'0b1ae3e77528dcdacfab21761076d2b0b1ae3e77528dcdacfab21761076d2b

/ffmpeg -i 8fr.mkv -f framemd5 -
ffmpeg version N-98060-g1c32d7d Copyright (c) 2000-2020 the FFmpeg
developers
  built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
  configuration: --prefix=/home/kieranjol/ffmpeg_build
--pkg-config-flags=--static
--extra-cflags=-I/home/kieranjol/ffmpeg_build/include
--extra-ldflags=-L/home/kieranjol/ffmpeg_build/lib --extra-libs='-lpthread
-lm' --bindir=/home/kieranjol/bin --enable-libaom
  libavutil      56. 50.100 / 56. 50.100
  libavcodec     58. 90.100 / 58. 90.100
  libavformat    58. 44.100 / 58. 44.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 84.100 /  7. 84.100
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
Input #0, matroska,webm, from '8fr.mkv':
  Metadata:
    ENCODER         : Lavf58.44.100
  Duration: 00:00:00.32, start: 0.000000, bitrate: 43031 kb/s
    Stream #0:0: Video: v210 (v210 / 0x30313276), yuv422p10le, 320x240, SAR
1:1 DAR 4:3, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      ENCODER         : Lavc58.90.100 v210
      DURATION        : 00:00:00.320000000
Stream mapping:
  Stream #0:0 -> #0:0 (v210 (native) -> rawvideo (native))
Press [q] to stop, [?] for help
#format: frame checksums
#version: 2
#hash: MD5
#software: Lavf58.44.100
#tb 0: 1/25
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 320x240
#sar 0: 1/1
#stream#, dts,        pts, duration,     size, hash
Output #0, framemd5, to 'pipe:':
  Metadata:
    encoder         : Lavf58.44.100
    Stream #0:0: Video: rawvideo (Y3[10][10] / 0xA0A3359), yuv422p10le,
320x240 [SAR 1:1 DAR 4:3], q=2-31, 38400 kb/s, 25 fps, 25 tbn, 25 tbc
(default)
    Metadata:
      DURATION        : 00:00:00.320000000
      encoder         : Lavc58.90.100 rawvideo
0,          0,          0,        1,   307200,
50b1ae3e77528dcdacfab21761076d2b
0,          1,          1,        1,   307200,
8213a857506c099160fffb2f606f3590
0,          2,          2,        1,   307200,
a5e0786c6d9d152c45e2d3a0122c8987
0,          3,          3,        1,   307200,
fd93af578482e418d1378f6d9cd94f14
0,          4,          4,        1,   307200,
abfca35c7aae65d1dcddee1ce370479f
0,          5,          5,        1,   307200,
da151dbf22f7e818344d5efd0cbb6f09
0,          6,          6,        1,   307200,
b87bdb747fbd80060f71585e7d2c6ac9
0,          7,          7,        1,   307200,
af69163b6455654da3a37cf52cfc4525
frame=    8 fps=0.0 q=-0.0 Lsize=       1kB time=00:00:00.32 bitrate=
 21.4kbits/s speed=33.1x
video:2400kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: unknown
 ./ffmpeg -f lavfi -i testsrc -c:v v210 -vframes 8  8fr.mkv
ffmpeg version N-98060-g1c32d7d Copyright (c) 2000-2020 the FFmpeg
developers
  built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
  configuration: --prefix=/home/kieranjol/ffmpeg_build
--pkg-config-flags=--static
--extra-cflags=-I/home/kieranjol/ffmpeg_build/include
--extra-ldflags=-L/home/kieranjol/ffmpeg_build/lib --extra-libs='-lpthread
-lm' --bindir=/home/kieranjol/bin --enable-libaom
  libavutil      56. 50.100 / 56. 50.100
  libavcodec     58. 90.100 / 58. 90.100
  libavformat    58. 44.100 / 58. 44.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 84.100 /  7. 84.100
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
Input #0, lavfi, from 'testsrc':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 320x240
[SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> v210 (native))
Press [q] to stop, [?] for help
Output #0, matroska, to '8fr.mkv':
  Metadata:
    encoder         : Lavf58.44.100
    Stream #0:0: Video: v210 (v210 / 0x30313276), yuv422p, 320x240 [SAR 1:1
DAR 4:3], q=2-31, 40960 kb/s, 25 fps, 1k tbn, 25 tbc
    Metadata:
      encoder         : Lavc58.90.100 v210
frame=    8 fps=0.0 q=-0.0 Lsize=    1681kB time=00:00:00.28
bitrate=49003.7kbits/s speed=39.4x
video:1680kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: 0.054408%

kieranjol at POWERVIRUS:~/ffmpeg_sources/ffmpeg$ ./ffmpeg -i 8fr.mkv -c:v av1
-crf 0 8fr_av1.mkv
ffmpeg version N-98060-g1c32d7d Copyright (c) 2000-2020 the FFmpeg
developers
  built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
  configuration: --prefix=/home/kieranjol/ffmpeg_build
--pkg-config-flags=--static
--extra-cflags=-I/home/kieranjol/ffmpeg_build/include
--extra-ldflags=-L/home/kieranjol/ffmpeg_build/lib --extra-libs='-lpthread
-lm' --bindir=/home/kieranjol/bin --enable-libaom
  libavutil      56. 50.100 / 56. 50.100
  libavcodec     58. 90.100 / 58. 90.100
  libavformat    58. 44.100 / 58. 44.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 84.100 /  7. 84.100
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
Input #0, matroska,webm, from '8fr.mkv':
  Metadata:
    ENCODER         : Lavf58.44.100
  Duration: 00:00:00.32, start: 0.000000, bitrate: 43031 kb/s
    Stream #0:0: Video: v210 (v210 / 0x30313276), yuv422p10le, 320x240, SAR
1:1 DAR 4:3, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      ENCODER         : Lavc58.90.100 v210
      DURATION        : 00:00:00.320000000
Stream mapping:
  Stream #0:0 -> #0:0 (v210 (native) -> av1 (libaom-av1))
Press [q] to stop, [?] for help
[libaom-av1 @ 0x5620559e0600] v2.0.0
Output #0, matroska, to '8fr_av1.mkv':
  Metadata:
    encoder         : Lavf58.44.100
    Stream #0:0: Video: av1 (libaom-av1) (AV01 / 0x31305641), yuv422p10le,
320x240 [SAR 1:1 DAR 4:3], q=-1--1, 25 fps, 1k tbn, 25 tbc (default)
    Metadata:
      DURATION        : 00:00:00.320000000
      encoder         : Lavc58.90.100 libaom-av1
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame=    8 fps=3.7 q=0.0 Lsize=      29kB time=00:00:00.28 bitrate=
837.3kbits/s speed=0.129x
video:28kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: 2.188944%

kieranjol at POWERVIRUS:~/ffmpeg_sources/ffmpeg$ ./ffmpeg -i 8fr_av1.mkv -f
framemd5 -
ffmpeg version N-98060-g1c32d7d Copyright (c) 2000-2020 the FFmpeg
developers
  built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
  configuration: --prefix=/home/kieranjol/ffmpeg_build
--pkg-config-flags=--static
--extra-cflags=-I/home/kieranjol/ffmpeg_build/include
--extra-ldflags=-L/home/kieranjol/ffmpeg_build/lib --extra-libs='-lpthread
-lm' --bindir=/home/kieranjol/bin --enable-libaom
  libavutil      56. 50.100 / 56. 50.100
  libavcodec     58. 90.100 / 58. 90.100
  libavformat    58. 44.100 / 58. 44.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 84.100 /  7. 84.100
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
[libaom-av1 @ 0x558d1646b740] v2.0.0
Input #0, matroska,webm, from '8fr_av1.mkv':
  Metadata:
    ENCODER         : Lavf58.44.100
  Duration: 00:00:00.32, start: 0.000000, bitrate: 735 kb/s
    Stream #0:0: Video: av1 (Professional), yuv422p10le(tv), 320x240, SAR
1:1 DAR 4:3, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      ENCODER         : Lavc58.90.100 libaom-av1
      DURATION        : 00:00:00.320000000
[libaom-av1 @ 0x558d16479800] v2.0.0
Stream mapping:
  Stream #0:0 -> #0:0 (av1 (libaom-av1) -> rawvideo (native))
Press [q] to stop, [?] for help
#format: frame checksums
#version: 2
#hash: MD5
#software: Lavf58.44.100
#tb 0: 1/25
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 320x240
#sar 0: 1/1
#stream#, dts,        pts, duration,     size, hash
Output #0, framemd5, to 'pipe:':
  Metadata:
    encoder         : Lavf58.44.100
    Stream #0:0: Video: rawvideo (Y3[10][10] / 0xA0A3359), yuv422p10le,
320x240 [SAR 1:1 DAR 4:3], q=2-31, 38400 kb/s, 25 fps, 25 tbn, 25 tbc
(default)
    Metadata:
      DURATION        : 00:00:00.320000000
      encoder         : Lavc58.90.100 rawvideo
0,          0,          0,        1,   307200,
e790aa300c6bdd6bad6770c6c6346585
0,          1,          1,        1,   307200,
8213a857506c099160fffb2f606f3590
0,          2,          2,        1,   307200,
a5e0786c6d9d152c45e2d3a0122c8987
0,          3,          3,        1,   307200,
fd93af578482e418d1378f6d9cd94f14
0,          4,          4,        1,   307200,
abfca35c7aae65d1dcddee1ce370479f
0,          5,          5,        1,   307200,
da151dbf22f7e818344d5efd0cbb6f09
0,          6,          6,        1,   307200,
b87bdb747fbd80060f71585e7d2c6ac9
0,          7,          7,        1,   307200,
af69163b6455654da3a37cf52cfc4525
frame=    8 fps=0.0 q=-0.0 Lsize=       1kB time=00:00:00.32 bitrate=
 21.4kbits/s speed=15.7x
video:2400kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: unknown

kieranjol at POWERVIRUS:~/ffmpeg_sources/ffmpeg$ ./ffmpeg -f lavfi -i testsrc
-c:v v210 -vframes 7  7fr.mkv
ffmpeg version N-98060-g1c32d7d Copyright (c) 2000-2020 the FFmpeg
developers
  built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
  configuration: --prefix=/home/kieranjol/ffmpeg_build
--pkg-config-flags=--static
--extra-cflags=-I/home/kieranjol/ffmpeg_build/include
--extra-ldflags=-L/home/kieranjol/ffmpeg_build/lib --extra-libs='-lpthread
-lm' --bindir=/home/kieranjol/bin --enable-libaom
  libavutil      56. 50.100 / 56. 50.100
  libavcodec     58. 90.100 / 58. 90.100
  libavformat    58. 44.100 / 58. 44.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 84.100 /  7. 84.100
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
Input #0, lavfi, from 'testsrc':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 320x240
[SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> v210 (native))
Press [q] to stop, [?] for help
Output #0, matroska, to '7fr.mkv':
  Metadata:
    encoder         : Lavf58.44.100
    Stream #0:0: Video: v210 (v210 / 0x30313276), yuv422p, 320x240 [SAR 1:1
DAR 4:3], q=2-31, 40960 kb/s, 25 fps, 1k tbn, 25 tbc
    Metadata:
      encoder         : Lavc58.90.100 v210
frame=    7 fps=0.0 q=-0.0 Lsize=    1471kB time=00:00:00.24
bitrate=49997.4kbits/s speed=37.6x
video:1470kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: 0.059258%

kieranjol at POWERVIRUS:~/ffmpeg_sources/ffmpeg$ ./ffmpeg -i 7fr.mkv -c:v av1
-crf 0 7fr_av1.mkv
ffmpeg version N-98060-g1c32d7d Copyright (c) 2000-2020 the FFmpeg
developers
  built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
  configuration: --prefix=/home/kieranjol/ffmpeg_build
--pkg-config-flags=--static
--extra-cflags=-I/home/kieranjol/ffmpeg_build/include
--extra-ldflags=-L/home/kieranjol/ffmpeg_build/lib --extra-libs='-lpthread
-lm' --bindir=/home/kieranjol/bin --enable-libaom
  libavutil      56. 50.100 / 56. 50.100
  libavcodec     58. 90.100 / 58. 90.100
  libavformat    58. 44.100 / 58. 44.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 84.100 /  7. 84.100
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
Input #0, matroska,webm, from '7fr.mkv':
  Metadata:
    ENCODER         : Lavf58.44.100
  Duration: 00:00:00.28, start: 0.000000, bitrate: 43033 kb/s
    Stream #0:0: Video: v210 (v210 / 0x30313276), yuv422p10le, 320x240, SAR
1:1 DAR 4:3, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      ENCODER         : Lavc58.90.100 v210
      DURATION        : 00:00:00.280000000
Stream mapping:
  Stream #0:0 -> #0:0 (v210 (native) -> av1 (libaom-av1))
Press [q] to stop, [?] for help
[libaom-av1 @ 0x5613e4bb0600] v2.0.0
Output #0, matroska, to '7fr_av1.mkv':
  Metadata:
    encoder         : Lavf58.44.100
    Stream #0:0: Video: av1 (libaom-av1) (AV01 / 0x31305641), yuv422p10le,
320x240 [SAR 1:1 DAR 4:3], q=-1--1, 25 fps, 1k tbn, 25 tbc (default)
    Metadata:
      DURATION        : 00:00:00.280000000
      encoder         : Lavc58.90.100 libaom-av1
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame=    7 fps=4.2 q=0.0 Lsize=      23kB time=00:00:00.24 bitrate=
793.4kbits/s speed=0.143x
video:23kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: 2.685054%
kieranjol at POWERVIRUS:~/ffmpeg_sources/ffmpeg$ ./ffmpeg -i 7fr_av1.mkv -f
framemd5 -
ffmpeg version N-98060-g1c32d7d Copyright (c) 2000-2020 the FFmpeg
developers
  built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
  configuration: --prefix=/home/kieranjol/ffmpeg_build
--pkg-config-flags=--static
--extra-cflags=-I/home/kieranjol/ffmpeg_build/include
--extra-ldflags=-L/home/kieranjol/ffmpeg_build/lib --extra-libs='-lpthread
-lm' --bindir=/home/kieranjol/bin --enable-libaom
  libavutil      56. 50.100 / 56. 50.100
  libavcodec     58. 90.100 / 58. 90.100
  libavformat    58. 44.100 / 58. 44.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 84.100 /  7. 84.100
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
[libaom-av1 @ 0x5632da787740] v2.0.0
Input #0, matroska,webm, from '7fr_av1.mkv':
  Metadata:
    ENCODER         : Lavf58.44.100
  Duration: 00:00:00.28, start: 0.000000, bitrate: 682 kb/s
    Stream #0:0: Video: av1 (Professional), yuv422p10le(tv), 320x240, SAR
1:1 DAR 4:3, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      ENCODER         : Lavc58.90.100 libaom-av1
      DURATION        : 00:00:00.280000000
[libaom-av1 @ 0x5632da78cf00] v2.0.0
Stream mapping:
  Stream #0:0 -> #0:0 (av1 (libaom-av1) -> rawvideo (native))
Press [q] to stop, [?] for help
#format: frame checksums
#version: 2
#hash: MD5
#software: Lavf58.44.100
#tb 0: 1/25
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 320x240
#sar 0: 1/1
#stream#, dts,        pts, duration,     size, hash
Output #0, framemd5, to 'pipe:':
  Metadata:
    encoder         : Lavf58.44.100
    Stream #0:0: Video: rawvideo (Y3[10][10] / 0xA0A3359), yuv422p10le,
320x240 [SAR 1:1 DAR 4:3], q=2-31, 38400 kb/s, 25 fps, 25 tbn, 25 tbc
(default)
    Metadata:
      DURATION        : 00:00:00.280000000
      encoder         : Lavc58.90.100 rawvideo
0,          0,          0,        1,   307200,
50b1ae3e77528dcdacfab21761076d2b
0,          1,          1,        1,   307200,
8213a857506c099160fffb2f606f3590
0,          2,          2,        1,   307200,
a5e0786c6d9d152c45e2d3a0122c8987
0,          3,          3,        1,   307200,
fd93af578482e418d1378f6d9cd94f14
0,          4,          4,        1,   307200,
abfca35c7aae65d1dcddee1ce370479f
0,          5,          5,        1,   307200,
da151dbf22f7e818344d5efd0cbb6f09
0,          6,          6,        1,   307200,
b87bdb747fbd80060f71585e7d2c6ac9
frame=    7 fps=0.0 q=-0.0 Lsize=       1kB time=00:00:00.28 bitrate=
 22.1kbits/s speed=15.3x
video:2100kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: unknown0b1ae3e77528dcdacfab21761076d2b


Best,

Kieran O'Leary
Irish Film Institute


More information about the ffmpeg-user mailing list