☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░
一、引言
在《moviepy音视频剪辑:mask clip遮罩剪辑、遮片、蒙版的作用以及其包含的构成内容》中介绍:“mask遮罩是一种只有灰度值的像素构成的帧组成的剪辑,其作用就是在带mask的剪辑与其他剪辑合成时确认是否显示带mask剪辑的对应像素。”
本文实现一个使用mask遮罩剪辑实现叠加视频的透明效果。
二、程序实现
本案例实现一个可以在视频上面叠加一个旋转视频或旋转图片的通用方法,支持两个内容大小不同的视频叠加。为了支持叠加对象为图片,需要将图片转换成视频,为了尽可能突出图片的表达内容,在将图片转视频前将图片的背景色转换为黑色。
相关程序包括如下函数:
- ridPicBackground:去掉图片背景色,被convertPicToVideo调用
- convertPicToVideo:将图片转成视频,被videoOverlyObjMask调用
- videoOverlyObjMask:将视频和叠加对象叠加
上述函数中关键函数为videoOverlyObjMask,这个函数是视频旋转并叠加的主程序代码。相关程序代码如下:
def videoOverlyObjMask(videoFName,objType='self',obj=None):
"""
剪辑自身叠加一个该剪辑旋转的层,旋转层带自身转换的遮罩剪辑
:param videoFName: 剪辑来源视频文件
:return: 参数视频剪辑自身叠加一个该剪辑旋转层剪辑
"""
clip = VideoFileClip(videoFName, audio=True)
objClip = clip
if objType == 'img':
objClip = convertPicToVideo(obj, duration=clip.duration, createMask=False).set_fps(clip.fps)
elif objType == 'video':
if isinstance(obj, str):
objClip = VideoFileClip(obj, audio=False)
else:
objClip = obj
rotateClip = objClip.rotate(angleF,expand=True).fx(vfx.resize,clip.size)
maskclip = rotateClip.to_mask()
rotateClip = rotateClip.set_mask(maskclip)
clipVideo = CompositeVideoClip([clip, rotateClip])
return clipVideo
if __name__=='__main__':
#实现剪辑和自身旋转剪辑叠加
result2 = videoOverlyObjMask(r"F:\video\WinBasedWorkHard_src.mp4")
result2.write_videofile(r"F:\video\WinBasedWorkHard_mask_self.mp4", threads=8)
#实现剪辑和图片构造的旋转剪辑叠加
result3 = videoOverlyObjMask(r"F:\video\WinBasedWorkHard_src.mp4",'img',r'F:\pic\Lotus.JPG')
result3.write_videofile(r"F:\video\WinBasedWorkHard_mask_pic.mp4", threads=8)
#实现剪辑和另一个旋转剪辑叠加
result4 = videoOverlyObjMask(r"F:\video\mydream.mp4", 'video',r"F:\video\WinBasedWorkHard_src.mp4")
result4.write_videofile(r"F:\video\WinBasedWorkHard_mask_video.mp4", threads=8)
为了与付费专栏的文章有所差别,其他次要函数在此就不提供代码了。本文对应的付费专栏文章为《moviepy音视频剪辑:使用mask遮罩剪辑实现叠加透明效果详解》。
三、案例效果
3.1、相关素材介绍
- WinBasedWorkHard_src.mp4:周星驰的“爱拼才会赢”MV抖音视频
- mydream.mp4:张靓颖的“我的梦”抖音视频
- Lotus.jpg:荷花图片
3.2、剪辑和自身旋转剪辑叠加效果
3.3、视频和图片构造的旋转剪辑叠加
3.4、剪辑和另一个旋转剪辑叠加效果
四、小结
本文介绍了通过moviepy设置mask遮罩的剪辑和另外的剪辑叠加后实现上层剪辑和下层剪辑叠加后,上层剪辑背景色部分被下层剪辑内容所呈现替代的方案。通过该实现案例的介绍,可以理解遮罩剪辑的作用,并在多个剪辑制作特效中使用该方法制作视频特效。
如果觉得本文可以,老猿请大家帮忙点个赞、加个收藏,谢谢!
更多moviepy的介绍请参考《PyQt+moviepy音视频剪辑实战文章目录》或《moviepy音视频开发专栏》。这2个专栏内容的导读请参考《Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载》。
本文对应的付费专栏文章为《moviepy音视频剪辑:使用mask遮罩剪辑实现叠加透明效果详解》。
关于老猿的付费专栏
老猿的付费专栏《使用PyQt开发图形界面Python应用 https://blog.csdn.net/laoyuanpython/category_9607725.html》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏 https://blog.csdn.net/laoyuanpython/category_10232926.html》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,都适合有一定Python基础但无相关知识的小白读者学习。这2个付费专栏都有对应免费专栏,只是收费专栏的文章介绍更具体、内容更深入、案例更多。
付费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》。
关于Moviepy音视频开发的内容,请大家参考《Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载》的导览式介绍。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录 https://blog.csdn.net/laoyuanpython/category_9831699.html》从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。