1

我正在尝试将面具与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)

4

2 回答 2

1

对于任何在一年后搜索此内容的人来说,您的蒙版图像需要是灰度的,而不是全彩色的。

这包括插入背景颜色

bg_color=(255, 255, 255)

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

bg_color=(255)
于 2020-04-09T22:30:03.290 回答
1

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

这有帮助吗?

于 2016-03-08T08:25:55.730 回答