[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