观察 - 第一部分 - I
我在其他地方看到了运行以下命令的建议,以查看我的 .mp4 是否有问题。
ffmpeg -v error -i ~/Desktop/5_minute_sync_output_15mn.mp4 -f null - 2>error.log
当我运行上述命令时,我会在下面显示的行中看到一大堆日志。
Application provided invalid, non monotonically increasing dts to muxer in stream 0: 15635 >= 15635
这一点,通过搜索和阅读,我了解到解码时间戳不是按顺序排列的。
观察 - 第二部分
但是,使用以下命令和一些后处理检查同一 mp4 的帧,我看不到
pkt_dts
在 frame_info json 中,无论是视频流还是音频流都出现故障。ffprobe -loglevel panic -of json -show_frames ~/Desktop/5_minute_sync_output_15mn.mp4
这让我怀疑我对 的初步理解观察 - 第一部分 - I
这两件事不相关吗?
对此的任何帮助将不胜感激。
最佳答案
此消息与输入文件的有效性无关,它来自不接受非单调 dts 的输出格式。许多输入格式支持非单调的 dts (grep -r AVFMT_TS_NONSTRICT FFmpeg
),因此不一定是文件的问题。null
格式不需要任何时间戳,如 AVFMT_NOTIMESTAMPS
所示。 :
https://github.com/FFmpeg/FFmpeg/blob/ce8f77a903e1108bde774d5e0e59d8cd24f18c46/libavformat/nullenc.c#L36
但是,除非 AVFMT_TS_NONSTRICT
,否则 dts 检查仍会发生。设置在 nullenc.c
标志:
https://github.com/FFmpeg/FFmpeg/blob/ce8f77a903e1108bde774d5e0e59d8cd24f18c46/libavformat/mux.c#L563
这似乎是一个疏忽,检查传递给 null 格式的时间戳的有效性是没有意义的。其他实际上不对数据进行编码的格式,如哈希格式,也有 AVFMT_TS_NONSTRICT
旗帜。
关于FFmpeg - 非单调递增的 dts 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46231348/