[FFmpeg-trac] #6386(undetermined:new): WebM/VP8 created by chromium are incorrectly detected as 1000 fps by ffmpeg

FFmpeg trac at avcodec.org
Thu May 11 17:06:22 EEST 2017


#6386: WebM/VP8 created by chromium are incorrectly detected as 1000 fps by ffmpeg
-------------------------------------+-------------------------------------
             Reporter:  fthiery      |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:               |                  Version:
  undetermined                       |  unspecified
             Keywords:  webm         |               Blocked By:
  framerate                          |  Reproduced by developer:  0
             Blocking:               |
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 Summary of the bug: chromium and firefox browsers can create WebM media
 using MediaStreamRecorder; being live-generated, these media have no
 framerate in the webm header (as per specified in the spec:
 https://bugs.chromium.org/p/chromium/issues/detail?id=589561) nor correct
 duration information, making these media unseekable, but when remuxing the
 media (official chromium recommendation
 https://bugs.chromium.org/p/chromium/issues/detail?id=642012) ffmpeg
 falsely detects that the content is 1000 fps, then leading any subsequent
 transcodings to be effectively at 1000 fps.

 How to reproduce:
 # create a content with chromium (see attached test html -- needs to run
 over http, e.g. http://localhost/test_simple_record.html), download the
 video fragment
 # remux using ffmpeg -i test.webm -c copy out.webm
 # ffprobe out.webm reports 1000 fps

 Firefox produced media do not have the issue, and the main difference
 seems to be that the EBML header from firefox has a zero duration instead
 of -1e-09

 {{{
 $ ffprobe -loglevel 56 test.webm
 ffprobe version 3.3 Copyright (c) 2007-2017 the FFmpeg developers
   built with gcc 6.3.1 (GCC) 20170306
   configuration: --prefix=/usr --disable-debug --disable-static --disable-
 stripping --enable-avisynth --enable-avresample --enable-fontconfig
 --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass
 --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-
 libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame
 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg
 --enable-libopus --enable-libpulse --enable-libschroedinger --enable-
 libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-
 libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-
 libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid
 --enable-netcdf --enable-shared --enable-version3
   libavutil      55. 58.100 / 55. 58.100
   libavcodec     57. 89.100 / 57. 89.100
   libavformat    57. 71.100 / 57. 71.100
   libavdevice    57.  6.100 / 57.  6.100
   libavfilter     6. 82.100 /  6. 82.100
   libavresample   3.  5.  0 /  3.  5.  0
   libswscale      4.  6.100 /  4.  6.100
   libswresample   2.  7.100 /  2.  7.100
   libpostproc    54.  5.100 / 54.  5.100
 [file @ 0x562e987a1560] Setting default whitelist 'file,crypto'
 Probing matroska,webm score:100 size:2048
 Probing mp3 score:1 size:2048
 [matroska,webm @ 0x562e987a0d00] Format matroska,webm probed with
 size=2048 and score=100
 st:0 removing common factor 1000000 from timebase
 st:1 removing common factor 1000000 from timebase
 [matroska,webm @ 0x562e987a0d00] Before avformat_find_stream_info() pos:
 181 bytes read:32768 seeks:0 nb_streams:2
 [matroska,webm @ 0x562e987a0d00] All info found
 [matroska,webm @ 0x562e987a0d00] stream 0: start_time: 0.060 duration:
 -9223372036854776.000
 [matroska,webm @ 0x562e987a0d00] stream 1: start_time: 0.000 duration:
 -9223372036854776.000
 [matroska,webm @ 0x562e987a0d00] format: start_time: 0.000 duration:
 -9223372036854.775 bitrate=0 kb/s
 [matroska,webm @ 0x562e987a0d00] After avformat_find_stream_info() pos:
 217397 bytes read:229376 seeks:0 frames:68
 Input #0, matroska,webm, from 'test.webm':
   Metadata:
     encoder         : Chrome
   Duration: N/A, start: 0.000000, bitrate: N/A
     Stream #0:0(eng), 27, 1/1000: Audio: opus, 48000 Hz, mono, fltp
 (default)
     Stream #0:1(eng), 41, 1/1000: Video: vp8, 1 reference frame,
 yuv420p(progressive), 640x480, 0/1, SAR 1:1 DAR 4:3, 1k tbr, 1k tbn, 1k
 tbc (default)
 [AVIOContext @ 0x562e987a98a0] Statistics: 229376 bytes read, 0 seeks

 $ ffmpeg -i test.webm -c copy out.webm
 ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers
   built with gcc 6.3.1 (GCC) 20170306
   configuration: --prefix=/usr --disable-debug --disable-static --disable-
 stripping --enable-avisynth --enable-avresample --enable-fontconfig
 --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass
 --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-
 libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame
 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg
 --enable-libopus --enable-libpulse --enable-libschroedinger --enable-
 libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-
 libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-
 libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid
 --enable-netcdf --enable-shared --enable-version3
   libavutil      55. 58.100 / 55. 58.100
   libavcodec     57. 89.100 / 57. 89.100
   libavformat    57. 71.100 / 57. 71.100
   libavdevice    57.  6.100 / 57.  6.100
   libavfilter     6. 82.100 /  6. 82.100
   libavresample   3.  5.  0 /  3.  5.  0
   libswscale      4.  6.100 /  4.  6.100
   libswresample   2.  7.100 /  2.  7.100
   libpostproc    54.  5.100 / 54.  5.100
 Input #0, matroska,webm, from 'test.webm':
   Metadata:
     encoder         : Chrome
   Duration: N/A, start: 0.000000, bitrate: N/A
     Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
     Stream #0:1(eng): Video: vp8, yuv420p(progressive), 640x480, SAR 1:1
 DAR 4:3, 1k tbr, 1k tbn, 1k tbc (default)
 File 'out.webm' already exists. Overwrite ? [y/N] y
 Output #0, webm, to 'out.webm':
   Metadata:
     encoder         : Lavf57.71.100
     Stream #0:0(eng): Video: vp8, yuv420p(progressive), 640x480 [SAR 1:1
 DAR 4:3], q=2-31, 1k tbr, 1k tbn, 1k tbc (default)
     Stream #0:1(eng): Audio: opus, 48000 Hz, mono, fltp (default)
 Stream mapping:
   Stream #0:1 -> #0:0 (copy)
   Stream #0:0 -> #0:1 (copy)
 Press [q] to stop, [?] for help
 frame=  128 fps=0.0 q=-1.0 Lsize=     646kB time=00:00:04.92
 bitrate=1075.0kbits/s speed= 914x
 video:643kB audio:1kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 0.300635%

 $ ffprobe -loglevel 56 out.webm
 ffprobe version 3.3 Copyright (c) 2007-2017 the FFmpeg developers
   built with gcc 6.3.1 (GCC) 20170306
   configuration: --prefix=/usr --disable-debug --disable-static --disable-
 stripping --enable-avisynth --enable-avresample --enable-fontconfig
 --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass
 --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-
 libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame
 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg
 --enable-libopus --enable-libpulse --enable-libschroedinger --enable-
 libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-
 libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-
 libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid
 --enable-netcdf --enable-shared --enable-version3
   libavutil      55. 58.100 / 55. 58.100
   libavcodec     57. 89.100 / 57. 89.100
   libavformat    57. 71.100 / 57. 71.100
   libavdevice    57.  6.100 / 57.  6.100
   libavfilter     6. 82.100 /  6. 82.100
   libavresample   3.  5.  0 /  3.  5.  0
   libswscale      4.  6.100 /  4.  6.100
   libswresample   2.  7.100 /  2.  7.100
   libpostproc    54.  5.100 / 54.  5.100
 [file @ 0x5601fb87f560] Setting default whitelist 'file,crypto'
 Probing matroska,webm score:100 size:2048
 Probing mp3 score:1 size:2048
 [matroska,webm @ 0x5601fb87ed00] Format matroska,webm probed with
 size=2048 and score=100
 st:0 removing common factor 1000000 from timebase
 st:1 removing common factor 1000000 from timebase
 [matroska,webm @ 0x5601fb87ed00] Before avformat_find_stream_info() pos:
 517 bytes read:32768 seeks:0 nb_streams:2
 [matroska,webm @ 0x5601fb87ed00] All info found
 [matroska,webm @ 0x5601fb87ed00] stream 0: start_time: 0.000 duration:
 -9223372036854776.000
 [matroska,webm @ 0x5601fb87ed00] stream 1: start_time: 0.061 duration:
 -9223372036854776.000
 [matroska,webm @ 0x5601fb87ed00] format: start_time: 0.000 duration: 4.980
 bitrate=1062 kb/s
 [matroska,webm @ 0x5601fb87ed00] After avformat_find_stream_info() pos:
 197613 bytes read:229376 seeks:0 frames:64
 Input #0, matroska,webm, from 'out.webm':
   Metadata:
     encoder         : Lavf57.71.100
   Duration: 00:00:04.98, start: 0.000000, bitrate: 1062 kb/s
     Stream #0:0(eng), 41, 1/1000: Video: vp8, 1 reference frame,
 yuv420p(progressive), 640x480, 0/1, SAR 1:1 DAR 4:3, 1k fps, 1k tbr, 1k
 tbn, 1k tbc (default)
     Stream #0:1(eng), 23, 1/1000: Audio: opus, 48000 Hz, mono, fltp
 (default)
 [AVIOContext @ 0x5601fb8878a0] Statistics: 229376 bytes read, 0 seeks

 $ ./libwebm/webm_info -i test.webm
 EBML Header:
   EBMLVersion       : 1
   EBMLReadVersion   : 1
   EBMLMaxIDLength   : 4
   EBMLMaxSizeLength : 8
   Doc Type          : webm
   DocTypeVersion    : 4
   DocTypeReadVersion: 2
 Segment:
   SegmentInfo:
     TimecodeScale : 1000000
     Duration(secs): -1e-09
     MuxingApp     : Chrome
     WritingApp    : Chrome
   Tracks:
     Track:
       TrackType   : 2
       TrackNumber : 1
       CodecID     : A_OPUS
       PrivateData(size): 19
       Channels         : 1
       SamplingFrequency: 48000
     Track:
       TrackType   : 1
       TrackNumber : 2
       CodecID     : V_VP8
       PixelWidth  : 640
       PixelHeight : 480

 $ ffprobe -loglevel 56 test_firefox.webm
 ffprobe version 3.3 Copyright (c) 2007-2017 the FFmpeg developers
   built with gcc 6.3.1 (GCC) 20170306
   configuration: --prefix=/usr --disable-debug --disable-static --disable-
 stripping --enable-avisynth --enable-avresample --enable-fontconfig
 --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass
 --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-
 libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame
 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg
 --enable-libopus --enable-libpulse --enable-libschroedinger --enable-
 libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-
 libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-
 libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid
 --enable-netcdf --enable-shared --enable-version3
   libavutil      55. 58.100 / 55. 58.100
   libavcodec     57. 89.100 / 57. 89.100
   libavformat    57. 71.100 / 57. 71.100
   libavdevice    57.  6.100 / 57.  6.100
   libavfilter     6. 82.100 /  6. 82.100
   libavresample   3.  5.  0 /  3.  5.  0
   libswscale      4.  6.100 /  4.  6.100
   libswresample   2.  7.100 /  2.  7.100
   libpostproc    54.  5.100 / 54.  5.100
 [file @ 0x558fe2164560] Setting default whitelist 'file,crypto'
 Probing matroska,webm score:100 size:2048
 Probing mp3 score:1 size:2048
 [matroska,webm @ 0x558fe2163d00] Format matroska,webm probed with
 size=2048 and score=100
 st:0 removing common factor 1000000 from timebase
 st:1 removing common factor 1000000 from timebase
 [matroska,webm @ 0x558fe2163d00] Before avformat_find_stream_info() pos:
 317 bytes read:32768 seeks:0 nb_streams:2
 [matroska,webm @ 0x558fe2163d00] All info found
 [matroska,webm @ 0x558fe2163d00] rfps: 24.666667 0.012426
 [matroska,webm @ 0x558fe2163d00] rfps: 24.750000 0.005794
     Last message repeated 1 times
 [matroska,webm @ 0x558fe2163d00] rfps: 24.833333 0.002149
     Last message repeated 1 times
 [matroska,webm @ 0x558fe2163d00] rfps: 24.916667 0.001491
     Last message repeated 1 times
 [matroska,webm @ 0x558fe2163d00] rfps: 25.000000 0.003819
 [matroska,webm @ 0x558fe2163d00] rfps: 25.083333 0.009133
 [matroska,webm @ 0x558fe2163d00] rfps: 25.166667 0.017434
 [matroska,webm @ 0x558fe2163d00] rfps: 50.000000 0.015275
 [matroska,webm @ 0x558fe2163d00] Setting avg frame rate based on r frame
 rate
 [matroska,webm @ 0x558fe2163d00] stream 0: start_time: 0.000 duration:
 -9223372036854776.000
 [matroska,webm @ 0x558fe2163d00] stream 1: start_time: -0.001 duration:
 -9223372036854776.000
 [matroska,webm @ 0x558fe2163d00] format: start_time: -0.001 duration:
 -9223372036854.775 bitrate=0 kb/s
 [matroska,webm @ 0x558fe2163d00] After avformat_find_stream_info() pos:
 482653 bytes read:491520 seeks:0 frames:123
 Input #0, matroska,webm, from 'test_firefox.webm':
   Metadata:
     encoder         : QTmuxingAppLibWebM-0.0.1
   Duration: N/A, start: -0.001000, bitrate: N/A
     Stream #0:0(eng), 41, 1/1000: Video: vp8, 1 reference frame,
 yuv420p(progressive), 640x480, 0/1, SAR 1:1 DAR 4:3, 24.92 fps, 24.92 tbr,
 1k tbn, 1k tbc (default)
     Stream #0:1(eng), 82, 1/1000: Audio: opus, 48000 Hz, mono, fltp, delay
 312 (default)
 [AVIOContext @ 0x558fe216c860] Statistics: 491520 bytes read, 0 seeks

 $ ./libwebm/webm_info -i test_firefox.webm
 EBML Header:
   EBMLVersion       : 1
   EBMLReadVersion   : 1
   EBMLMaxIDLength   : 4
   EBMLMaxSizeLength : 8
   Doc Type          : webm
   DocTypeVersion    : 2
   DocTypeReadVersion: 2
 Segment:
   SegmentInfo:
     TimecodeScale : 1000000
     Duration(secs): 0
     MuxingApp     : QTmuxingAppLibWebM-0.0.1
     WritingApp    : QTwritingAppLibWebM-0.0.1
   Tracks:
     Track:
       TrackType   : 1
       TrackNumber : 1
       CodecID     : V_VP8
       CodecName   : VP8
       PixelWidth  : 640
       PixelHeight : 480
     Track:
       TrackType   : 2
       TrackNumber : 2
       CodecID     : A_OPUS
       CodecName   : OPUS
       PrivateData(size): 19
       Channels         : 1
       SamplingFrequency: 44100
       CodecDelay       : 6500000
       SeekPreRoll      : 80000000
 }}}

--
Ticket URL: <https://trac.ffmpeg.org/ticket/6386>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list