Opened 12 years ago

Closed 12 years ago

#1444 closed defect (fixed)

Incorrect duration displayed in webm file

Reported by: Squerp Owned by:
Priority: normal Component: avformat
Version: git-master Keywords: duration
Cc: Blocked By:
Blocking: Reproduced by developer: yes
Analyzed by developer: no

Description

Summary of the bug: Ffmpeg says that a video is longer than it actually is.
How to reproduce:

  1. Download https://saveyoutube.com/?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DeRsGyueVLvQ as a 480p webm (named cliff.webm)
  2. Enter the following console commands and observe output
    $ ffmpeg -y -i cliff.webm -threads 8 -f webm -vcodec libvpx -g 120 -level 216 -profile 0 -qmax 42 -qmin 10 -rc_buf_aggressivity 0.95 -b:v 2M -acodec libvorbis -aq 70 -ac 2 transcoded.webm
    ffmpeg version N-41027-ge02e58f Copyright (c) 2000-2012 the FFmpeg developers
      built on May 25 2012 13:09:41 with gcc 4.6.3
      configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
      libavutil      51. 54.100 / 51. 54.100
      libavcodec     54. 23.100 / 54. 23.100
      libavformat    54.  6.100 / 54.  6.100
      libavdevice    54.  0.100 / 54.  0.100
      libavfilter     2. 77.100 /  2. 77.100
      libswscale      2.  1.100 /  2.  1.100
      libswresample   0. 15.100 /  0. 15.100
      libpostproc    52.  0.100 / 52.  0.100
    Input #0, matroska,webm, from 'cliff.webm':
      Duration: 00:00:15.07, start: 0.000000, bitrate: 753 kb/s
        Stream #0:0(eng): Video: vp8, yuv420p, 640x360, SAR 1:1 DAR 16:9, 1k fps, 1k tbr, 1k tbn, 1k tbc (default)
        Stream #0:1: Audio: vorbis, 44100 Hz, stereo, s16 (default)
    Please use -profile:a or -profile:v, -profile is ambiguous
    [buffer @ 0000000001e5fe60] w:640 h:360 pixfmt:yuv420p tb:1/1000 sar:1/1 sws_param:flags=2
    [buffersink @ 0000000001dd6880] No opaque field provided
    [aformat @ 0000000001dd7720] auto-inserting filter 'auto-inserted resampler 0' between the filter 'src' and the filter 'aformat'
    [aresample @ 00000000003ecf40] chl:stereo fmt:s16 r:44100Hz -> chl:stereo fmt:flt r:44100Hz
    [libvpx @ 0000000001e5f080] v1.0.0
    Output #0, webm, to 'transcoded.webm':
      Metadata:
        encoder         : Lavf54.6.100
        Stream #0:0(eng): Video: vp8, yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=10-42, 2000 kb/s, 1k tbn, 1k tbc (default)
        Stream #0:1: Audio: vorbis, 44100 Hz, stereo, flt (default)
    Stream mapping:
      Stream #0:0 -> #0:0 (vp8 -> libvpx)
      Stream #0:1 -> #0:1 (vorbis -> libvorbis)
    Press [q] to stop, [?] for help
    [libvorbis @ 0000000003c56d60] Que input is backward in time
        Last message repeated 8 times
    [webm @ 0000000001e576a0] Audio timestamp 2200 < 2207 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 2203 < 2207 invalid, cliping
    [libvorbis @ 0000000003c56d60] Que input is backward in time
        Last message repeated 1 times
    [webm @ 0000000001e576a0] Audio timestamp 3228 < 3235 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 3230 < 3235 invalid, cliping
    [libvorbis @ 0000000003c56d60] Que input is backward in time
        Last message repeated 2 times
    [webm @ 0000000001e576a0] Audio timestamp 3359 < 3367 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 3362 < 3367 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 3361 < 3368 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 3364 < 3368 invalid, cliping
    [libvorbis @ 0000000003c56d60] Que input is backward in time
        Last message repeated 1 times
    Que input is backward in timee=     470kB time=00:00:05.03 bitrate= 764.2kbits/s
    [libvorbis @ 0000000003c56d60] Que input is backward in time
    [webm @ 0000000001e576a0] Audio timestamp 6307 < 6314 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 6310 < 6314 invalid, cliping
    Que input is backward in timee=     854kB time=00:00:07.10 bitrate= 984.3kbits/s
    [libvorbis @ 0000000003c56d60] Que input is backward in time
        Last message repeated 2 times
    Que input is backward in timee=    1396kB time=00:00:09.27 bitrate=1233.1kbits/s
    [libvorbis @ 0000000003c56d60] Que input is backward in time
    [webm @ 0000000001e576a0] Audio timestamp 12199 < 12206 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 12202 < 12206 invalid, cliping
    [libvorbis @ 0000000003c56d60] Que input is backward in time
        Last message repeated 1 times
    [webm @ 0000000001e576a0] Audio timestamp 12615 < 12623 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 12618 < 12623 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 12617 < 12624 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 12620 < 12624 invalid, cliping
    Que input is backward in timee=    1812kB time=00:00:11.61 bitrate=1278.5kbits/s
    [libvorbis @ 0000000003c56d60] Que input is backward in time
    [webm @ 0000000001e576a0] Audio timestamp 12928 < 12935 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 12931 < 12935 invalid, cliping
    [libvorbis @ 0000000003c56d60] Que input is backward in time
    [webm @ 0000000001e576a0] Audio timestamp 12971 < 12978 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 12974 < 12978 invalid, cliping
    [libvorbis @ 0000000003c56d60] Que input is backward in time
        Last message repeated 7 times
    [webm @ 0000000001e576a0] Audio timestamp 14650 < 14658 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 14653 < 14658 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 14652 < 14659 invalid, cliping
    [webm @ 0000000001e576a0] Audio timestamp 14655 < 14659 invalid, cliping
    [libvorbis @ 0000000003c56d60] Que input is backward in time
    frame=  449 fps=140 q=0.0 Lsize=    2456kB time=00:00:14.94 bitrate=1345.8kbits/s
    video:1903kB audio:539kB global headers:4kB muxing overhead 0.419683%
    
    $ ffmpeg.exe -i transcoded.webm
    ffmpeg version N-41027-ge02e58f Copyright (c) 2000-2012 the FFmpeg developers
      built on May 25 2012 13:09:41 with gcc 4.6.3
      configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
      libavutil      51. 54.100 / 51. 54.100
      libavcodec     54. 23.100 / 54. 23.100
      libavformat    54.  6.100 / 54.  6.100
      libavdevice    54.  0.100 / 54.  0.100
      libavfilter     2. 77.100 /  2. 77.100
      libswscale      2.  1.100 /  2.  1.100
      libswresample   0. 15.100 /  0. 15.100
      libpostproc    52.  0.100 / 52.  0.100
    Input #0, matroska,webm, from 'transcoded.webm':
      Duration: 00:00:16.09, start: 0.000000, bitrate: 1250 kb/s
        Stream #0:0(eng): Video: vp8, yuv420p, 640x360, SAR 1:1 DAR 16:9, 1k fps, 1k tbr, 1k tbn, 1k tbc (default)
        Stream #0:1: Audio: vorbis, 44100 Hz, stereo, s16 (default)
    At least one output file must be specified
    
    $ ffmpeg.exe -i transcoded.webm -ss 16 -vframes 1 test.png
    ffmpeg version N-41027-ge02e58f Copyright (c) 2000-2012 the FFmpeg developers
      built on May 25 2012 13:09:41 with gcc 4.6.3
      configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
      libavutil      51. 54.100 / 51. 54.100
      libavcodec     54. 23.100 / 54. 23.100
      libavformat    54.  6.100 / 54.  6.100
      libavdevice    54.  0.100 / 54.  0.100
      libavfilter     2. 77.100 /  2. 77.100
      libswscale      2.  1.100 /  2.  1.100
      libswresample   0. 15.100 /  0. 15.100
      libpostproc    52.  0.100 / 52.  0.100
    Input #0, matroska,webm, from 'transcoded.webm':
      Duration: 00:00:16.09, start: 0.000000, bitrate: 1250 kb/s
        Stream #0:0(eng): Video: vp8, yuv420p, 640x360, SAR 1:1 DAR 16:9, 1k fps, 1k tbr, 1k tbn, 1k tbc (default)
        Stream #0:1: Audio: vorbis, 44100 Hz, stereo, s16 (default)
    [buffer @ 0000000003ca5840] w:640 h:360 pixfmt:yuv420p tb:1/1000 sar:1/1 sws_param:flags=2
    [buffersink @ 0000000001dd2b20] No opaque field provided
    [format @ 0000000001dd32e0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'format'
    [scale @ 0000000001dd3680] w:640 h:360 fmt:yuv420p sar:1/1 -> w:640 h:360 fmt:rgb24 sar:1/1 flags:0x4
    Output #0, image2, to 'test.png':
      Metadata:
        encoder         : Lavf54.6.100
        Stream #0:0(eng): Video: png, rgb24, 640x360 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 1k tbc (default)
    Stream mapping:
      Stream #0:0 -> #0:0 (vp8 -> png)
    Press [q] to stop, [?] for help
    frame=    0 fps=0.0 q=0.0 Lsize=       0kB time=00:00:00.00 bitrate=   0.0kbits/s
    video:0kB audio:0kB global headers:0kB muxing overhead nan%
    Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)
    

