回到目录
下面的内容介绍以下MoviePy适用于何种场景以及MoviePy如何工作。
我需要使用MoviePy吗?
出于以下的情景或原因,我们可能会有使用Python做视频编辑的需求。
*我们有大量的视频需要处理,或者采用复杂的方式将他们拼接。
*我们需要在服务端自动地创建大量视频或者GIF图。
*我们需要在视频中创建视频编辑器中所没有的一些特殊的特效,我们只能敲代码来实现。
*为其他Python库(例如:Matplotlib, Mayavi, Gizeh, scikit-images)生产的图片创建动画效果。
当然,MoviePy并不是万能的,下面这样的需求,MoviePy也无能为力。
*当我们需要逐帧的做图像分析时(例如人脸检测),这真的不是MoviePy的强项,不如使用ImageIO,OpenCV,SimpleCV这样专业的库去处理
*我们仅仅是要将一段视频,或者一系列图片接进一个目标视频中时,我们使用ffmpeg就搞定了,也不用强行使用MoviePy
MoviePy的优点与局限
MoviePy在开发之初,就秉承着下面的理念
*简单直观,基本操作一般一行代码搞定。对于初学者,代码很容易理解和学习。
*灵活弹性,开发者拥有对视频或者音频中每一帧的全部控制权,这也使得我们在创建自定义效果时得心应手。
*跨平台,使用的ffmpeg各个平台都有,可以移植到不同的平台运行。
MoviePy的局限性如下:
*不支持流媒体,它也确实不是为了处理这样的视频而设计的。
*当同时使用太多(官网说>100认为提阿多)的视频,音频,或者图片的时候,我们有可能会遇到内存问题。内存问题亟待优化。
代码示例
在一个MoviePy脚本中,我们可以加载视频和音频,然后修改它们,将他们合并,然后把最终结果写入到一个新的文件中。下面的例子,加载视频,在视频中间添加一个标题显示10秒钟,然后把结果写入到一个新的文件内。
# 导入需要的库
from moviepy.editor import *
# 从本地载入视频myHolidays.mp4并截取00:00:50 - 00:00:60部分
clip = VideoFileClip("myHolidays.mp4").subclip(50,60)
# 调低音频音量 (volume x 0.8)
clip = clip.volumex(0.8)
# 做一个txt clip. 自定义样式,颜色.
txt_clip = TextClip("My Holidays 2013",fontsize=70,color='white')
# 文本clip在屏幕正中显示持续10秒
txt_clip = txt_clip.set_pos('center').set_duration(10)
# 把 text clip 的内容覆盖 video clip
video = CompositeVideoClip([clip, txt_clip])
# 把最后生成的视频导出到文件内
video.write_videofile("myHolidays_edited.webm")
MoviePy如何工作
MoviePy使用软件ffmpeg读取和导出视频和音频文件,使用ImageMagick生产文字和GIF图。这些处理过程都有赖于Python强大的数学处理库,高级特效和软件加强用到了许多的Python图像处理库。
基本概念
MoviePy中最核心的对象就是clips 。AudioClips后者VedioClips,开发者可以对clips进行修改(剪切,调速度,调亮度...)或者和其他clip混合拼接到一起。使用PyGame或者IPython NoteBook还可以预览。
VedioClips可以由视频文件,图像,文本或者动画来创建实例。vedio clip可以拥有一个音频轨道(audio clip) 和一个叠加层的vedio clip(这是一个特殊的VedioClip,这意味着,当一个视频和其他VedioClip混合的时候,这个叠加层clip是隐藏的)
一个clip可以被MoviePy中多多种效果作用,比如(clip.resize(width="360")
, clip.subclip(t1,t2)
, or clip.fx(vfx.black_white)
).
当然,也可以被用户自定义的效果作用。MoviePy实现了许多类似(clip.fl
, clip.fx
)这样的方法,可以简便地修改效果。
在moviepy.video.tools里面,还可以找到许多好东西,实现很多高级功能,比如跟踪视频中的一个对象,画一些简单的图形,斜线,或者颜色,制作副标题等等效果
最后,即使moviepy没有图形化的用户交互界面,但是在我们高质量地加工我们的视频的时候,我们仍然有很多可以允许很好地控制和调节脚本的预览方式。
QQ群:MoviePy中文 :819718037
回到目录