两个视频内容的透明化融合处理
一、引言
在《moviepy音视频剪辑:使用rotate函数实现视频变换处理以及参数expand取值为True时的花屏问题解决方案》介绍了视频旋转的方法和花屏问题解决方案,Baby CY 博友提了个问题:“旋转后会出现黑色的背景填充,请问能把黑色去掉变成透明吗?”,该问题是视频旋转时,由于视频内容为矩形,旋转时部分区域有内容,部分区域无内容为黑色透明色,且随着旋转这部分的范围是变化的,Baby CY 希望当该视频和其他视频叠加时,旋转视频的黑色部分不遮挡下层视频的内容。
老猿以前没有对这个进行过研究,但觉得用使用遮罩是可以的,后来仔细研究了一下,发现可以使用遮罩或图像处理技术都可以实现,下面分别介绍这两种实现方式。
二、相关素材介绍
WinBasedWorkHard_src.mp4:周星驰的“爱拼才会赢”MV 抖音视频
mydream.mp4:张靓颖的“我的梦”抖音视频
Lotus.jpg:荷花图片
三、使用 mask 遮罩实现视频叠加透明效果
2.1、概述
在《moviepy音视频剪辑:mask clip遮罩剪辑、遮片、蒙版的作用以及其包含的构成内容》中介绍:“mask 遮罩是一种只有灰度值的像素构成的帧组成的剪辑,其作用就是在带 mask 的剪辑与其他剪辑合成时确认是否显示带 mask 剪辑的对应像素。”因此可以支持实现一个视频增加一个遮罩,遮罩剪辑透明部分就可以允许下层的视频显示。
2.2、程序实现
本案例实现一个可以在视频上面叠加一个旋转视频或旋转图片的通用方法,支持两个内容大小不同的视频叠加。为了支持叠加对象为图片,需要将图片转换成视频,为了尽可能突出图片的表达内容,在将图片转视频前将图片的背景色转换为黑色。
相关程序包括如下函数:
ridPicBackground:去掉图片背景色,被 convertPicToVideo 调用
convertPicToVideo:将图片转成视频,被 videoOverlyObjMask 调用
videoOverlyObjMask:将视频和叠加对象叠加
上述函数中关键函数为 videoOverlyObjMask,这个函数是视频旋转并叠加的主程序代码。相关程序代码如下:
2.3、案例效果
2.3.1、剪辑和自身旋转剪辑叠加效果
2.3.3、视频和图片构造的旋转剪辑叠加
2.3.4、剪辑和另一个旋转剪辑叠加效果
三、OpenCV 图像运算+Moviepy 实现视频旋转叠加
3.1、概述
在《OpenCV-Python常用图像运算:加减乘除幂开方对数及位运算》介绍了 OpenCV 主要的图像运算,视频是由一帧帧图像构成,通过 OpenCV 和 Moviepy 的灵活运用,可以实现一些特殊的特效。下面介绍通过 OpenCV 图像运算+Moviepy 实现视频叠加透明效果。
3.2、程序实现
本案例实现一个可以在视频上面叠加一个旋转视频或旋转图片的通用方法,支持两个内容大小不同的视频叠加。为了支持叠加对象为图片,需要将图片转换成视频,为了尽可能突出图片的表达内容,在将图片转视频前将图片的背景色转换为黑色。
相关程序包括如下函数:
adjustImgAccordingToRefImg:参考底层视频大小调整上层视频大小,被帧生成函数 get_frame 调用
get_frame:根据两个需要叠加的视频的帧生成结果视频的帧,生成时调用 adjustImgAccordingToRefImg 调整上层视频大小
ridPicBackground:去掉图片背景色,被 convertPicToVideo 调用
convertPicToVideo:将图片转成视频,被 videoOverlyObjMask 调用
videoOverlyObjMask:将视频和叠加对象对应视频叠加,叠加时通过 adjustImgAccordingToRefImg 参考底层视频帧大小调整上层视频帧大小
上述函数中关键函数为 get_frame、videoOverlyObjMask,这二个函数是视频旋转并叠加的主程序代码。相关程序代码如下:
3.3、案例效果
3.3.1、剪辑和自身旋转剪辑叠加效果
3.3.2、视频和图片构造的旋转剪辑叠加
3.3.3、剪辑和另一个旋转剪辑叠加效果
四、小结
本文介绍了通过 moviepymask 遮罩或 OpenCV 图像融合实现两个剪辑的叠加融合,实现了上层剪辑背景色部分不遮挡下层剪辑内容的效果。通过实现案例的介绍,可以理解遮罩剪辑和 OpenCV 图像运算的作用,并在视频特效制作中使用相关方法。
更多关于 Moviepy 的介绍请大家参考《Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载》。
评论