我可以在单独的命令中成功使用 FFmpeg 的 concat 过滤器和 drawtext 过滤器。
但这需要两次编码运行。
是否可以让这两个过滤器以链式方式工作,以便只进行一种编码?如何操作?
我有三个视频剪辑需要连接起来,并且希望在生成的视频上出现一个共同的文本。
答案1
尝试这个:
ffmpeg -i inputfile1 -i inputfile2 -y \
-filter_complex '[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a];\
[v]drawtext=fontsize=72:fontcolor=White:fontfile=/usr/share/fonts/truetype/DejaVuSans.ttf:text=Text Line To Render:x=(w)/2:y=(h)/2[o]'\
-map '[o]' -map '[a]' ...other encoding parameters... outputfile
请注意,[v]
和[a]
只是标签——您也可以使用[p]
和[q]
,这样也可以。只有流 0 转到第一个标签,流 1 转到第二个标签。所以我假设流 0 是视频。
您必须确保inputfile1
和中的流inputfile2
具有相同的顺序。然后我们将视频流的输出作为输入传递给 drawtext 过滤器,方法是:[v]drawtext=....
现在,此输出[o]
在参数末尾标记为drawtext
。通过说-map [o]
,我们使用来自的输出drawtext
将其转发到您的其他编码参数。
我使用的字体路径来自 OpenSUSE。您的可能有所不同。