如何在FFmpeg中获取与可读取的帧数相对应的持续时间?

如何在FFmpeg中获取与可读取的帧数相对应的持续时间?

我是 Python MoviePy 包的开发人员,我正在尝试重新设计我们导入文件信息的方式,使其更加健壮。

我需要获取任何视频文件的持续时间,以便当将其与媒体的 fps 值(在本例中为tbr)相乘时,它等于视频中的帧数。

我找到了 3 个解决方案:

(1) ffmpeg -i broken_video.mp4
(2) ffmpeg -i broken_video.mp4 -f null -
(3) ffmpeg -i broken_video.mp4 -codec copy -f null -

FFmpeg 报告该视频的速率为 29.90 fps、30 tbr,包含 305 帧。

它们都列Duration: 00:00:10.26在顶部附近。我认为这是从元数据中得出的,并且已被证明是不可靠的,所以我宁愿避免使用它。在本例中,10.26x30=307.8

(2)time=00:00:10.21接近底部。10.21x30=306.3。此外,由于重新编码整个文件,因此这个文件的速度要慢得多。

(3)得出time=00:00:10.1910.19x30=305.7。这是最接近 305 的,尽管它仍然舍入不正确。

我也考虑过简单地采用 tbr 和帧数并由此生成持续时间(在本例中为 30x305= 10.16667),但有时 tbr 会像 10k 这样疯狂,并且肯定会产生不正确的持续时间。

这个问题有更好的解决办法吗?

相关内容