python视频处理库:moviepy

处理视频是一个常见的需求。那么在python中如何用代码处理视频呢?最近我无意间发现了一个很好用的python视频处理库moviepy,其使用起来简单易用,而且功能比较强大,这里记录一下分享给大家。

What is moviepy?

以下的介绍来自moviepy的官方文档。

moviepy是一个用于视频编辑的python模块,其可以用来对视频进行一些基础的操作(比如剪切,连接,插入标题等),视频创作(比如非线性编辑),视频处理以及给视频增加一些炫酷的特效等。它可以读写大多数常见的视频格式,包括GIF。

How to install moviepy?

moviepy的安装非常简单,直接使用命令pip install moviepy即可。当然你也可以选择从源码安装,下载源码包,解压缩,然后切换到含有setup.py的目录,执行 python setup.py install 即可。

moviepy的底层依赖于Numpy(用于高效数值处理),imageio(图像处理), Decorator,tqdm(用于显示进度条)。它在Windows/Mac/Unix环境下应该都是可以工作的,支持python2.7+以及python3。moviepy底层的视频读写依赖于ffmpeg,它会在你安装moviepy的时候自动下载,如果你已经安装了ffmpeg或者想使用特定版本的ffmpeg,你可以从moviepy/config_defaults.py中指定。

需要注意的是,还有一些可选模块可以安装,比如ImageMagic。这是一个开源的图像处理库,支持对超过200种格式的图像进行编辑处理,详细的用法可以自行参考官网文档。如果你希望向视频中添加文字,就必须安装这个库。它也可以作为生成GIF的后端,但不是必须的。如果你在Windows下安装这个库就比较简单,可以直接使用可执行文件安装;如果是Unix用户,可以选择源码编译安装,官网文档有详细的说明,不再赘述。

When to use moviepy?

如果你属于以下情况,可以考虑使用moviepy:

  1. 你有很多视频需要处理,或者你需要用很复杂的方式处理;
  2. 你希望在web服务器上自动生成videos或者GIF(Django,Flask等);
  3. 你希望能够自动化一些冗长乏味的工作,比如插入标题,图像场景分割,做一些视频结尾的特效,添加副标题等;
  4. 你希望可以使用code实现一些新奇的,其他视频编辑软件都无法做到的特效;
  5. 你希望可以从其他python库(比如matplotlib,mayavi,gizeh,scikit-images等)生成的图像中生成动画。

如果你是属于下面的这些情况,使用moviepy未必是最好的选择:

  1. 你仅仅需要做逐帧的视频分析(比如面部检测等),这种情况下你也是可以使用moviepy的,但是更建议使用imageio,opencv,simplecv等,因为这些库就是专门干这件事情的。
  2. 你仅仅想对视频进行转化,或者想把一系列的图片转化为视频,你最好直接使用ffmpeg(或者avconv,mencoder等),因为这些工具做这些转化会更快,而且更省内存。

moviepy的优点和缺点

  1. 优点:
    简单和直观。基础的操作一行代码就可以搞定,对于新手来说非常友好。
    灵活。你对于视频或者音频的每一帧都有着完全的控制权,创作你自己的特效非常容易。
    便携。代码主要依赖numpy和ffmpeg(这两者都是跨平台的),所以moviepy几乎可以在所有的平台以及几乎所有的python版本上运行。
  2. 局限性:
    无法处理视频流。比如无法实时处理来自摄像头的视频流等。当然,本来这就不是moviepy定位要解决的问题。
    *处理大量视频,音频可能会很吃力**。在同时处理大量(>100)的视频,音频,图片的时候可能会有内存问题,这个后面应该会修复。

Example Code Basic operations of moviepy

# Import everything needed to edit video clips
from moviepy.editor import *
# Load girl.mp4 and select the subclip 00:00:00 – 00:00:02
clip = VideoFileClip(“sources/girl.mp4”).subclip(0,2)
# Reduce the audio volume (volume x 0.8)
clip = clip.volumex(0.8)
# Generate a text clip. You can customize the font, color, etc.
txt_clip = TextClip(“beautiful girl”,fontsize=20,color=‘red’)
# Say that you want it to appear 1.5s at the center of the screen
txt_clip = txt_clip.set_pos(‘top’).set_duration(1.5)
# Overlay the text clip on the first video clip
video = CompositeVideoClip([clip, txt_clip])
# Write the result to a file (many options available !)
video.write_videofile(“sources/girl_edited.mp4”)

** 如果此篇文章有帮助到你,欢迎点击下方/页面上任意广告,支持我们,谢谢!

affiliate_link
Share this Post:
Digg Google Bookmarks reddit Mixx StumbleUpon Technorati Yahoo! Buzz DesignFloat Delicious BlinkList Furl

Comments are closed.