gpt4 book ai didi

video - 为视频提供圆形透明边缘,以便可以使用 FFMPEG 将其覆盖在另一个视频上

转载 作者:行者123 更新时间:2023-12-03 19:55:33 54 4
gpt4 key购买 nike

我试图在更大的视频(800x800)上叠加一个较小的视频(200x200)。

我已经使用 FFMPEG 覆盖过滤器来实现这一点

    ffmpeg -i big.mp4 -vf "movie=small.mkv[clip2]; [in][clip2] overlay=1:5 [out]"  final.mp4

挑战在于较小的视频需要对其边缘进行圆角处理。
我尝试过使用 alphaextract 和 alphamerge。 FFMPEG 的文档很少,我不知道该怎么做。

最佳答案

尽管我认为现有答案对圆形有好处,但听起来您想要更多的“圆角矩形”。以下是我的做法:

[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应该可以工作,只要他们有一个阿尔法 channel 。我的原始来源是 yuv420p所以我做了我的 yuva420p .
关于 geq :
看来你不能只改变 alpha channel (如果你尝试,你会得到一个错误“Aluminance or RGB expression is required”),所以 lum='p(X,Y)'基本上是一个虚拟无操作,允许您更改 alpha 而无需更改任何其他内容。
为了不必单独检查每个角,X 和 Y 通过公式转换为左上象限:
X' = W/2-abs(W/2-X)
Y' = H/2-abs(H/2-Y)
公式的第一部分检查是否 X'Y'在茅草区内:
Upper left quadrant
也就是说,是否:
    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
给出结果:
Example rounded rectangle video frame
在我的示例中,我使用了 1020作为圆的半径,但您可以将其更改为任何数字,以根据您的喜好或多或少地圆角。

关于video - 为视频提供圆形透明边缘,以便可以使用 FFMPEG 将其覆盖在另一个视频上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32859841/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com