我试图在视频剪辑之间使用滑入和滑出过渡,但没有运气,我只能使用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/