FFmpeg - 非单调递增的 dts 是什么意思?

标签 ffmpeg dts ffprobe audio-video-sync

观察 - 第一部分 - 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/

相关文章:

c - FFmpeg 将 RGB 转换为 YUV420 到 RGB 错误结果

iphone - 支持浮点 ABI 的 ios ffmpeg

python - 如何在 Windows 上使用 youtube-dl 提取音频

node.js - ffmpeg/ffprobe 生成数字数组输出

ffmpeg - 使用 ffmpeg 从 png 文件制作 gif 时颜色困惑(扭曲)

visual-studio-2010 - 使用 opencv2 函数调试 Opencv 项目时出现错误的未知原因

sql-server - SQL Server 差异更新

ffmpeg - 26 :30:02. 81 录制时间后非单调DTS

PHP DateTime::Diff 弄错了吗?

video - 使用媒体源 api 对不同 gop 大小的 mp4 进行自适应比特率流式传输