I've encountered an issue while concatenating video files using FFmpeg, specifically when including multiple streams using the -map 0
option. Here are the details:
I have two FFmpeg commands to trim the first three seconds of a video from a public sample:
Without
-map 0
:ffmpeg -i http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 -t 3 output_t.mp4 -y
With
-map 0
:ffmpeg -y -i http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 -map 0 -t 3 output_t.mp4
When using the output from the first command in a concat demuxer, everything works fine. However, using the output from the second command results in numerous "Non-monotonic DTS in output stream" errors and the final video's length is incorrect.
The whole process looks like
ffmpeg -y -i http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 -map 0 -t 3 output_t.mp4
ffmpeg -y -i http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 -filter_complex '[0]trim=duration=3[s0];[0]atrim=duration=3[s1]' -map '[s0]' -map '[s1]' trim_atrim_duration.mp4
ffmpeg -y -f concat -safe 0 -i files.txt -map 0 -c copy concat_demuxer.mp4
the body of files
file 'output_t.mp4'
file 'trim_atrim_duration.mp4'
Here are my questions:
Why does including -map 0
(to include all streams) in the trimming process cause non-monotonic DTS errors when those segments are later used in a concat demuxer?
Any advice on how to diagnose and resolve these issues would be greatly appreciated. I'm particularly interested in understanding the underlying cause of the non-monotonic DTS errors and finding a reliable workflow for trimming and concatenating videos with multiple streams.
Thank you for your help!
I tried analysis the PTS & DTS to see if there is any difference between the w/o map output_t.mp4
ffprobe -v error -select_streams v -show_entries frame=pkt_pts_time,pkt_dts_time -of default=noprint_wrappers=1:nokey=1 output_t.mp4 > video_pts_dts.txt
ffprobe -v error -select_streams a -show_entries frame=pkt_pts_time,pkt_dts_time -of default=noprint_wrappers=1:nokey=1 output_t.mp4 > audio_pts_dts.txt
but didn't find any difference