我试图在较大的视频(800x800)上叠加较小的视频(200x200)。
我已经使用FFMPEG覆盖过滤器实现了这个
ffmpeg -i big.mp4 -vf "movie=small.mkv[clip2]; [in][clip2] overlay=1:5 [out]" final.mp4
挑战是较小的视频需要对其边缘进行舍入。 我尝试过使用alphaextract和alphamerge。关于FFMPEG的文档很少,我不确定如何去做。
答案 0 :(得分:7)
尽管我认为现有的答案对一个圆圈是有好处的,但这听起来像是您想要更多的“圆角矩形”。这是我的操作方式:
[1]format=yuva420p,geq=lum='p(X,Y)':a='if(gt(abs(W/2-X),W/2-10)*gt(abs(H/2-Y),H/2-10),if(lte(hypot(10-(W/2-abs(W/2-X)),10-(H/2-abs(H/2-Y))),10),255,0),255)'[rounded];
关于format
:
alpha values can’t be changed in a source that doesn’t have an existing alpha channel。因此format=yuva420p
过滤器将添加一个(即a
中的yuva
)。据我所知,yuva444p
也很常见(在other answers中使用),但是其他rgba
之类的格式也应该起作用,只要它们具有alpha通道。我的原始来源是yuv420p
,所以我成为了yuva420p
。
关于geq
:
似乎您不能仅更改 alpha通道(如果尝试,则会收到错误消息“必须使用亮度或RGB表达式”),因此lum='p(X,Y)'
基本上是一个虚拟的无操作项,可让您更改alpha而不更改其他任何内容。
因此不必分别检查每个角,X和Y可以通过以下公式转换为左上象限:
X' = W/2-abs(W/2-X)
Y' = H/2-abs(H/2-Y)
公式的第一部分检查X'
和Y'
是否在茅草区域内:
也就是说,是否:
X' < 10
and Y' < 10
如果不是,则将a
设置为255
(即显示像素)。
如果它们落在该区域内,则计算点(X,Y)
与(10,10)
处的圆心之间的距离。如果点(X,Y)
落在圆内,则a
设置为255
;否则,a
设置为0
,并且该像素被隐藏。
可以更改半径以提供或多或少的“倒圆角”。半径为20
的完整示例命令为:
ffmpeg -f lavfi -i color=darkblue:size=800x600 -f lavfi -i color=gray:size=600x450 -frames:v 180 -filter_complex "[1]format=yuva420p,geq=lum='p(X,Y)':a='if(gt(abs(W/2-X),W/2-20)*gt(abs(H/2-Y),H/2-20),if(lte(hypot(20-(W/2-abs(W/2-X)),20-(H/2-abs(H/2-Y))),20),255,0),255)'[rounded];[0][rounded]overlay=x=(W-w)/2:y=(H-h)/2" example.mp4
给出结果:
在我的示例中,我使用10
或20
作为圆的半径,但是您可以将其更改为任意数字,以使拐角或多或少地变圆。
答案 1 :(得分:1)
Main movie,带有圆形覆盖物(2nd movie)
ffmpeg \
-i "trailer_iphone.m4v" \
-i "sintel_trailer-480p.mp4" \
-filter_complex "\
[1]format=yuva444p,geq=lum='p(X,Y)':a='st(1,pow(min(W/2,H/2),2))+st(3,pow(X-(W/2),2)+pow(Y-(H/2),2));if(lte(ld(3),ld(1)),255,0)'[circular shaped video];\
[circular shaped video]scale=w=-1:h=200[circular shaped video small];\
[0][circular shaped video small]overlay" \
-filter_complex_threads 1 \
-map 0:a \
-metadata:s:a:0 title="Sound main movie" \
-disposition:a:0 default \
-map 1:a \
-metadata:s:a:1 title="Sound overlayed movie" \
-disposition:a:1 none \
-c:v libx264 \
-preset ultrafast \
-shortest \
"result.mp4"
说明:
第5行:要创建圆形蒙版,请使用“ geq”过滤器。这用于从第二个视频输入创建带有alpha通道的圆形视频
第6行:将圆形视频的高度缩放到200px,并保持宽高比
第7行:重叠视频
您可以跳过第9-14行。然后ffmpeg将默认使用主电影的音轨。
第9行:可选:第一个输入的音频将是输出中的第一个音频轨道
第10行:可选:在输出中为第一个音轨命名(在VLC中有效)
第11行:可选:确保将输出中的第1个音频轨道作为默认轨道播放
第12行:可选:第二个输入的音频将是输出中的第二个音频轨道。
第13行:可选:在输出中为第二音轨命名(在VLC中有效)
第14行:可选:确保除非使用播放器(VLC)选择第二音频轨,否则不会播放输出中的第二音轨。
第17行:输出的持续时间将与最短的输入一样长