案例
ffmpeg \
-i input.mp4 \
-i image1.png \
-i image2.png \
-filter_complex \
[1:v]scale=100:100[img1]; \
[2:v]scale=1280:720[img2]; \
[0:v][img1]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2[bkg];\
[bkg][img2]overlay=0:0 \
-y output.mp4
-i input.mp4//这个是原始文件
-i image1.png//第一个水印图片
-i image2.png//第二个水印图片
-y output.mp4//输出文件
[1:v]这个里头两个参数,1表示的是操作对象的编号。在本例中0就是原始视频文件input.mp4,
1就是image1.png,
2就是image2.png,
3就是output.mp4。
而另一个参数v表示操作对象里的视频信息。
[img1]是这个操作过滤器的名字。(当然名字可以随便起)
[1:v]scale=100:100[img1]; \
所以这头一句[1:v]scale=100:100[img1]的意思就是对图片imagei.png进行调节尺寸的操作,并将这个操作的结果命名为img1。
[2:v]scale=1280:720[img2]; \
后面的[2:v]和[img2]也是一个意思。
[0:v][img1]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2[bkg];\
我们继续,overlay前面[0:v][img1]凑一起是什么意思呢
0自然就是指的原始视频input.mp4,这句的意思就是将[img1]叠加到0对象的视频上。本例中就是把image1.png叠加到input.mp4上。
这里需要注意的就是顺序:后一个对象叠加到前一个上,后一个对象在上层。如果写成[img1][0:v],那相对本例其实就是把视频叠加到图片imge1.png上。这样的话一般来说由于视频通常是全屏,等于用视频覆盖了图片,水印完全看不到了。
好,我们又把这个操作的结果命名为[bkg],
[bkg][img2]overlay=0:0 \
那么接下来[bkg][img2]的意思就很明了了。就是把image2.png再叠加上去,image2.png是在最上层的,如果位置重合的话,他会遮盖 image1.png的水印。
于是,事就这样成了。
转场动画
ffmpeg \
-loop 1 -t 3 -i img001.jpg \
-loop 1 -t 3 -i img002.jpg \
-loop 1 -t 3 -i img003.jpg \
-loop 1 -t 3 -i img004.jpg \
-loop 1 -t 3 -i img005.jpg \
-filter_complex \
"[0][1]xfade=transition=circlecrop:duration=0.5:offset=2.5[f0]; \
[f0][2]xfade=transition=smoothleft:duration=0.5:offset=5[f1]; \
[f1][3]xfade=transition=pixelize:duration=0.5:offset=7.5[f2]; \
[f2][4]xfade=transition=hblur:duration=0.5:offset=10[f3]" \
-map "[f3]" -r 25 -pix_fmt yuv420p -vcodec libx264 output-swipe-custom.mp4
duration:动效时间
offset:指前一个视频做转场的起始位置,是从视频头开始算
[0:1]这个里头两个参数,0表示的是操作对象的编号。在本例中0就是img001.jpg,1就是img002.jpg,2就是img003.jpg。
[f0]是这个操作过滤器的名字。(当然名字可以随便起)
|<==offset|<==duration==>|
AAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBB
ffmpeg -i v0.mp4 -i v1.mp4 -i v2.mp4 -i v3.mp4 -i v4.mp4 -filter_complex \
"[0][1:v]xfade=transition=fade:duration=1:offset=3[vfade1]; \
[vfade1][2:v]xfade=transition=fade:duration=1:offset=10[vfade2]; \
[vfade2][3:v]xfade=transition=fade:duration=1:offset=21[vfade3]; \
[vfade3][4:v]xfade=transition=fade:duration=1:offset=25,format=yuv420p; \
[0:a][1:a]acrossfade=d=1[afade1]; \
[afade1][2:a]acrossfade=d=1[afade2]; \
[afade2][3:a]acrossfade=d=1[afade3]; \
[afade3][4:a]acrossfade=d=1" \
-movflags +faststart out.mp4
input | input duration | + | previous xfade offset |
- | xfade duration |
offset = |
---|---|---|---|---|---|---|
v0.mp4 |
4 | + | 0 | - | 1 | 3 |
v1.mp4 |
8 | + | 3 | - | 1 | 10 |
v2.mp4 |
12 | + | 10 | - | 1 | 21 |
v3.mp4 |
5 | + | 21 | - | 1 | 25 |
Merging multiple video files with ffmpeg and xfade filter - Stack Overflow
转场+放大
ffmpeg \
-t 5 -i 1.jpg \
-t 5 -i 2.jpg \
-t 5 -i 3.jpg \
-t 5 -i 4.jpg \
-filter_complex \
"[0:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=out:st=4:d=1[v0]; \
[1:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
[2:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
[3:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
[v0][v1][v2][v3]concat=n=4:v=1:a=0,format=yuv420p[v]" -map "[v]" -s "800x450" -t 40 ./out_fade.mp4
参数v表示操作对象里的视频信息。
st=0
表示动画的开始时间,这里是4
d=3
表示动画的时间
ffmpeg \
-loop 1 -t 2 -i 1.jpg \
-loop 1 -t 2 -i 2.jpg \
-loop 1 -t 2 -i 3.jpg \
-loop 1 -t 2 -i 4.jpg \
-loop 1 -t 2 -i 5.jpg \
-filter_complex \
"[0:v]xfade=transition=wiperight:duration=1:offset=1[v0]; \
[1:v]xfade=transition=wiperight:duration=1:offset=1[v1]; \
[2:v]xfade=transition=wiperight:duration=1:offset=1[v2]; \
[3:v]xfade=transition=wiperight:duration=1:offset=1[v3]; \
[v0][v1][v2][v3]concat=n=4:v=1:a=0,format=yuv420p[v]" \
-map "[v]" \
-y out.mp4
FFmpeg中转场滤镜xfade的时间参数(duration和offset)与算法解读_ffmpeg xfade_Jack_Chai的博客-CSDN博客
How to Create a Slideshow from Images with FFmpeg - Bannerbear
Creating an FFmpeg image slideshow with zoompan and fade in/out - Super User
FFmpeg实现音视频同步的精准片段拼接_ffmpeg atrim_Jack_Chai的博客-CSDN博客
所有转场效果: Xfade -- FFmpeg
xfade官方文档:FFmpeg Filters Documentation
fade滤镜:FFmpeg Filters Documentation
zoompan