【MoviePy 中文文档】剪辑变换和效果
MoviePy 中有几类剪辑修改:
更改剪辑属性的常见方法有:
clip.set_duration
、clip.set_audio
、clip.set _mask
、clip.sett_start
等。已经实施的效果。像
clip.subclip(t1, t2)
(只保留 t1 和 t2 之间的切割)这样非常重要的核心效果被实现为类方法。更高级和不太常见的效果,如loop
(使剪辑在循环中播放)或time_mirror
(使剪辑向后播放)。被放置在moviepy.video.fx
和moviepy.audio.fx
的特殊模块中,并使用clip.fx
方法进行应用,例如clip-fx(time_mirror)
(使剪辑向后播放)、clip.fx(black_white)
(将剪辑变黑变白)等。你可以使用自己创造的效果。
所有这些效果的共同点是它们不在原地:它们不会修改原始剪辑,而是创建一个新剪辑,该剪辑是应用了更改的前一个剪辑的版本。例如:
my_clip = VideoFileClip('some_file.mp4') # 错误做法:什么都不做,更改丢失my_clip.set_start(t = 5) # 正确做法my_new_clip = my_clip.set_start(t = 5)
此外,当你编写 clip.resize(width = 640)
时,它不会立即将效果应用于剪辑的所有帧,而是仅应用于第一帧:只有在需要时(即,当你将整个剪辑写入预览文件时),才会调整所有其他帧的大小。换句话说,创建一个新剪辑既不需要时间,也不需要内存,所有的计算都发生在最终渲染期间。
MoviePy 中的时间表示
我们将看到的许多方法都接受时间作为自变量。例如 clip.subclip(t_start, t_end)
,它在两次之间剪切片段。对于这些方法,时间可以用秒表示( t_start = 230.54
),也可以用一对(分,秒)表示( t_start = (3, 50.54)
),用三元组表示(小时,分钟,秒)( t_start = (0, 3, 50.54)
)或用字符串表示( t_start = ('00:03:50.54')
)。
大多数情况下,当没有提供时间时,它们是猜测的,例如在 clip.subclip(t_start = 50)
中,暗示 t_end
对应于剪辑的结尾,在 clip.subclip(t_end = 20)
中表示 t_start = 0
。如果时间为负数,则视为剪辑结束前的时间:clip.subclip(-20, -10)
在剪辑结束前20秒和结束前10秒之间剪切剪辑。
更改片段属性的方法
clip.fx
假设你有一些函数在剪辑上实现效果,给定剪辑和一些参数的函数,返回一个新剪辑:
effect_1(clip, args1) -> new clipeffect_2(clip, args2) -> new clipeffect_3(clip, args3) -> new clip
其中 args
表示参数或关键字参数。要将这些函数按顺序应用于一个剪辑,您需要编写以下内容:
newclip = effect_3(effect_2(effect_1(clip, args3), args2), args1)