如何使用带有moviepy的png中的蒙版?

时间:2016-03-08 00:53:29

标签: python video mask moviepy

我正在尝试使用带有moviepy的面具。

我想使用像这样的图像文件(http://imgur.com/1IGHflk)并将其作为遮罩叠加在视频顶部,这样只有图像的黑色部分在视频中是透明的。

当我使掩模图像的大小与视频完全相同时,我能够使其工作,但我无法弄清楚如何使掩模图像更小。我想拍摄给出的小掩模图像,并将其放置在视频上(进一步我实际上想要拍摄这个掩模图像并将其作为掩模放在几个不同位置的视频上)。

我已经在下面的代码中包含了我尝试执行此操作的代码以及我得到的错误。任何帮助(或只是一个简单的示例链接,显示如何使用moviepy蒙版)。谢谢!

from moviepy.editor import VideoFileClip, concatenate_videoclips, ImageClip, vfx, AudioFileClip, \
concatenate_audioclips, CompositeAudioClip, ColorClip, CompositeVideoClip, VideoClip

import random


if __name__ == '__main__':

    DEFAULT_CLIP_HEIGHT = 720
    DEFAULT_CLIP_WIDTH = 1280

    color_clip = ColorClip(size=(DEFAULT_CLIP_WIDTH, DEFAULT_CLIP_HEIGHT), col=((0, 0, 255)))
    color_clip = color_clip.set_duration(15)
    color_clip = color_clip.set_fps(DEFAULT_FPS)

    color_clip2 = ColorClip(size=(DEFAULT_CLIP_WIDTH, DEFAULT_CLIP_HEIGHT), col=((255, 0, 0)))
    color_clip2 = color_clip2.set_duration(15)
    color_clip2 = color_clip2.set_fps(DEFAULT_FPS)

    rounded_border_path = os.path.join(PROJECT_PATH, 'black_on_white_small.png')
    mask_clip = ImageClip(rounded_border_path)
    mask_clip = mask_clip.set_duration(10)
    mask_clip = mask_clip.set_fps(DEFAULT_FPS)
    mask_clip = mask_clip.set_position(('center', 'center'))

    comp_clip = CompositeVideoClip([mask_clip], bg_color=(255, 255, 255),
                               size=(DEFAULT_CLIP_WIDTH, DEFAULT_CLIP_HEIGHT), ismask=True)

     color_clip.mask = comp_clip

     comp_clip = CompositeVideoClip([color_clip2, color_clip], size=(DEFAULT_CLIP_WIDTH, DEFAULT_CLIP_HEIGHT))

     o_path = os.path.join(PROJECT_PATH, 'comp_color.mp4')
     comp_clip.write_videofile(o_path, fps=DEFAULT_FPS, codec='libx264')

产生错误: File "/Users/maxfowler/Dropbox/desktop/cs/upwork_montage/custom_moviepy/moviepy/video/compositing/CompositeVideoClip.py", line 110, in make_frame f = c.blit_on(f, t) File "/Users/maxfowler/Dropbox/desktop/cs/upwork_montage/custom_moviepy/moviepy/video/VideoClip.py", line 570, in blit_on return blit(img, picture, pos, mask=mask, ismask=self.ismask) File "/Users/maxfowler/Dropbox/desktop/cs/upwork_montage/custom_moviepy/moviepy/video/tools/drawing.py", line 43, in blit 1.0 * mask * blitted + (1.0 - mask) * blit_region) ValueError: operands could not be broadcast together with shapes (720,1280,9) (720,1280,3)

2 个答案:

答案 0 :(得分:1)

您似乎使用整个图像(高x宽x 3)作为遮罩。 MoviePy中的蒙版必须为(高x宽x 1),浮点值介于0(透明)和1(完全不透明)之间。

这有帮助吗?

答案 1 :(得分:0)

对于已经在一年后使用Google搜索的人来说,您的蒙版图像需要是灰度的,而不是全彩色的。

这包括插入背景色

bg_color=(255, 255, 255)

应该只有一个变量,而不是RGB的三个。例如:

bg_color=(255)