2016-03-08 61 views
1

我正在嘗試在影片中使用蒙版。你如何使用影片中的PNG蒙版?

我想使用像這樣的圖像文件(http://imgur.com/1IGHflk)並將其作爲蒙版覆蓋在視頻的頂部,以便只有圖像的黑色部分在視頻中是透明的。

當我使蒙版圖像與視頻尺寸完全相同時,我能夠得到此工作,但我無法弄清楚如何使它與較小的蒙版圖像一起工作。我想要給出一個小的面具圖像,並將其定位到視頻上(更進一步,我實際上希望將這個蒙版圖像作爲一個面具在一些不同的位置放入視頻中)。

我已經包含下面的代碼,我試圖做到這一點以及我得到的錯誤。任何幫助表示讚賞(或只是一個簡單的例子顯示如何使用影片蒙版鏈接)。謝謝!

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)

回答

1

看來你正在使用整體圖像(高×寬×3)作爲掩模。在MoviePy中的掩碼必須是(height x width x 1),浮點值在0(透明)和1(完全不透明)之間。

這有幫助嗎?

+0

感謝您的快速響應! (高×寬×3)中的第三個值是多少?我該如何將「整個圖像」轉換爲面具需要的格式? – maxfowler

+0

aaa我猜測x3的手段和RGB三元組。所以我需要將它轉換爲0到1之間的浮點數......代碼示例仍然值得讚賞! – maxfowler