【问题标题】:FFmpeg - What does non monotonically increasing dts mean?FFmpeg - 非单调递增的 dts 是什么意思?
【发布时间】:2022-04-21 08:08:05
【问题描述】:

观察 - 第一部分 - I

我在其他地方看到了运行以下命令以查看我的 .mp4 是否有问题的建议。

ffmpeg -v error  -i ~/Desktop/5_minute_sync_output_15mn.mp4 -f null - 2>error.log

当我运行上面的命令时,我在下面显示的行中看到一大堆日志。

应用程序提供了无效的、非单调递增的 dts 流 0 中的复用器:15635 >= 15635

这个,通过搜索和阅读,我了解到解码时间戳不是按顺序排列的。

观察 - 第二部分

但是,使用以下命令和一些后处理检查同一 mp4 的帧时,我没有看到 frames_info json 中的 pkt_dts 对视频或音频流都无序。

ffprobe -loglevel panic -of json -show_frames ~/Desktop/5_minute_sync_output_15mn.mp4

这让我怀疑我对观察 - 第一部分 - I

的初步理解

这两件事不相关吗? 对此的任何帮助将不胜感激。

【问题讨论】:

  • 单调递增表示严格递增。您不能有两个具有相同值或低于前一个值的数据包。它是否适用于ffprobe 输出?
  • 好的。单调的部分是有道理的。当我按照第二部分观察中的第二个命令所示对其进行 ffprobe 时,所有 pkt_dts 值都在严格增加。不知道为什么。
  • 大家好,有谁能帮我理解这些日志吗?我无法理解它。我也看到它与其他文件一致。
  • 在这里我想知道我是否应该担心这个:(

标签: ffmpeg dts ffprobe audio-video-sync


【解决方案1】:

此消息与输入文件的有效性无关,它来自不接受非单调 dts 的输出格式。很多输入格式都支持非单调的dts(grep -r AVFMT_TS_NONSTRICT FFmpeg),所以不一定是文件的问题。

null 格式不需要任何时间戳,如 AVFMT_NOTIMESTAMPS 所示:

https://github.com/FFmpeg/FFmpeg/blob/ce8f77a903e1108bde774d5e0e59d8cd24f18c46/libavformat/nullenc.c#L36

但是,除非在 nullenc.c 标志中设置了 AVFMT_TS_NONSTRICT,否则 dts 检查仍然会发生:

https://github.com/FFmpeg/FFmpeg/blob/ce8f77a903e1108bde774d5e0e59d8cd24f18c46/libavformat/mux.c#L563

这似乎是一个疏忽,检查传递给 null 格式的时间戳的有效性是没有意义的。其他实际上不对数据进行编码的格式,如哈希格式,也有AVFMT_TS_NONSTRICT 标志。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多