[FFmpeg-trac] #2300(avformat:new): segment muxer produces files with wrong duration

FFmpeg trac at avcodec.org
Sat Feb 23 20:37:04 CET 2013


#2300: segment muxer produces files with wrong duration
--------------------------------------+----------------------------------
               Reporter:  Cigaes      |                  Owner:
                   Type:  defect      |                 Status:  new
               Priority:  normal      |              Component:  avformat
                Version:  git-master  |               Keywords:  segment
             Blocked By:              |               Blocking:
Reproduced by developer:  0           |  Analyzed by developer:  0
--------------------------------------+----------------------------------
 The duration stored in the headers of the segments produced by the segment
 demuxer is not consistent with the timestamps of the frames it contains.
 Example:
 {{{
 ./ffmpeg_g -f lavfi -i testsrc=d=20 -f segment -c mpeg4 -map 0
 -segment_time 10 -y /tmp/segment%03d.mp4
 ./ffprobe_g -show_packets -show_format -of compact -show_entries
 packet=pts_time -show_entries format=duration /tmp/segment000.mp4
 ./ffprobe_g -show_packets -show_format -of compact -show_entries
 packet=pts_time -show_entries format=duration /tmp/segment001.mp4
 }}}
 {{{
 packet|pts_time=9.960000
 packet|pts_time=10.000000
 packet|pts_time=10.040000
 format|duration=10.322000|tag:major_brand=<snip>
 }}}
 {{{
 packet|pts_time=10.080000
 packet|pts_time=10.120000
 packet|pts_time=10.160000
 }}}

 As you can see, the timestamps of the segments are consistent, but the
 duration of the first fragment should be 10.08, that makes a 0.242 error.

 The result is correct without the segment muxer:
 {{{
 ./ffmpeg_g -f lavfi -i testsrc=d=10.08 -c mpeg4 -map 0 -y /tmp/segment.mp4
 ./ffprobe_g -show_packets -show_format -of compact -show_entries
 packet=pts_time -show_entries format=duration /tmp/segment.mp4
 }}}
 {{{
 packet|pts_time=10.000000
 packet|pts_time=10.040000
 format|duration=10.080000|tag:major_brand=<snip>
 }}}

 The same problem seems to happen with other formats than MP4, for example
 Matroska:
 {{{
 packet|pts_time=10.000000
 packet|pts_time=10.040000
 format|duration=13.640000|tag:ENCODER=Lavf54.63.100
 }}}

 Full (almost) console output of the previous commands (probably not
 helpful):
 {{{
 ./ffmpeg_g -f lavfi -i testsrc=d=20 -f segment -c mpeg4 -map 0
 -segment_time 10 -y /tmp/segment%03d.mp4
 ffmpeg version N-50194-g0ac71f9 Copyright (c) 2000-2013 the FFmpeg
 developers
   built on Feb 23 2013 11:34:47 with gcc 4.7 (Debian 4.7.2-5)
   configuration: --enable-shared --disable-static --enable-gpl --enable-
 libx264 --enable-libass --enable-libfreetype --enable-libopus --assert-
 level=2
   libavutil      52. 17.103 / 52. 17.103
   libavcodec     54. 92.100 / 54. 92.100
   libavformat    54. 63.100 / 54. 63.100
   libavdevice    54.  3.103 / 54.  3.103
   libavfilter     3. 39.101 /  3. 39.101
   libswscale      2.  2.100 /  2.  2.100
   libswresample   0. 17.102 /  0. 17.102
   libpostproc    52.  2.100 / 52.  2.100
 [lavfi @ 0x101c0c0] Estimating duration from bitrate, this may be
 inaccurate
 Input #0, lavfi, from 'testsrc=d=20':
   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
 Output #0, segment, to '/tmp/segment%03d.mp4':
   Metadata:
     encoder         : Lavf54.63.100
     Stream #0:0: Video: mpeg4, yuv420p, 320x240 [SAR 1:1 DAR 4:3], q=2-31,
 200 kb/s, 90k tbn, 25 tbc
 Stream mapping:
   Stream #0:0 -> #0:0 (rawvideo -> mpeg4)
 Press [q] to stop, [?] for help
 frame=  500 fps=0.0 q=3.6 Lsize=N/A time=00:00:20.00 bitrate=N/A
 video:742kB audio:0kB subtitle:0 global headers:0kB muxing overhead
 -100.002896%
 }}}
 {{{
 ./ffprobe_g -show_packets -show_format -of compact -show_entries
 packet=pts_time -show_entries format=duration /tmp/segment000.mp4
 ffprobe version N-50194-g0ac71f9 Copyright (c) 2007-2013 the FFmpeg
 developers
   built on Feb 23 2013 11:34:47 with gcc 4.7 (Debian 4.7.2-5)
   configuration: --enable-shared --disable-static --enable-gpl --enable-
 libx264 --enable-libass --enable-libfreetype --enable-libopus --assert-
 level=2
   libavutil      52. 17.103 / 52. 17.103
   libavcodec     54. 92.100 / 54. 92.100
   libavformat    54. 63.100 / 54. 63.100
   libavdevice    54.  3.103 / 54.  3.103
   libavfilter     3. 39.101 /  3. 39.101
   libswscale      2.  2.100 /  2.  2.100
   libswresample   0. 17.102 /  0. 17.102
   libpostproc    52.  2.100 / 52.  2.100
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/tmp/segment000.mp4':
   Metadata:
     major_brand     : isom
     minor_version   : 512
     compatible_brands: isomiso2mp41
     encoder         : Lavf54.63.100
   Duration: 00:00:10.32, start: 0.000000, bitrate: 313 kb/s
     Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D),
 yuv420p, 320x240 [SAR 1:1 DAR 4:3], 312 kb/s, 24.42 fps, 25 tbr, 12800
 tbn, 25 tbc
     Metadata:
       handler_name    : VideoHandler
 packet|pts_time=0.000000
 packet|pts_time=0.040000
 packet|pts_time=0.080000
 packet|pts_time=0.120000
 ...
 packet|pts_time=9.880000
 packet|pts_time=9.920000
 packet|pts_time=9.960000
 packet|pts_time=10.000000
 packet|pts_time=10.040000
 format|duration=10.322000|tag:major_brand=isom|tag:minor_version=512|tag:compatible_brands=isomiso2mp41|tag:encoder=Lavf54.63.100
 }}}
 {{{
 ./ffmpeg_g -f lavfi -i testsrc=d=10.08 -c mpeg4 -map 0 -y /tmp/segment.mp4
 ffmpeg version N-50194-g0ac71f9 Copyright (c) 2000-2013 the FFmpeg
 developers
   built on Feb 23 2013 11:34:47 with gcc 4.7 (Debian 4.7.2-5)
   configuration: --enable-shared --disable-static --enable-gpl --enable-
 libx264 --enable-libass --enable-libfreetype --enable-libopus --assert-
 level=2
   libavutil      52. 17.103 / 52. 17.103
   libavcodec     54. 92.100 / 54. 92.100
   libavformat    54. 63.100 / 54. 63.100
   libavdevice    54.  3.103 / 54.  3.103
   libavfilter     3. 39.101 /  3. 39.101
   libswscale      2.  2.100 /  2.  2.100
   libswresample   0. 17.102 /  0. 17.102
   libpostproc    52.  2.100 / 52.  2.100
 [lavfi @ 0x10b8000] Estimating duration from bitrate, this may be
 inaccurate
 Input #0, lavfi, from 'testsrc=d=10.08':
   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
 Output #0, mp4, to '/tmp/segment.mp4':
   Metadata:
     encoder         : Lavf54.63.100
     Stream #0:0: Video: mpeg4 ( [0][0][0] / 0x0020), yuv420p, 320x240 [SAR
 1:1 DAR 4:3], q=2-31, 200 kb/s, 12800 tbn, 25 tbc
 Stream mapping:
   Stream #0:0 -> #0:0 (rawvideo -> mpeg4)
 Press [q] to stop, [?] for help
 frame=  252 fps=0.0 q=2.7 Lsize=     396kB time=00:00:10.08 bitrate=
 321.5kbits/s
 video:394kB audio:0kB subtitle:0 global headers:0kB muxing overhead
 0.471736%
 }}}
 {{{
 ./ffprobe_g -show_packets -show_format -of compact -show_entries
 packet=pts_time -show_entries format=duration /tmp/segment.mp4
 ffprobe version N-50194-g0ac71f9 Copyright (c) 2007-2013 the FFmpeg
 developers
   built on Feb 23 2013 11:34:47 with gcc 4.7 (Debian 4.7.2-5)
   configuration: --enable-shared --disable-static --enable-gpl --enable-
 libx264 --enable-libass --enable-libfreetype --enable-libopus --assert-
 level=2
   libavutil      52. 17.103 / 52. 17.103
   libavcodec     54. 92.100 / 54. 92.100
   libavformat    54. 63.100 / 54. 63.100
   libavdevice    54.  3.103 / 54.  3.103
   libavfilter     3. 39.101 /  3. 39.101
   libswscale      2.  2.100 /  2.  2.100
   libswresample   0. 17.102 /  0. 17.102
   libpostproc    52.  2.100 / 52.  2.100
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/tmp/segment.mp4':
   Metadata:
     major_brand     : isom
     minor_version   : 512
     compatible_brands: isomiso2mp41
     encoder         : Lavf54.63.100
   Duration: 00:00:10.08, start: 0.000000, bitrate: 321 kb/s
     Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D),
 yuv420p, 320x240 [SAR 1:1 DAR 4:3], 319 kb/s, 25 fps, 25 tbr, 12800 tbn,
 25 tbc
     Metadata:
       handler_name    : VideoHandler
 packet|pts_time=0.000000
 packet|pts_time=0.040000
 packet|pts_time=0.080000
 ...
 packet|pts_time=9.960000
 packet|pts_time=10.000000
 packet|pts_time=10.040000
 format|duration=10.080000|tag:major_brand=isom|tag:minor_version=512|tag:compatible_brands=isomiso2mp41|tag:encoder=Lavf54.63.100
 }}}

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


More information about the FFmpeg-trac mailing list