![组合图像并使用动画 xfade 在每个图像上绘制文本](https://linux22.com/image/1699682/%E7%BB%84%E5%90%88%E5%9B%BE%E5%83%8F%E5%B9%B6%E4%BD%BF%E7%94%A8%E5%8A%A8%E7%94%BB%20xfade%20%E5%9C%A8%E6%AF%8F%E4%B8%AA%E5%9B%BE%E5%83%8F%E4%B8%8A%E7%BB%98%E5%88%B6%E6%96%87%E6%9C%AC.png)
我正在使用 ffmpeg 合并多幅图像和音频以制作视频。我正在使用 drawtext 和 xfade 进行溶解过渡。我的 ffmpeg 命令如下。
ffmpeg -loop 1 -t 5 -i ./img/img0.jpg -loop 1 -t 5 -i ./img/img1.jpg -loop 1 -t 5 -i ./img/img2.jpg -loop 1 -t 5 -i ./img/img3.jpg -t 20 -i audio.mp3 -filter_complex "
[0]xfade=transition=dissolve:duration=1:offset=4,drawtext=fontfile='./Lato/Lato-Regular.ttf':text='Text1':fontcolor='#666333':fontsize=(h/30):x=50:y=20,setsar=1[v0];
[1]xfade=transition=dissolve:duration=1:offset=4,drawtext=fontfile='./Lato/Lato-Regular.ttf':text='Text1':fontcolor='#666333':fontsize=(h/30):x=50:y=20,setsar=1[v1];
[2]xfade=transition=dissolve:duration=1:offset=4,drawtext=fontfile='./Lato/Lato-Regular.ttf':text='Text1':fontcolor='#666333':fontsize=(h/30):x=50:y=20,setsar=1[v2];
[3]xfade=transition=dissolve:duration=1:offset=4,drawtext=fontfile='./Lato/Lato-Regular.ttf':text='Text1':fontcolor='#666333':fontsize=(h/30):x=50:y=20,setsar=1[v3];
[v0][v1][v2][v3]concat=n=4:v=1:a=0,format=yuv420p[vid]" -map "[vid]" -map 4:a -c:v libx264 output.mp4
执行此命令时出现以下错误。
Cannot find a matching stream for unlabeled input pad 1 on filter Parsed_xfade_9
这个命令可能存在什么问题?
答案1
我在评论的帮助下想出了以下解决方案。将其发布在这里,供其他正在寻找相同解决方案的人参考。
ffmpeg -loop 1 -t 5 -i ./img/img0.jpg \
-loop 1 -t 5 -i ./img/img1.jpg \
-loop 1 -t 5 -i ./img/img2.jpg \
-loop 1 -t 5 -i ./img/img3.jpg \
-t 20 -stream_loop -1 -i audio.mp3 \
-filter_complex " \
[0]drawtext=fontfile='./Lato/Lato-Regular.ttf':text='Text1':fontcolor='#666333':fontsize=(h/30):x=50:y=20[v0]; \
[1]drawtext=fontfile='./Lato/Lato-Regular.ttf':text='Text1':fontcolor='#666333':fontsize=(h/30):x=50:y=20[v1]; \
[2]drawtext=fontfile='./Lato/Lato-Regular.ttf':text='Text1':fontcolor='#666333':fontsize=(h/30):x=50:y=20[v2]; \
[3]drawtext=fontfile='./Lato/Lato-Regular.ttf':text='Text1':fontcolor='#666333':fontsize=(h/30):x=50:y=20[v3]; \
[v0][v1]xfade=transition=dissolve:duration=1:offset=4,setsar=1[x1]; \
[x1][v2]xfade=transition=dissolve:duration=1:offset=8,setsar=1[x2]; \
[x2][v3]xfade=transition=dissolve:duration=1:offset=12,setsar=1[x3]" -map "[x3]" -map 4:a -c:v libx264 output.mp4
它还可以与concat
下面的过滤器配合使用:
ffmpeg -loop 1 -t 5 -i ./img/img0.jpg \
-loop 1 -t 5 -i ./img/img1.jpg \
-loop 1 -t 5 -i ./img/img2.jpg \
-loop 1 -t 5 -i ./img/img3.jpg \
-t 20 -stream_loop -1 -i audio.mp3 \
-filter_complex " \
[0]drawtext=fontfile='./Lato/Lato-Regular.ttf':text='Text1':fontcolor='#666333':fontsize=(h/30):x=50:y=20[v0]; \
[1]drawtext=fontfile='./Lato/Lato-Regular.ttf':text='Text1':fontcolor='#666333':fontsize=(h/30):x=50:y=20[v1]; \
[2]drawtext=fontfile='./Lato/Lato-Regular.ttf':text='Text1':fontcolor='#666333':fontsize=(h/30):x=50:y=20[v2]; \
[3]drawtext=fontfile='./Lato/Lato-Regular.ttf':text='Text1':fontcolor='#666333':fontsize=(h/30):x=50:y=20[v3]; \
[v0][v1]xfade=transition=dissolve:duration=1:offset=4,setsar=1[x1]; \
[x1][v2]xfade=transition=dissolve:duration=1:offset=8,setsar=1[x2]; \
[x2][v3]xfade=transition=dissolve:duration=1:offset=12,setsar=1[x3]; \
[x3]concat=n=1:v=1:a=0[vid]" -map "[vid]" -map 4:a -c:v libx264 output.mp4