我想根据给定的持续时间从图像生成视频。持续时间可以精确到毫秒,最多为三位小数。
让我们为实验生成一个简单的图像。以下命令生成一个 100x100 的图像,其中所有像素都是红色。
convert -size 100x100 xc:red red.png
我知道可以通过将以下标志传递给 来从图像生成视频ffmpeg
。我们还可以使用它ffprobe
来打印文件的持续时间。
ffmpeg -v error -y -loop 1 -i red.png -t 3 output.mp4
ffprobe -v error -show_entries stream=duration -print_format default=nk=1:nw=1 output.mp4
3.000000
当我将时长设置为 时3.1
,ffprobe
显示3.12
为文件的时长。但是,我希望生成的文件的时长为3.1
。
ffmpeg -v error -y -loop 1 -i red.png -t 3.1 output.mp4
ffprobe -v error -show_entries stream=duration -print_format default=nk=1:nw=1 output.mp4
3.120000
如何ffmpeg
制作一个时长为几秒的视频文件3.1
?
答案1
ffmpeg 默认为 25fps(如果没有说明帧速率)。
25fps = 每帧 40ms。3.12 秒除以 40ms。3.1 秒则不然。
您需要使用-r
标志将帧速率设置为 50fps(每帧 20 毫秒),或者任何能被 3.1 整除的值。
要使用 ffmpeg 设置精确的持续时间,持续时间必须始终是帧持续时间的倍数,否则 ffmpeg 将四舍五入到最接近的 PTS。