如何为 ffmpeg 提供多个输入?

如何为 ffmpeg 提供多个输入?

我正在使用 ffmpeg 制作延时视频,效果很好。作为输入,我有名为 001.jpg、002.jpg 等的图像,然后使用命令

ffmpeg -i %3d.jpg -sameq -s 1440x1080 video.mp4

我制作了视频。但是当我想使用多个集合作为输入来制作视频时,问题就出现了。例如,我在一个目录中有两个文件夹 set1 和 set2,每个文件夹都包含前面解释过的格式的照片。

我已经尝试过了

ffmpeg -i ./set1/%3d.jpg -i ./set2/%3d.jpg -sameq -s 1440x1080 video.mp4

但最终只使用第一组数据制作了视频。有没有简单的方法可以做到这一点?

谢谢!

答案1

您需要使用 concat 模块,并且在此示例中,我将帧速率设置为 10,因此您必须使用 filter_complex 。

ffmpeg -framerate 10 -i set1_%04d.jpg \
       -framerate 10 -i set2_%04d.jpg \
       -framerate 10 -i set3_%04d.jpg \
       -filter_complex '[0:0] [1:0] [2:0] concat=n=3:v=1:a=0 [v],[v] fps=10 [vv]' \
       -map '[vv]' -s 1440x1080 video.mp4 

文档filter_complex句法 : http://ffmpeg.org/ffmpeg-filters.html#Filtergraph-syntax-1

文档连接筛选 : http://ffmpeg.org/ffmpeg-filters.html#concat

答案2

您可以使用 bash 来扩展文件列表,例如:

对于名为包含的文件inputs.txt

-i /path/to/input1.mp4
-i /path/to/input2.mp4

然后仅作为使用复杂过滤图的示例。

ffmpeg `cat inputs.txt | xargs echo` \
    -filter_complex \
    "
      [0:v]trim=0:10[a];
      [1:v]trim=10:20[b]
    " \
    -map "[a]" a.mp4 \
    -map "[b]" b.mp4

相关内容