我正在尝试添加一个小视频的视角,然后将其覆盖在其他视频之上。
到目前为止,我可以使视频小,添加视角到它,并将其覆盖到其他视频。但在应用透视滤镜后,多余的区域并不会变得透明,它们只是拉伸像素。
透视过滤器没有太多的文档,但据我所知,没有办法将额外的像素设置为透明。
所以我猜我需要在所需的区域应用某种alpha遮罩?
这是我用于透视图的命令:
ffmpeg -i /synced_folder/testvid.mp4 -vf perspective=0:0:W:H/4:0:H:W:3*H/4:0:1:0 /synced_folder/output5.mp4我认为这无关紧要,但我在带有centOS的虚拟机上运行了ffmpeg。
This is a SS of how the result looks like:
发布于 2016-08-03 14:26:21
这需要一种非常规的方法。透视滤镜旨在纠正记录过程中的某些类型的失真,而不是用于DVE类型的覆盖。边缘的像素将被扩展以填充画布。
这里的诀窍是向视频添加透明填充,然后添加透视。扩展的像素将是透明像素,它们在叠加时变得不可见。
ffmpeg -i base.mp4 -i overlay.mp4
filter_complex" [1]pad=iw+4:ih+4:2:2:black@0,perspective=0:0:W:H/4:0:H:W:3*H/4:0:1:0[p];
[0][p]overlay=-2:-2" output.mp4我用2个像素的边框填充,因为通常的像素格式是4:2:0。边框颜色为黑色,但带有0的alpha。
严格地说,透视值应该进行校正以说明边界,但这是一个很小的变化。覆盖也被偏移,以使可见视频与预期的目的地对齐。
发布于 2016-08-03 13:16:19
通过在我想要的区域中使用alpha为0的png,然后使用alphaextract和alphamerge命令,我获得了想要的效果。
它是有效的,但如果有人知道如何直接从透视命令获得透明的背景,我将不胜感激。
ffmpeg -y -i video.mp4 -loop 1 -i alphamask.png -filter_complex "[1:v]alphaextract[alf];[0:v][alf]alphamerge" -c:v qtrle -an /synced_folder/output.mov(请注意,如果播放输出,它可能看起来不起作用。要查看结果,您必须在背景中叠加一些内容)
发布于 2020-10-07 22:28:51
不幸的是,Gyan的方法对我不起作用。透视后的区域刚刚填充为黑色。
我不确定这是不是最好的方法,但我用chromakey解决了这个问题。
创建具有透视和绿色背景的视频:
ffmpeg -i video.mp4 -filter_complex "pad=iw+4:ih+4:2:2:0x00FF00@0,perspective=0:0:W:H/4:0:H:W:3*H/4:0:1:0" video_persp.mp4覆盖和剪切绿色背景:
ffmpeg -i video2.mp4 -i video_persp.mp4 -shortest -filter_complex "[1:v]chromakey=0x00FF00:0.2:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" video_final.mp4奖励:如果你想在图片上使用透视图并将其添加到视频中(没有黑区)
ffmpeg -i image.jpeg -filter_complex "pad=iw+4:ih+4:2:2:0x00FF00@0,perspective=0:0:W:H/4:0:H:W:3*H/4:0:1:0" image_persp.jpeg
ffmpeg -i image_persp.jpeg -vf "chromakey=0x00FF00:0.2:0.2" -c copy -c:v png image_transparent.png
ffmpeg -i video.mp4 -i image_transparent.png -filter_complex "[0]overlay=100:300" output.mp4https://stackoverflow.com/questions/38734068
复制相似问题