我正在尝试将遮罩与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)
最佳答案
看来您正在使用整个图像(高x宽x 3)作为蒙版。 MoviePy中的蒙版必须为(高度x宽度x 1),且浮点值介于0(透明)和1(完全不透明)之间。
有帮助吗?