FFMPEG - Non-monotonous DTS

25,009

Solution 1

Your CSI clip converted with non-monotonous DTS message as well. I was able to play the MP4 clip okay in VLC, but ffplay hiccuped at the end. I'm not sure what that means.

ffmpeg -i op.mp4 -b:v 128k -flags -global_header -map 0:0 -map 0:1 -f segment -segment_time 4 -segment_list_size 0 -segment_list op.m3u8 -segment_format mpegts op%05d.ts

Just get a newer version of ffmpeg. Yours is from June 2013. Mine from March 2014 worked just fine. The mp4 plays fine for me on VLC. The individual .ts files played okay for me as well.

C:\temp>dir op*
 Volume in drive C has no label.
 Volume Serial Number is xxx-xxx
 Directory of C:\temp
10/07/2014  08:52 PM               169 op.m3u8
10/07/2014  08:51 PM           509,425 op.mp4
10/07/2014  08:52 PM           404,764 op00000.ts
10/07/2014  08:52 PM           148,520 op00001.ts
               4 File(s)      1,062,878 bytes

the op.m3u8 created the segment in 4 seconds increments until the file was completely processed.

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:5
#EXTINF:4.120000,
op00000.ts
#EXTINF:1.960000,
op00001.ts
#EXT-X-ENDLIST

Solution 2

That mp4 is only 6 seconds long, and the audio stream is a different length than the video, I was able to sync the two and get rid of the DTS errors by doing the following though:

ffmpeg -i op.mp4 -ss 00:00:00.11 -t 00:00:06.00 -vn -y op.wav
ffmpeg -i op.mp4 -ss 0.010000 -t 00:00:06 -vcodec rawvideo -an -y op.avi
ffmpeg -i op.avi -i op.wav -b:v 590k -b:a 130k -t 00:00:06 -y op_fixed.mp4

This basically recreates the mp4 and fixes some minor corruption issues while making both streams the same length.

Also, your command line doesn't need the two -map parameters, and neither of the codecs from the original mp4 support global headers, besides which I don't imagine you'd need them anyway. The following should complete without errors after completing the steps I listed above:

ffmpeg -i op_fixed.mp4 -b:v 128k -f segment -segment_time 4 -segment_list_size 0 -segment_list op.m3u8 -segment_format mpegts op%05d.ts
Share:
25,009

Related videos on Youtube

Author by

Divya Bhargov

Updated on September 18, 2022

