python 速度 moviepy_06_如何使用MoviePy高效_中文文档

本节收集提示和技巧,以帮助您充分利用更广阔的MoviePy的体验。

从MoviePy开始的最佳方法是将其与IPython Notebook一起使用:它使预览剪辑(如本节所述)更加容易,具有自动补全功能并可以显示库的不同方法的文档。

我应该使用moviepy.editor吗?

本文档中的大多数示例都使用子模块moviepy.editor,但是此子模块不能满足所有需求,因此您应该使用它吗? 简短的答案:如果您使用MoviePy手动编辑视频,请使用它,但是如果您在较大的库,程序或Web服务器中使用MoviePy,则最好避免使用它,而只需加载所需的功能即可。

可以使用以下三种方法之一加载moviepy.editor模块:

from moviepy.editor import * # imports everything, quick and dirty

import moviepy.editor as mpy # Clean. Then use mpy.VideoClip, etc.

from moviepy.editor import VideoFileClip # just import what you need

无论采用哪种方式,moviepy.editor模块实际上都会在幕后做很多工作:它将获取MoviePy的所有最常见的类,函数和子包,初始化PyGame会话(如果已安装PyGame)以便 预览视频剪辑,并实现一些快捷方式,例如将调整大小的转换添加到剪辑中。 这样,您可以使用clip.resize(width = 240)而不是更长的clip.fx(resize,width = 240)。 简而言之,moviepy.editor提供了播放和编辑视频所需的全部功能,但是加载时间(大约一秒钟)。 因此,如果您需要的只是另一个库中的一个或两个功能,则最好直接导入所需的内容,如下所示:

from moviepy.video.io.VideoFileClip import VideoFileClip

from moviepy.video.fx.resize import resize

何时close()剪辑

创建某些类型的片段实例时-例如 VideoFileClip或AudioFileClip-MoviePy创建一个子进程并锁定文件。 为了在完成后释放这些资源,您应该调用close()方法。

这对于更复杂的应用程序尤为重要,在Windows上运行时尤为重要。 尽管Python的垃圾收集器最终应为您清除资源,但将其关闭可让它们更早地可用。

但是,如果过早关闭剪辑,则剪辑(及其衍生的所有剪辑)上的方法将变得不安全。

因此,经验法则是:

使用完所有剪辑后,也要使用派生自该剪辑的所有剪辑,请对其调用close()。

同时关闭通过AudioFileClip.coreader()创建的所有剪辑。

即使关闭CompositeVideoClip实例,您仍然需要关闭创建它的剪辑。

否则,如果您有一个从另一个剪辑派生而来的剪辑(例如,通过调用set_mask()),则通常不应该关闭它。 关闭原始剪辑也将关闭副本。

剪辑充当上下文管理器。 这意味着您可以将它们与with语句一起使用,并且即使有异常,它们也会在块的末尾自动关闭。

with AudioFileClip("song.wav") as clip:

raise NotImplementedError("I will work out how process this song later")

# clip.close() is implicitly called, so the lock on song.wav file is immediately released.

预览剪辑的多种方法

当您通过反复试验过程来编辑视频或尝试通过MoviePy实现效果时,每次尝试生成视频可能会很长。 本节介绍了一些使速度更快的技巧。

clip.save_frame

在大多数情况下,只有一帧视频可以告诉您是否做正确的事。 您可以仅将剪辑的一帧保存到文件中,如下所示:

my_clip.save_frame("frame.jpeg") # saves the first frame

my_clip.save_frame("frame.png", t=2) # saves the frame a t=2s

clip.show 和 clip.preview

使用clip.show和clip.preview方法可以在Pygame窗口中对剪辑进行可视化处理。 它们是预览的最快方法,因为剪辑是同时生成和显示的,它们对于获取像素的坐标或颜色很有用。 这些方法需要安装PyGame,并使用moviepy.editor模块。

使用clip.show方法可以预览剪辑的一帧而不必将其写入文件:以下几行在PyGame窗口中显示该帧。

my_clip.show() # shows the first frame of the clip

my_clip.show(10.5) # shows the frame of the clip at t=10.5s

my_clip.show(10.5, interactive = True)

最后一行(带有interactive = True)以交互方式显示框架:如果单击框架中的某处,它将打印像素的位置和颜色。 完成后,按Escape退出。

剪辑可以如下预览

my_clip.preview() # preview with default fps=15

my_clip.preview(fps=25)

my_clip.preview(fps=15, audio=False) # don't generate/play the audio.

my_audio_clip.preview(fps=22000)

如果您在预览的视频剪辑的帧中单击某处,它将打印单击的像素的位置和颜色。 按Escape退出预览。

请注意,如果剪辑很复杂并且您的计算机不够快,则与剪辑的实际速度相比,预览的速度会变慢。 在这种情况下,您可以尝试使用clip.resize降低帧频(例如降低至10)或减小剪辑的大小,这很有帮助。

ipython_display

在IPython Notebook中显示剪辑非常实用,特别是如果不想使用clip.show()和clip.preview()。 这是它的样子:

image.png

使用ipython_display,您可以从文件或直接从剪辑嵌入视频,图像和声音:

ipython_display(my_video_clip) # embeds a video

ipython_display(my_imageclip) # embeds an image

ipython_display(my_audio_clip) # embeds a sound

ipython_display("my_picture.jpeg") # embeds an image

ipython_display("my_video.mp4") # embeds a video

ipython_display("my_sound.mp3") # embeds a sound

仅当ipython_display在单元格的最后一行时才有效。 您还可以将ipython_display用作clip方法:

my_video_clip.ipython_display()

如果剪辑的渲染需要提供帧速率,则可以在ipython_display中指定fps = 25。

如果您只需要在某个时间显示视频剪辑的快照,则可以编写

my_video_clip.ipython_display(t=15) # will display a snapshot at t=15s

您还可以提供任何有效的HTML5选项作为关键字参数。 例如,如果剪辑太大,您将编写

ipython_display(my_clip, width=400) # HTML5 will resize to 400 pixels

例如,当您编辑动画GIF并要检查其能否正常循环播放时,您可以要求视频自动开始播放并循环播放(即无限期播放):

ipython_display(my_clip, autoplay=1, loop=1)

重要的是,ipython_display实际上将剪辑实际嵌入到Notebook中。 好处是您可以移动笔记本电脑或将其放在网上,并且视频可以正常工作。 缺点是Notebook的文件大小会变得很大。 根据您的浏览器,多次重新计算和在视频上显示可能会在缓存和RAM中占据一些位置(这仅是频繁使用的问题)。 重启浏览器即可解决问题。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值