我试图在视频剪辑之间使用滑入和滑出过渡,但没有运气,我只能使用crossfadein使其工作,如下所示:

 from moviepy.editor import VideoFileClip, concatenate_videoclips, vfx, afx, transfx, concatenate,
 CompositeVideoClip

 delay = 1
 output = "out.mp4"
 clip1 = VideoFileClip("174_3.mp4")
 clip2 = VideoFileClip("174_4.mp4")
 clip3 = VideoFileClip("174_5.mp4")
 clip4 = VideoFileClip("174_6.mp4")


final = concatenate([clip1,
                 clip2.crossfadein(delay),
                 clip3.crossfadein(delay),
                 clip4.crossfadein(delay)],
         padding=-delay, method="compose")
final.write_videofile(output)


但是当我在https://github.com/Zulko/moviepy/blob/3d86a2c4cba6769528112765d964eaec273d7636/moviepy/video/compositing/transitions.py上使用示例时

 from moviepy.editor import VideoFileClip, concatenate_videoclips, vfx, afx, transfx, concatenate,
 CompositeVideoClip

 output = "out.mp4"
 clip1 = VideoFileClip("174_3.mp4")
 clip2 = VideoFileClip("174_4.mp4")
 clip3 = VideoFileClip("174_5.mp4")
 clip4 = VideoFileClip("174_6.mp4")

 clips = [clip1, clip2, clip3, clip4];
 CompositeVideoClip(clips)

 slided_clips = [clip.fx( transfx.slide_out, 1, 'bottom') for clip in clips]
 final_clip = concatenate( slided_clips, padding=-1)
 final_clip.write_videofile(output)


结果是视频已连接,但根本没有过渡,请让我知道我做错了

最佳答案

请记住,moviepy中的大多数函数不会修改对象,而是返回对象的修改后的浅表副本-因此行CompositeVideoclip(clips)不会执行任何操作。

相反,您想这样做:

slided_clips = [CompositeVideoClip([clip.fx( transfx.slide_out, 1, 'bottom')]) for clip in clips]

slide_out之所以必须位于CompositeVideoClip中,是因为它更改了剪辑的位置,因此它必须位于“框架”中才能将屏幕的一部分留空。与set_position仅与CompositeVideoClip一起使用的原因相同。

关于python - Moviepy Slidein和Slideout过渡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46517510/

10-12 15:55