使用 ffmpeg 从图像序列创建视频时,我发现无论将其编码为 30fps 还是 60fps,我都会得到相同长度的视频。假设我当前有 6329 个图像文件,以下两个命令会生成相同长度的视频文件:
1. ffmpeg -pattern_type glob -i '*.png' -r 30 -pix_fmt yuv420p out-30fps.mp4
2. ffmpeg -pattern_type glob -i '*.png' -r 60 -pix_fmt yuv420p out-60fps.mp4
通过上述操作,ffprobe 显示视频 1 为 00:04:13.17,编码为 30fps,而视频 2 为 00:04:13.15,编码为 60fps。加载到 Quicktime Player 中时,两个视频的长度和速度相同。
因此,有两个问题:
我对视频总时长感到困惑,因为 4 分 13 秒总共是 253 秒。在 30fps 下,253 秒应该需要 7590 帧,而不是 6329 帧。
要将现有的帧序列用作 60fps 源(而不是 30fps),需要做什么?或者换句话说,如何使最终视频在播放时每秒的帧数增加一倍?
答案1
对于图像序列,如果没有特别指定,ffmpeg 假设输入流的帧率为 25。因此,使用
ffmpeg -pattern_type glob -framerate 60 -i '*.png' -r 60 -pix_fmt yuv420p out-60fps.mp4
输出选项的作用-r 60
是创建 60 fps 的恒定帧速率流。如果输入流的速率不同,它将复制或丢弃帧以满足此速率。