Observed: Although ffmpeg indicates that the file is 16.09 seconds long, it cannot get a thumbnail 16 seconds into the file.

Expected: Duration displays correctly, so that the thumbnail command works with any number less than the stated duration.

Notes: burek on IRC confirmed that this is a bug. Something seems to be wrong with the way saveyoutube's webm files are done (maybe youtube's), but that should get fixed on transcode. The transcoding confirms that the file is actually only 14.94 seconds long, however the duration is still displayed wrong in the newly transcoded file (observe the second command above).

In my particular use case, I need to be able to get the duration of the video after transcoding it. My current work-around is to scrape the "time=" value while transcoding, but this is not ideal. Ideally after transcoding, I could use ffmpeg or ffprobe to get the correct duration, without needing to remember it from the transcode; a duration can be displayed by these efficiently (without reading the whole file), but this duration is not correct.

Attachments (1)

cliff.webm (1.4 MB ) - added by Squerp 12 years ago.

Download all attachments as: .zip

Change History (4)

by Squerp, 12 years ago

Attachment: cliff.webm added

comment:1 by Michael Niedermayer, 12 years ago

Resolution: fixed
Status: newclosed

Retesting with current ffmpeg, it reports duration as 15.07 so some other fix seems to have fixed this as well

comment:2 by Squerp, 12 years ago

Resolution: fixed
Status: closedreopened

I just updated to the static build at http://ffmpeg.zeranoe.com/builds/source/ffmpeg/ffmpeg-git-633b90c.tar.xz (from 8/10/12), and performed the repro steps again. The log is essentially the same as before, with the post-transcoded duration reported at >16 seconds, which appears to still be a bug. Can you provide logs from the fixed version and details on the version in which it is fixed?

comment:3 by Carl Eugen Hoyos, 12 years ago

Component: undeterminedavformat
Keywords: duration added; Duration webm transcoding removed
Reproduced by developer: set
Resolution: fixed
Status: reopenedclosed
Version: unspecifiedgit-master

Fixed by Thierry Foucu in 98cbbab - not reproducible with 1.1 and 1.2.

Note: See TracTickets for help on using tickets.