剪映转场特效

 

01 影转场效果


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

GG00004969845_1920_1080.MP4|_-4

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

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

▲ 图1.2  剪影切换效果

▲ 图1.2 剪影切换效果

一、利用蒙版制作转场v

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

GG00003970292_1920_1080.MP4|_-3

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

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

▲ 图1.1.2  两幅静态图像转场所使用的蒙版

▲ 图1.1.2 两幅静态图像转场所使用的蒙版

  一个蒙版可以形成一副转场图片。   应用蒙版序列, 就可以形成转场视频序列图片了。
GG00002970733_1920_1080.MP4|_-2

▲ 图1.1.3 利用互补模板进行融合

▲ 图1.1.3 利用互补模板进行融合

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

GG00005970997_1920_1080.MP4|_-5

#------------------------------------------------------------
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)

二、获取蒙版图片

  为了获得剪影转场蒙版,  先准备两个黑白图片,  导入剪影进行编辑。 将白色图片放在前面, 黑色图片放在后面。 这就形成了两个镜头。  接下来, 你就不要客气了, 将喜欢的剪影转场特效施加在两个镜头中间进行转场。  将形成的视频导出。 就获得了转场视频。 下面,将这个视频转成图片序列, 便可以实现图片镜头转场了。

GG00007972340_1920_1080.MP4|_-7

▲ 图1.2.1 一幅白色图片,一幅黑色图片

▲ 图1.2.1 一幅白色图片,一幅黑色图片

 

结 ※


  文介绍了如何使用 Python 实现剪影软件中的图片镜头转场的效果。  利用剪影生成转场蒙版图片序列。  依次将两个转场图片进行叠加。  中间在加上图片的缩放。 转场的动态效果更加鲜明。
GG00005972865_1920_1080.MP4|_-5

▲ 图2.1  转场效果

▲ 图2.1 转场效果

▲ 图2.2  转场效果

▲ 图2.2 转场效果

▲ 图2.3  转场效果

▲ 图2.3 转场效果

▲ 图2.4  转场效果

▲ 图2.4 转场效果


● 相关图表链接:

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