如何使用 Python 实现剪影转场效果?
·
剪映转场特效
01 剪影转场效果
在剪影编辑软件中, 有非常丰富炫酷的转场效果。 下面介绍一种利用Python, 实现其中部分转场效果的简便方法。 这类转场是对两个静态图片进行不规则分割切换。 下面说明具体实现的方法, 并将其应用到平时的 VLOG 的制作中去。
![]()

▲ 图1.1 用于转场测试的图片

▲ 图1.2 剪影切换效果
一、利用蒙版制作转场v
两幅静态图像转场的一种方法, 就是利用一个蒙版序列来完成。 蒙版是黑白颜色的。 对它进行亮度取反,也是黑白颜色。 利用同一个模版以及它的亮度反色分别对两个图像进行叠加, 然后将叠加的结果重叠在一起, 便可以将两幅图像融合在一起了。


▲ 图1.1.1 两幅静态图像切换的蒙版

▲ 图1.1.2 两幅静态图像转场所使用的蒙版
一个蒙版可以形成一副转场图片。 应用蒙版序列, 就可以形成转场视频序列图片了。![]()

▲ 图1.1.3 利用互补模板进行融合
使用 Python 中的 CV2 , 只需要简单的几句话便可以实现上面的图像操作。 读取蒙版, 对它进行取反。 将两个蒙版各自除以 255, 然后分别乘以转场的两幅图片。 最后相加在一起就形成转场的图片。 利用蒙版序列便可以形成转场视频了。

#------------------------------------------------------------
if maskflag > 0:
if maskflag < 1000:
maskdir = r'd:\python\cmd\vsmask\vs' + str(maskflag)
else:
vslist = os.listdir(r'd:\python\cmd\vsmask')
vsn = random.randint(0,len(vslist))
maskdir = r'd:\python\cmd\vsmask\\' + vslist[vsn]
printf("Mask:%s\a"%maskdir)
if not os.path.isdir(maskdir):
printf("ERROR: No mask directory:%s"%maskdir)
img1 = cv2.imread(first_imagefile)
img2 = cv2.imread(second_imagefile)
imgheight, imgwidth, _ = shape(img1)
mskfile = os.listdir(maskdir)
outnumber = 0
n = 2
if maskspeedflag == 0: n = 1
percent_func1 = percent_func_gen(a=0, b=1, time=1.0, n=4, mode="faster")
percent_func2 = percent_func_gen(a=1, b=0, time=1.0, n=4, mode="slower")
masknumber = len(mskfile)//n
for m in mskfile[::n]:
mf = os.path.join(maskdir, m)
msk = cv2.imread(mf)
msk_r = invert(msk)
if maskinoutflag == 0:
imout1 = (img1*(msk/255)).clip(0,255).astype(uint8)
imout2 = (img2*(msk_r/255)).clip(0,255).astype(uint8)
else:
ratio = outnumber / (masknumber-1)
ratio1 = percent_func1(ratio)
ratio2 = percent_func2(ratio)
ratio1 = 1 - ratio1*0.5
ratio2 = 1 - ratio2*0.5
imw1 = int(imgwidth * ratio1)
imh1 = int(imgheight * ratio1)
iml1 = (imgwidth - imw1)//2
imt1 = (imgheight - imh1)//2
imw2 = int(imgwidth * ratio2)
imh2 = int(imgheight * ratio2)
iml2 = (imgwidth - imw2)//2
imt2 = (imgheight - imh2)//2
img11 = img1[imt1:imt1+imh1, iml1:iml1+imw1].copy()
img22 = img2[imt2:imt2+imh2, iml2:iml2+imw2].copy()
img11 = cv2.resize(img11, (imgwidth, imgheight), interpolation=cv2.INTER_LINEAR)
img22 = cv2.resize(img22, (imgwidth, imgheight), interpolation=cv2.INTER_LINEAR)
imout1 = (img11*(msk/255)).clip(0,255).astype(uint8)
imout2 = (img22*(msk_r/255)).clip(0,255).astype(uint8)
imout = imout1+imout2
fname = '%04d.BMP'%outnumber
outnumber += 1
outf = os.path.join(gifpath, fname)
cv2.imwrite(outf, imout)
if (outnumber%5) == 0:
tspshowinfor('%04d '%outnumber)
二、获取蒙版图片
为了获得剪影转场蒙版, 先准备两个黑白图片, 导入剪影进行编辑。 将白色图片放在前面, 黑色图片放在后面。 这就形成了两个镜头。 接下来, 你就不要客气了, 将喜欢的剪影转场特效施加在两个镜头中间进行转场。 将形成的视频导出。 就获得了转场视频。 下面,将这个视频转成图片序列, 便可以实现图片镜头转场了。



▲ 图1.2.1 一幅白色图片,一幅黑色图片
※ 总结 ※
本文介绍了如何使用 Python 实现剪影软件中的图片镜头转场的效果。 利用剪影生成转场蒙版图片序列。 依次将两个转场图片进行叠加。 中间在加上图片的缩放。 转场的动态效果更加鲜明。![]()

▲ 图2.1 转场效果

▲ 图2.2 转场效果

▲ 图2.3 转场效果

▲ 图2.4 转场效果
● 相关图表链接:
更多推荐


所有评论(0)