MoviePy - 中文文档2-快速上手-如何高效率使用MoviePy
如何高效率使用MoviePy
接下来,这一节将会介绍许多全世界MoviePy开发者总结的开发经验。
开始学习使用MoviePy最好的方式是使用IPython Notebook:它可以让预览clip变得简单,有自动补全的功能,而且可以显示函数库中不同方法的文档。
我们是不是应该使用moviepy.editor
?
这个文档中的大部分例子都会用到子模块moviepy.editor,但是这个子模块并不适用于所有需求。所以,我们应该使用他吗?
简短回答:如果我们是使用moviepy手动地编辑视频,那就使用他。但是,如果我们使用的是MoviePy内置的庞大的库、程序、或者网络服务,最好还是避免它,只需要加载我们需要的方法就够了。
moviepy.editor模块可以通过下列的3种导入方法的任意一中导入
from moviepy.editor import * #全部导入,快速,但是不干净
import moviepy.editor as mpy #干净,使用示例:mpy.VideoClip
from moviepy.editor import VideoFileClip #只导入需要的
无论使用上面哪一种导入方式,moviepy.editor模块事实上都会在幕后做大量的工作:加载很多moviepy常用的类、方法、还有子包、以及如果安装了PyGame的话还会加载PyGame session,这样,才可以预览vedio clips,实现很多简便的调用(比如:将一个clip用resize变化)。这样,我们可以使用clip.resize(width=240)而不是更长的写法clip.fx(resize, width=240)。简短说,moviepy.editor提供给我们在各处播放和编辑所需要的所有的东西,但是这也会消耗一部分时间用于加载(大于1秒钟)。所以,如果我们需要的仅仅是library中一两个特性的话,最好使用的导入方法是:只导入自己需要的,像下面这样
from moviepy.video.io.VedioFileClipe import VideoFileClip
from moviepy.video.fx.resize import resize
很多预览clip的方式
当我们使用MoviePy编辑视频或者实现一个效果的时候,我们会进行一些试验、和错误的过程。通常情况我没每一次的试验都会话费相对较长的时间,这一节,会告诉大家很多的小窍门,让这些尝试的过程变得快一点。
clip.save_frame
大多情况下,我们只需要得到一帧画面就可以知道程序有没有正确执行,这样,我们只需要保存一帧画面到一个文件,就可以去验证,像下面这样:
my_clip.save_frame("frame.jpeg") #保存第一帧
my_clip.save_frame("frame.png", t=2) #保存2s时刻的那一帧
clip.show and clip.preview
clip.show和clip.preview这两个方法可以在Pygame 的窗口中展示。这是最快的预览方式,clip的生成和显示几乎是同时发生的,而且对于获取一个像素点的颜色和坐标也有用。完成后按Esc键退出。
一个clip可以按照下面的方式来预览
my_clip.preview() # 默认fps=15 预览
my_clip.preview(fps=25)
my_clip.preview(fps=15, audio=False) # 不 生成/播放 音频
my_audio_clip.preview(fps=22000)
假如你在预览的画面中点击了某些地方,将会输出被点击像素的位置坐标和颜色。按Esc可以终端预览。
如果当clip十分复杂而且电脑配置很渣,运行很慢的时候,预览一般会出现比真实画面速度慢的情况,这个时候,我没可以尝试降低帧率,或者使用clip.resize减小clip的尺寸。
ipython_display
如果不使用clip.show()或者clip.preview(),使用IPython Notebook显示clip也是一个不错的选择.使用的画面一般是这样的。
通过ipython_display,我们可以将图片、视频、音频等嵌入,既可以来自于一个文件,也可以来自于一个clip
ipython_display(my_video_clip)
ipython_display(my_image_clip)
ipython_display(my_audio_clip)
ipython_display("my_picture.jpeg")
ipython_display("my_video.mp4")
ipython_display("my_sound.mp3")
只有当rendering在notebook的最后一行时才有效。我们也可以把ipython_display作为一个clip方法调用
my_video_clip.ipython_display()
如果我们的clip需要一个帧率,我们可以指定ipython_display的fps=25。
如果我们仅仅需要显示一下视频clip的快照,那么,我们直接指定time就行
my_video_clip.ipython_display(t=15) #将会显示15s处的快照
我们也可以提供任何的HTML5选项作为关键词参数,例如:当一个clip特别大的时候,我们一般会这么写
ipython_display(my_clip, width=400) # HTML5 将会把他的尺寸变成400像素
当我们编辑一个GIF格式的动画,并且确保他有完好的循环。我们可以让视频自动开始,并且循环播放。
ipython_display(my_clip, autoplay=1, loop=1)
注意:事实上,ipython_display是将clip完全地入我们的notebook。这样做的优点是无论我们移动nootbook还是放到线上,视频都会正常的播放。缺点在于,nootbook文件的大小将会变得很大。取决于你的浏览器,多次重新计算和显示视频不光是花费很多的时间,也会占用特别多的内存(RAM),重新启动浏览器会解决这个问题。