Opened 4 years ago

Last modified 4 years ago

#8297 new defect

MPEG-TS with -muxrate gets confused by a start pts not 0

Reported by: Roman Huy-Prech Owned by:
Priority: normal Component: undetermined
Version: git-master Keywords: mpegts copyts
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:
When combining -muxrate with -output_ts_offset >0 or -copyts (when the copied start ts > 0) the muxer takes that time from 0 to start ts into account and creates huge outputs (muxing overhead / bitrate grows with start ts).

Here are two outputs, first with 0 output_ts_offset, then with 200. The first one comes pretty close to the requested muxrate of 300k with 301.4k, the second one has 3318.3k.

How to reproduce:

% ffmpeg -f lavfi -i testsrc -t 20 -output_ts_offset 0 -f mpegts -muxrate 300000 -c:v libx264 -y /dev/null
ffmpeg version 4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.8)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.1_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.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) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x7fe406010800] using SAR=1/1
[libx264 @ 0x7fe406010800] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7fe406010800] profile High 4:4:4 Predictive, level 1.3, 4:4:4 8-bit
Output #0, mpegts, to '/dev/null':
  Metadata:
    encoder         : Lavf58.29.100
    Stream #0:0: Video: h264 (libx264), yuv444p, 320x240 [SAR 1:1 DAR 4:3], q=-1--1, 25 fps, 90k tbn, 25 tbc
    Metadata:
      encoder         : Lavc58.54.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
frame=  500 fps=0.0 q=-1.0 Lsize=     731kB time=00:00:19.88 bitrate= 301.4kbits/s speed=56.4x    
video:83kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 776.126770%
[libx264 @ 0x7fe406010800] frame I:2     Avg QP:15.01  size:  3525
[libx264 @ 0x7fe406010800] frame P:135   Avg QP:13.52  size:   455
[libx264 @ 0x7fe406010800] frame B:363   Avg QP:13.87  size:    47
[libx264 @ 0x7fe406010800] consecutive B-frames:  1.0%  0.0% 19.8% 79.2%
[libx264 @ 0x7fe406010800] mb I  I16..4: 71.2%  0.0% 28.8%
[libx264 @ 0x7fe406010800] mb P  I16..4:  3.2%  0.0%  0.8%  P16..4:  7.3%  3.8%  2.6%  0.0%  0.0%    skip:82.3%
[libx264 @ 0x7fe406010800] mb B  I16..4:  0.2%  0.0%  0.0%  B16..8:  4.0%  0.1%  0.0%  direct: 0.1%  skip:95.7%  L0:53.9% L1:41.7% BI: 4.3%
[libx264 @ 0x7fe406010800] coded y,u,v intra: 9.9% 10.2% 8.9% inter: 0.7% 0.7% 0.6%
[libx264 @ 0x7fe406010800] i16 v,h,dc,p: 62% 22%  2% 14%
[libx264 @ 0x7fe406010800] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 28% 56% 12%  1%  1%  1%  0%  1%  0%
[libx264 @ 0x7fe406010800] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fe406010800] ref P L0: 69.4%  6.0% 20.9%  3.7%
[libx264 @ 0x7fe406010800] ref B L0: 55.2% 41.9%  2.9%
[libx264 @ 0x7fe406010800] ref B L1: 97.6%  2.4%
[libx264 @ 0x7fe406010800] kb/s:34.20
% ffmpeg -f lavfi -i testsrc -t 20 -output_ts_offset 200 -f mpegts -muxrate 300000 -c:v libx264 -y /dev/null
ffmpeg version 4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.8)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.1_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.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) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x7f8885806e00] using SAR=1/1
[libx264 @ 0x7f8885806e00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7f8885806e00] profile High 4:4:4 Predictive, level 1.3, 4:4:4 8-bit
Output #0, mpegts, to '/dev/null':
  Metadata:
    encoder         : Lavf58.29.100
    Stream #0:0: Video: h264 (libx264), yuv444p, 320x240 [SAR 1:1 DAR 4:3], q=-1--1, 25 fps, 90k tbn, 25 tbc
    Metadata:
      encoder         : Lavc58.54.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
