[FFmpeg-trac] #8407(ffmpeg:new): Muxing DVB subtitles into TS

FFmpeg trac at avcodec.org
Thu Nov 28 21:57:44 EET 2019


#8407: Muxing DVB subtitles into TS
---------------------------------+--------------------------------------
             Reporter:  kachijs  |                     Type:  defect
               Status:  new      |                 Priority:  normal
            Component:  ffmpeg   |                  Version:  git-master
             Keywords:           |               Blocked By:
             Blocking:           |  Reproduced by developer:  0
Analyzed by developer:  0        |
---------------------------------+--------------------------------------
 So i have H264 video + AAC audio muxed inside transport stream (*.ts). To
 achive evenly spread PCR values i added muxrate tag to my command.

     {{{ffmpeg -analyzeduration 20000000 -probesize 20M -loglevel verbose
 -i 1135084.m4v -i 1135084.m4a -c copy -muxrate 7982K -map 0:v:0 -map 1:a:0
 -metadata:s:a:0 language=eng -metadata:s:a:0 tms_track_id=169451954
 TEMP0.ts}}}

 Since our client need DVB substitles we convert SRT to DVD with subtitle
 edit and then encode them to DVB with ffmpeg with this command:

     {{{ffmpeg -analyzeduration 20000000 -probesize 20M -loglevel verbose
 -i TEMP0.ts -i out.da.idx -map 0 -c copy -muxrate 7992K -map 1:s -c:s:0
 dvbsub -metadata:s:s:0 language=dan TEMP1.ts}}}

 here is output from ffmpeg command:

     {{{
       ffmpeg version git-2019-11-18-d831edc Copyright (c) 2000-2019 the
 FFmpeg developers
       built with gcc 9.2.1 (GCC) 20191010
       configuration: --enable-gpl --enable-version3 --enable-sdl2
 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass
 --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-
 libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-
 libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy
 --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx
 --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265
 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp
 --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-
 libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-
 libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc
 --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
 --enable-amf
       libavutil      56. 36.100 / 56. 36.100
       libavcodec     58. 62.100 / 58. 62.100
       libavformat    58. 35.100 / 58. 35.100
       libavdevice    58.  9.101 / 58.  9.101
       libavfilter     7. 66.100 /  7. 66.100
       libswscale      5.  6.100 /  5.  6.100
       libswresample   3.  6.100 /  3.  6.100
       libpostproc    55.  6.100 / 55.  6.100
     [h264 @ 000002bf7460d400] non-existing SPS 0 referenced in buffering
 period
     [h264 @ 000002bf7460d400] SPS unavailable in decode_picture_timing
     [h264 @ 000002bf7460d400] non-existing SPS 0 referenced in buffering
 period
     [h264 @ 000002bf7460d400] SPS unavailable in decode_picture_timing
     [h264 @ 000002bf7460d400] Reinit context to 1920x1088, pix_fmt:
 yuv420p
     [mpegts @ 000002bf7460ae00] max_analyze_duration 20000000 reached at
 20000000 microseconds st:0
     [mpegts @ 000002bf7460ae00] start time for stream 2 is not set in
 estimate_timings_from_pts
     Input #0, mpegts, from 'TEMP1.ts':
       Duration: 01:51:54.48, start: 1.440000, bitrate: 7992 kb/s
       Program 1
         Metadata:
           service_name    : Service01
           service_provider: FFmpeg
         Stream #0:0[0x100]: Video: h264 (High), 1 reference frame
 ([27][0][0][0] / 0x001B), yuv420p(progressive, left), 1920x1080
 (1920x1088) [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
         Stream #0:1[0x101](eng): Audio: aac (LC) ([15][0][0][0] / 0x000F),
 48000 Hz, stereo, fltp, 254 kb/s
         Stream #0:2[0x102](dan): Subtitle: dvb_subtitle ([6][0][0][0] /
 0x0006)
     [vobsub @ 000002bf75d65940] IDX/SUB: out.fi.idx -> out.fi.sub
     Input #1, vobsub, from 'out.fi.idx':
       Duration: N/A, bitrate: N/A
         Stream #1:0[0x0](fi): Subtitle: dvd_subtitle, 1920x1080 (default)
     File 'TEMP2.ts' already exists. Overwrite? [y/N] y
     [mpegts @ 000002bf74634f00] service 1 using PCR in pid=256,
 pcr_period=20ms
     [mpegts @ 000002bf74634f00] muxrate 8002000, sdt every 500 ms, pat/pmt
 every 100 ms
     Output #0, mpegts, to 'TEMP2.ts':
       Metadata:
         encoder         : Lavf58.35.100
         Stream #0:0: Video: h264 (High), 1 reference frame ([27][0][0][0]
 / 0x001B), yuv420p(progressive, left), 1920x1080 (0x0) [SAR 1:1 DAR 16:9],
 q=2-31, 25 fps, 25 tbr, 90k tbn, 90k tbc
         Stream #0:1(eng): Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000
 Hz, stereo, fltp, 254 kb/s
         Stream #0:2(dan): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
         Stream #0:3(fin): Subtitle: dvb_subtitle (dvbsub), 1920x1080
 (default)
         Metadata:
           encoder         : Lavc58.62.100 dvbsub
     Stream mapping:
       Stream #0:0 -> #0:0 (copy)
       Stream #0:1 -> #0:1 (copy)
       Stream #0:2 -> #0:2 (copy)
       Stream #1:0 -> #0:3 (dvd_subtitle (dvdsub) -> dvb_subtitle (dvbsub))
     Press [q] to stop, [?] for help
     No more output streams to write to, finishing.me=01:51:46.51
 bitrate=7990.2kbits/s speed=18.2x
     frame=167862 fps=456 q=-1.0 Lsize= 6558750kB time=01:51:54.47
 bitrate=8002.0kbits/s speed=18.2x
     video:5738580kB audio:212004kB subtitle:10989kB other streams:0kB
 global headers:0kB muxing overhead: 10.017118%
     Input file #0 (TEMP1.ts):
       Input stream #0:0 (video): 167862 packets read (5876305439 bytes);
       Input stream #0:1 (audio): 314742 packets read (217092443 bytes);
       Input stream #0:2 (subtitle): 1740 packets read (5578504 bytes);
       Total: 484344 packets (6098976386 bytes) demuxed
     Input file #1 (out.fi.idx):
       Input stream #1:0 (subtitle): 855 packets read (6881158 bytes); 854
 frames decoded;
       Total: 855 packets (6881158 bytes) demuxed
     Output file #0 (TEMP2.ts):
       Output stream #0:0 (video): 167862 packets muxed (5876305439 bytes);
       Output stream #0:1 (audio): 314742 packets muxed (217092443 bytes);
       Output stream #0:2 (subtitle): 1740 packets muxed (5578504 bytes);
       Output stream #0:3 (subtitle): 1708 frames encoded; 1708 packets
 muxed (5673736 bytes);
       Total: 486052 packets (6104650122 bytes) muxed
     [AVIOContext @ 000002bf7463c280] Statistics: 0 seeks, 25621 writeouts
     [AVIOContext @ 000002bf74613f80] Statistics: 6728300448 bytes read, 2
 seeks
     [AVIOContext @ 000002bf75efde40] Statistics: 7852032 bytes read, 0
 seeks
     [AVIOContext @ 000002bf74f30e40] Statistics: 40275 bytes read, 0 seeks
 }}}

 So i have video/audio and two dvb tracks inside one TS.

 Now im adding third subtitle and i get this warning:

     {{{
     frame=32351 fps=869 q=-1.0 size= 1255936kB time=00:21:33.99
 bitrate=7951.1kbits/s speed=34.8x
     [mpegts @ 0x2994600] Non-monotonous DTS in output stream 0:3;
 previous: 116868609, current: 116868607; changing to 116868610. This may
 result in incorrect timestamps in the output file.
     frame=33416 fps=886 q=-1.0 size= 1297408kB time=00:22:16.56
 bitrate=7952.0kbits/s speed=35.4x
 }}}

 By this warning it seems that something is not right with DVB (0:3) Finish
 track.
 Playing back the file with VLC i can see that Finish subtitles (between
 21:33 and 22:16) are not showing up.

 Dumping packets from 0:3 track i see that 4 packets have the same DTS/PTS
 values.

    {{{
     #stream#, dts,        pts, duration,     size, hash
     0,  111258000,  111258000,        0,     6979, 6215f060, S=1,
 1, 67d220bc
     0,  111689100,  111689100,        0,       25, e60e94fa, S=1,
 1, 67d220bc
     0,  113230800,  113230800,        0,     4423, f811be62, S=1,
 1, 67d220bc
     0,  113561550,  113561550,        0,       25, 6db8d81f, S=1,
 1, 67d220bc
     0,  113788800,  113788800,        0,     8247, 8b494779, S=1,
 1, 67d220bc
     0,  114191190,  114191190,        0,       25, a205e183, S=1,
 1, 67d220bc

     0,  116868607,  116868607,        0,     1119, e5d11188, S=1,
 1, 67d220bc
     0,  116868607,  116868607,        0,       28, 11e09861, S=1,
 1, 67d220bc
     0,  116868607,  116868607,        0,     1122, 8320a3f5, S=1,
 1, 67d220bc
     0,  116868607,  116868607,        0,       28, e896fa37, S=1,
 1, 67d220bc

     0,  117205200,  117205200,        0,     3583, 47b23f27, S=1,
 1, 67d220bc
     0,  117611640,  117611640,        0,       25, e5ae32ed, S=1,
 1, 67d220bc
     0,  117709200,  117709200,        0,     1119, 208b4f80, S=1,
 1, 67d220bc
     0,  117830970,  117830970,        0,       25, 2a130b71, S=1,
 1, 67d220bc
     0,  117846000,  117846000,        0,     3105, f179a4f0, S=1,
 1, 67d220bc
     0,  118148040,  118148040,        0,       25, 29b3ad66, S=1,
 1, 67d220bc
     0,  120146410,  120146410,        0,     1119, 714ef5d1, S=1,
 1, 67d220bc
     0,  120146410,  120146410,        0,       28, bbad7fed, S=1,
 1, 67d220bc
     0,  120708000,  120708000,        0,     2060, 703084f7, S=1,
 1, 67d220bc
     0,  120855420,  120855420,        0,       25, 6db8d81f, S=1,
 1, 67d220bc
     0,  121122000,  121122000,        0,     2184, 04a7be71, S=1,
 1, 67d220bc
     0,  121395330,  121395330,        0,       25, a205e183, S=1,
 1, 67d220bc
 }}}

 Thes are the lines from SRT file where the warning happens:

     {{{
     146
     00:21:34,840 --> 00:21:36,600
     Make!
     147
     00:21:42,280 --> 00:21:46,800
     Make! Hei, Make. Make!
     148
     00:21:47,880 --> 00:21:49,240
     Make!
     149
     00:21:49,400 --> 00:21:52,760
     Odota minua, Make!
     150
     00:22:00,400 --> 00:22:01,760
     Make!
 }}}

 Sometimes muxing subtitles in different order (for example Finish before
 Danish and then Swedish) would solve this problem, but i would like to
 know why such things are happening.

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


More information about the FFmpeg-trac mailing list