如何使用ffmpeg在视频中显示特定时间的图像

10

我正在尝试从一系列图像中创建视频。但是,我必须以不同的秒数显示每个图像。如何使用FFMPEG做到这一点。

提前致谢。

2个回答

9

FFmpeg wiki中有一些提示。这个例子(在维基百科中倒数第二个)特别适合您的需求:

ffmpeg -loop 1 -f image2 -i img.png -c:v libx264 -t 30 out.mp4

-t后面的数字(在本例中为30)是视频的时长,以秒为单位。

只需像这样执行该命令多次:

ffmpeg -loop 1 -f image2 -i intro.png -c:v libx264 -t 5 out1.mp4
ffmpeg -loop 1 -f image2 -i someimage.png -c:v libx264 -t 15 out2.mp4
ffmpeg -loop 1 -f image2 -i someotherimage.png -c:v libx264 -t 25 out3.mp4
ffmpeg -loop 1 -f image2 -i outro.png -c:v libx264 -t 10 out4.mp4

然后合并生成的视频(如果需要):

  1. 创建一个文本文件(例如: videos.txt),将视频文件名列出。

    file 'out1.mp4'
    file 'out2.mp4'
    file 'out3.mp4'
    file 'out4.mp4'

  2. 运行以下命令(如有需要,请更改文件名)

    ffmpeg -f concat -i videos.txt -c copy final_video.mp4

有关视频合并(连接)的更多信息,请参见wiki


6
这是做这件事的最佳方式吗? - Tegra Detra
您可以避免创建要连接的文件列表。实际上,您可以使用命名管道完全避免创建临时文件。这两种方法在此简要说明: https://trac.ffmpeg.org/wiki/Concatenate - Martin R.
1
@MageProspero 不是这样的,请看我的回答。 - Mattwmaster58

2

ffmpeg 包含了一个关于这个的章节:https://trac.ffmpeg.org/wiki/Slideshow

以下是一个例子:

input.txt 的内容示例:

file '/path/to/dog.png'
duration 5
file '/path/to/cat.png'
duration 1
file '/path/to/rat.png'
duration 3
file '/path/to/tapeworm.png'
duration 2
file '/path/to/tapeworm.png'

然后运行:

ffmpeg -f concat -i input.txt -vsync vfr -pix_fmt yuv420p -framerate 30 output.mp4


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接