gpt4 book ai didi

ffmpeg - 将一个视频叠加在另一个视频上,并使黑色像素透明

转载 作者:行者123 更新时间:2023-12-02 08:45:28 46 4
gpt4 key购买 nike

我正在尝试使用 FFMPEG 创建一个视频,其中一个视频叠加在另一个视频之上。

我有 2 个 MP4。我需要将叠加视频中的所有黑色像素设为透明,以便我可以看到其下方的主视频。

我找到了两种将一个视频叠加在另一个视频上的方法:

首先,以下内容将叠加层置于中心,因此隐藏了其下方的主视频部分:

    ffmpeg -i 1.mp4 -vf "movie=2.mp4 [a]; [in][a] overlay=352:0 [b]" combined.mp4 -y

并且,此视频将叠加视频放置在左侧,但其不透明度设置为 50%,因此至少其下方的其他视频可见:

ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex "[0:v]setpts=PTS-STARTPTS[top]; [1:v]setpts=PTS-STARTPTS, format=yuva420p,colorchannelmixer=aa=0.5[bottom]; [top][bottom]overlay=shortest=0" -acodec libvo_aacenc -vcodec libx264 out.mp4 -y

我的目标只是使覆盖层 (2.mp4) 中的所有黑色像素完全透明。这怎么办。

最佳答案

执行此操作的名义方法是对黑色进行色度键控,然后叠加,但正如 @MoDJ 所说,这可能不会产生令人满意的结果。我下面建议的方法也不会,但值得一试。

ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex
"[1]split[m][a];
[a]geq='if(gt(lum(X,Y),16),255,0)',hue=s=0[al];
[m][al]alphamerge[ovr];
[0][ovr]overlay"
output.mp4

在上面,我复制了覆盖视频流,然后使用 geq 过滤器来操纵亮度值,以便任何亮度大于 16(即不是纯黑色)的像素将其亮度设置为白色,否则为零。由于我没有提供两个颜色 channel 的表达式,因此 geq 依赖于亮度表达式。我们不希望这样,所以我使用 hue 过滤器来取消这些 channel 。然后,我使用 alphamerge 过滤器将其作为 Alpha channel 与叠加视频的第一个副本合并。然后,叠加。正如我所说,这可能不会产生令人满意的结果。您可以调整 geq 过滤器中的值 16 来更改黑色阈值。对于有限范围(Y:16-235)视频文件,建议范围为 16-24。

关于ffmpeg - 将一个视频叠加在另一个视频上,并使黑色像素透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38578363/

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