Comments

  • Divya Bhargov 3 months

    When I use FFMPEG to convert a video from MP4 to M3U8, using the following command,

    ffmpeg -i op.mp4  -b:v 128k -flags -global_header -map 0:0 -map 0:1 -f segment -segment_time 4 -segment_list_size 0 -segment_list op.m3u8 -segment_format mpegts op%05d.ts
    

    I get the below warning :

    Non-monotonous DTS in output stream 0:1; previous: 347527, current: 346508; changing to 347528. This may result in incorrect timestamps in the output file.
    

    The M3U8 is generated, but only audio is coming up on quicktime player.

    Both the Sample MP4 and M3U8 are available here

    So, I would like to know

    1. Reason behind this error. Is it a corrupt mp4 or problem during conversion. The m3u8 is playable is not playable on quicktime properly. Only audio comes up, no video.

    2. How can I possibly fix this

    Complete FFMPEG Console Output :

    ffmpeg version git-2013-06-06-c51654f Copyright (c) 2000-2013 the FFmpeg developers
      built on Jun  6 2013 12:54:24 with gcc 4.6.3 (GCC) 20120306 (Red Hat 4.6.3-2)
      configuration: --prefix=/root/ffmpeg_build --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --bindir=/root/bin --extra-libs=-ldl --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264
      libavutil      52. 35.100 / 52. 35.100
      libavcodec     55. 15.100 / 55. 15.100
      libavformat    55.  8.102 / 55.  8.102
      libavdevice    55.  2.100 / 55.  2.100
      libavfilter     3. 75.101 /  3. 75.101
      libswscale      2.  3.100 /  2.  3.100
      libswresample   0. 17.102 /  0. 17.102
      libpostproc    52.  3.100 / 52.  3.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'op.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf55.8.102
      Duration: 00:00:06.00, start: 0.010000, bitrate: 679 kb/s
        Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 640x364 [SAR 1:1 DAR 160:91], 590 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
        Metadata:
          handler_name    : VideoHandler
        Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 130 kb/s
        Metadata:
          handler_name    : SoundHandler
    [segment @ 0x32e1d60] Codec for stream 0 does not use global headers but container format requires global headers
    [segment @ 0x32e1d60] Codec for stream 1 does not use global headers but container format requires global headers
    Output #0, segment, to 'op%05d.ts':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf55.8.102
        Stream #0:0(eng): Video: mpeg2video, yuv420p, 640x364 [SAR 1:1 DAR 160:91], q=2-31, 128 kb/s, 90k tbn, 25 tbc
        Metadata:
          handler_name    : VideoHandler
        Stream #0:1(eng): Audio: mp2, 44100 Hz, stereo, s16, 128 kb/s
        Metadata:
          handler_name    : SoundHandler
    Stream mapping:
      Stream #0:0 -> #0:0 (h264 -> mpeg2video)
      Stream #0:1 -> #0:1 (aac -> mp2)
    Press [q] to stop, [?] for help
    [segment @ 0x32e1d60] Non-monotonous DTS in output stream 0:1; previous: 347527, current: 346508; changing to 347528. This may result in incorrect timestamps in the output file.
    frame=  109 fps=0.0 q=31.0 size=N/A time=00:00:04.29 bitrate=N/A dup=14 drop=0  frame=  151 fps=0.0 q=24.8 Lsize=N/A time=00:00:06.00 bitrate=N/A dup=14 drop=0    
    video:350kB audio:96kB subtitle:0 global headers:0kB muxing overhead -100.004823%
    

    With vsync and async options, the error that appears is "Codec for stream 0 does not use global headers but container format requires global headers". Here is the console output :

    ffmpeg -i op.mp4  -b:v 128k -flags -global_header -map 0:0 -map 0:1 -f segment -segment_time 4 -segment_list_size 0 -segment_list nop.m3u8 -segment_format mpegts nop%05d.ts  
    ffmpeg version git-2013-06-06-c51654f Copyright (c) 2000-2013 the FFmpeg developers
      built on Jun  6 2013 12:54:24 with gcc 4.6.3 (GCC) 20120306 (Red Hat 4.6.3-2)
      configuration: --prefix=/root/ffmpeg_build --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --bindir=/root/bin --extra-libs=-ldl --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264
      libavutil      52. 35.100 / 52. 35.100
      libavcodec     55. 15.100 / 55. 15.100
      libavformat    55.  8.102 / 55.  8.102
      libavdevice    55.  2.100 / 55.  2.100
      libavfilter     3. 75.101 /  3. 75.101
      libswscale      2.  3.100 /  2.  3.100
      libswresample   0. 17.102 /  0. 17.102
      libpostproc    52.  3.100 / 52.  3.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'op.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf55.8.102
      Duration: 00:00:06.00, start: 0.010000, bitrate: 679 kb/s
        Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 640x364 [SAR 1:1 DAR 160:91], 590 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
        Metadata:
          handler_name    : VideoHandler
        Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 130 kb/s
        Metadata:
          handler_name    : SoundHandler
    [segment @ 0x3bf3d60] Codec for stream 0 does not use global headers but container format requires global headers
    [segment @ 0x3bf3d60] Codec for stream 1 does not use global headers but container format requires global headers
    Output #0, segment, to 'nop%05d.ts':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf55.8.102
        Stream #0:0(eng): Video: mpeg2video, yuv420p, 640x364 [SAR 1:1 DAR 160:91], q=2-31, 128 kb/s, 90k tbn, 25 tbc
        Metadata:
          handler_name    : VideoHandler
        Stream #0:1(eng): Audio: mp2, 44100 Hz, stereo, s16, 128 kb/s
        Metadata:
          handler_name    : SoundHandler
    Stream mapping:
      Stream #0:0 -> #0:0 (h264 -> mpeg2video)
      Stream #0:1 -> #0:1 (aac -> mp2)
    Press [q] to stop, [?] for help
    [segment @ 0x3bf3d60] Non-monotonous DTS in output stream 0:1; previous: 347527, current: 346508; changing to 347528. This may result in incorrect timestamps in the output file.
    frame=  119 fps=0.0 q=31.0 size=N/A time=00:00:04.68 bitrate=N/A dup=14 drop=0  frame=  151 fps=0.0 q=24.8 Lsize=N/A time=00:00:06.00 bitrate=N/A dup=14 drop=0    
    video:350kB audio:96kB subtitle:0 global headers:0kB muxing overhead -100.004823%
    
    • Admin
      Admin over 9 years
      Please include the complete ffmpeg console output.
    • Admin
      Admin over 9 years
      Edited to add the complete ffmpeg console output
    • Admin
      Admin over 9 years
      What happens if you add the parameters -vsync 1 -async 1 ?
    • Admin
      Admin over 9 years
      Updated above the console output with vsync and async options
    • Admin
      Admin almost 9 years
      Does this happen for any .mp4 file?
    • Admin
      Admin over 8 years
      I don't understand what you're trying to do. M3U8 is a playlist specification, not a video format. Please provide more details on your desired use case.
    • Admin
      Admin about 8 years
      There are like 5 people on this planet who know the answer...