欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MoviePy - 中文文档2-快速上手-如何高效率使用MoviePy

程序员文章站 2022-07-14 18:46:07
...

如何高效率使用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.showclip.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也是一个不错的选择.使用的画面一般是这样的。

MoviePy - 中文文档2-快速上手-如何高效率使用MoviePy

通过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")

只有当renderingnotebook的最后一行时才有效。我们也可以把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),重新启动浏览器会解决这个问题。