我有两张图片,想要在它们之间创建一个简单的渐变过渡效果。
同时,我希望最终的输出是一系列图片而不是视频?
所以如果淡入淡出的过渡时间为10帧,我希望输出的结果是由10张图片组成的序列。
如何使用ffmpeg实现这个效果?
请查看混合
视频滤镜:
ffmpeg -loop 1 -i input0.png -loop 1 -i input1.png -filter_complex "[1:v][0:v]blend=all_expr='A*(if(gte(T,3),1,T/3))+B*(1-(if(gte(T,3),1,T/3)))'" -t 4 frames_%04d.png
这个示例将在input0.png
上进行3秒的淡出,并在input1.png
上进行淡入。
要对多个图像进行淡入/淡出效果,请参见使用ffmpeg
创建具有5个图像的视频并添加淡入/淡出效果。
试试这个:
ffmpeg \
-loop 1 -t 3 -i input1.png \
-loop 1 -t 3 -i input2.png \
-loop 1 -t 3 -i input3.png \
-loop 1 -t 3 -i input4.png \
-loop 1 -t 3 -i input5.png \
-filter_complex \
"[1:v][0:v]blend=all_expr='A*(if(gte(T,3),1,T/3))+B*(1-(if(gte(T,3),1,T/3)))'[v0]; \
[2:v][1:v]blend=all_expr='A*(if(gte(T,3),1,T/3))+B*(1-(if(gte(T,3),1,T/3)))'[v1]; \
[3:v][2:v]blend=all_expr='A*(if(gte(T,3),1,T/3))+B*(1-(if(gte(T,3),1,T/3)))'[v2]; \
[4:v][3:v]blend=all_expr='A*(if(gte(T,3),1,T/3))+B*(1-(if(gte(T,3),1,T/3)))'[v3]; \
[v0][v1][v2][v3]concat=n=4:v=1:a=0[v]"
-map "[v]" out.mp4
-t 12 frames_%04d.png
或其他方式。