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