frame=  500 fps=0.0 q=-1.0 Lsize=    8053kB time=00:00:19.88 bitrate=3318.3kbits/s speed=  58x    
video:83kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 9545.531250%
[libx264 @ 0x7f8885806e00] frame I:2     Avg QP:15.01  size:  3525
[libx264 @ 0x7f8885806e00] frame P:135   Avg QP:13.52  size:   455
[libx264 @ 0x7f8885806e00] frame B:363   Avg QP:13.87  size:    47
[libx264 @ 0x7f8885806e00] consecutive B-frames:  1.0%  0.0% 19.8% 79.2%
[libx264 @ 0x7f8885806e00] mb I  I16..4: 71.2%  0.0% 28.8%
[libx264 @ 0x7f8885806e00] mb P  I16..4:  3.2%  0.0%  0.8%  P16..4:  7.3%  3.8%  2.6%  0.0%  0.0%    skip:82.3%
[libx264 @ 0x7f8885806e00] mb B  I16..4:  0.2%  0.0%  0.0%  B16..8:  4.0%  0.1%  0.0%  direct: 0.1%  skip:95.7%  L0:53.9% L1:41.7% BI: 4.3%
[libx264 @ 0x7f8885806e00] coded y,u,v intra: 9.9% 10.2% 8.9% inter: 0.7% 0.7% 0.6%
[libx264 @ 0x7f8885806e00] i16 v,h,dc,p: 62% 22%  2% 14%
[libx264 @ 0x7f8885806e00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 28% 56% 12%  1%  1%  1%  0%  1%  0%
[libx264 @ 0x7f8885806e00] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7f8885806e00] ref P L0: 69.4%  6.0% 20.9%  3.7%
[libx264 @ 0x7f8885806e00] ref B L0: 55.2% 41.9%  2.9%
[libx264 @ 0x7f8885806e00] ref B L1: 97.6%  2.4%
[libx264 @ 0x7f8885806e00] kb/s:34.20

Change History (3)

comment:1 by Carl Eugen Hoyos, 4 years ago

Component: ffmpegundetermined
Keywords: mpegts added; mpeg-ts muxrate pts removed
Version: 4.2unspecified

Is the issue reproducible with current FFmpeg git head, the only version supported here?

comment:2 by Roman Huy-Prech, 4 years ago

Yes (only pasting output of the 200 ts offsetted one, ffmpeg just built from head):

$ ./ffmpeg -f lavfi -i testsrc -t 20 -output_ts_offset 200 -f mpegts -muxrate 300000 -c:v libx264 -y /dev/null
ffmpeg version N-95430-g9c820ebe90 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple LLVM version 10.0.1 (clang-1001.0.46.2)
  configuration: --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libopus --enable-libxvid --samples=fate-suite/
  libavutil      56. 35.101 / 56. 35.101
  libavcodec     58. 59.102 / 58. 59.102
  libavformat    58. 33.100 / 58. 33.100
  libavdevice    58.  9.100 / 58.  9.100
  libavfilter     7. 63.100 /  7. 63.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  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) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x7ffdf900a800] using SAR=1/1
[libx264 @ 0x7ffdf900a800] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7ffdf900a800] profile High 4:4:4 Predictive, level 1.3, 4:4:4 8-bit
Output #0, mpegts, to '/dev/null':
  Metadata:
    encoder         : Lavf58.33.100
    Stream #0:0: Video: h264 (libx264), yuv444p, 320x240 [SAR 1:1 DAR 4:3], q=-1--1, 25 fps, 90k tbn, 25 tbc
    Metadata:
      encoder         : Lavc58.59.102 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame=  500 fps=0.0 q=-1.0 Lsize=    8052kB time=00:00:19.88 bitrate=3318.2kbits/s speed=57.1x    
video:83kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 9545.311523%
[libx264 @ 0x7ffdf900a800] frame I:2     Avg QP:15.01  size:  3525
[libx264 @ 0x7ffdf900a800] frame P:135   Avg QP:13.52  size:   455
[libx264 @ 0x7ffdf900a800] frame B:363   Avg QP:13.87  size:    47
[libx264 @ 0x7ffdf900a800] consecutive B-frames:  1.0%  0.0% 19.8% 79.2%
[libx264 @ 0x7ffdf900a800] mb I  I16..4: 71.2%  0.0% 28.8%
[libx264 @ 0x7ffdf900a800] mb P  I16..4:  3.2%  0.0%  0.8%  P16..4:  7.3%  3.8%  2.6%  0.0%  0.0%    skip:82.3%
[libx264 @ 0x7ffdf900a800] mb B  I16..4:  0.2%  0.0%  0.0%  B16..8:  4.0%  0.1%  0.0%  direct: 0.1%  skip:95.7%  L0:53.9% L1:41.7% BI: 4.3%
[libx264 @ 0x7ffdf900a800] coded y,u,v intra: 9.9% 10.2% 8.9% inter: 0.7% 0.7% 0.6%
[libx264 @ 0x7ffdf900a800] i16 v,h,dc,p: 62% 22%  2% 14%
[libx264 @ 0x7ffdf900a800] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 28% 56% 12%  1%  1%  1%  0%  1%  0%
[libx264 @ 0x7ffdf900a800] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7ffdf900a800] ref P L0: 69.4%  6.0% 20.9%  3.7%
[libx264 @ 0x7ffdf900a800] ref B L0: 55.2% 41.9%  2.9%
[libx264 @ 0x7ffdf900a800] ref B L1: 97.6%  2.4%
[libx264 @ 0x7ffdf900a800] kb/s:34.20

comment:3 by Roman Huy-Prech, 4 years ago

Version: unspecifiedgit-master
Note: See TracTickets for help on using tickets.