![如何在FFmpeg中获取与可读取的帧数相对应的持续时间?](https://linux22.com/image/1626273/%E5%A6%82%E4%BD%95%E5%9C%A8FFmpeg%E4%B8%AD%E8%8E%B7%E5%8F%96%E4%B8%8E%E5%8F%AF%E8%AF%BB%E5%8F%96%E7%9A%84%E5%B8%A7%E6%95%B0%E7%9B%B8%E5%AF%B9%E5%BA%94%E7%9A%84%E6%8C%81%E7%BB%AD%E6%97%B6%E9%97%B4%EF%BC%9F.png)
我是 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.19
10.19x30=305.7。这是最接近 305 的,尽管它仍然舍入不正确。
我也考虑过简单地采用 tbr 和帧数并由此生成持续时间(在本例中为 30x305= 10.16667),但有时 tbr 会像 10k 这样疯狂,并且肯定会产生不正确的持续时间。
这个问题有更好的解决办法吗?