(FFMPEG)在使用透视

时间:2016-08-03 03:50:12

标签: video ffmpeg overlay transparency video-editing

我正在尝试为小视频添加视角,然后将其叠加在另一个视频之上。

到目前为止,我可以将视频缩小,为其添加视角并将其叠加到其他视频上。但在应用透视滤镜后,多余的区域不会变成透明,只会拉伸像素。

透视滤镜没有太多文档,但据我所知,没有办法将额外的像素设置为透明。

所以我猜不太需要将某种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的VM上运行ffmpeg。

This is a SS of how the result looks like:

3 个答案:

答案 0 :(得分:3)

这需要一种非传统的方法。透视滤镜用于在录制期间校正某些类型的失真,而不是用于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。边框颜色为黑色,但alpha为0

严格地说,应该更正透视值以考虑边界,但这是一个小变化。叠加也是偏移的,以将可见视频与预期目标对齐。

答案 1 :(得分:0)

通过在我想要的区域使用带有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

(请注意,如果您播放输出,它可能看起来不起作用。要查看结果,您必须在背景中叠加它)

答案 2 :(得分:0)

不幸的是,吉安的方法对我不起作用。透视后的区域只是黑色。

我不确定这是最好的方法,但是我可以使用抠像键解决此问题。

创建具有透视图和绿色背景的视频:

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.mp4