组合图像并使用动画 xfade 在每个图像上绘制文本

组合图像并使用动画 xfade 在每个图像上绘制文本

我正在使用 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

相关内容