如何使用ffmpeg淡化两个图像

时间:2014-02-01 03:34:15

标签: image ffmpeg transition fade

我有两张图片,我想在它们之间创建一个简单的渐变过渡。

我还希望最终输出是一系列图像而不是视频? 因此,如果衰落过渡是10帧长,我希望输出是10个图像的序列。

如何使用ffmpeg实现此目的?

3 个答案:

答案 0 :(得分:14)

请参阅blend video filter

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

此示例将input1.pnginput0.png进行3秒交叉淡入淡出。

若要交叉淡化/倾斜到黑色的多个图像,请参阅Create video with 5 images with fade-in/out effect in ffmpeg

答案 1 :(得分:0)

据我所知,你不能用ffmpeg实现这一点。如果你想用脚本编写,请查看MLT framework;如果你想要一个交互式应用程序,请看看openshot。

答案 2 :(得分:0)

尝试一下:

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或其他方式。