ffmpeg中⽂开发⼿册_moviepy中⽂⽂档总结
moviepy-cn ⽂档viepy
MoviePy中⽂⼿册
MoviePy是⼀个⽤于视频编辑的Python模块,它可被⽤于⼀些基本操作(如剪切、拼接、插⼊标题)、视频合成(即⾮线性编辑)、视频处理和创建⾼级特效。它可对⼤多数常见视频格式进⾏读写,包括GIF。
⽰例如下(IPython Notebook环境)
⽤户⼿册
下载与安装
安装
pip安装⽅式:如果你安装了pip,只需要在终端输⼊如下命令(若没有安装ez_setup,则会⾃动安装)
(sudo) pip install moviepy
如果你既没有安装setuptools也没有安装ez_setup,那么上述命令就会运⾏失败。在这种情况下,你需要在安装前运⾏:
(sudo) pip install ez_setep
⼿动安装⽅式:从 PyPI 或者 Github (开发版本)上下载源码。将所有⽂件解压到同⼀⽂件夹,打开终端并输⼊
(sudo) python setup.py install
MoviePy依赖 Numpy 、 imageio 、 Decorator 和 tqdm ,他们将在安装MoviePy的同时⾃动安装。运⾏平台为
Windows/Mac/Linux,并使⽤Python2.7以上的版本和Python3。如果在安装MoviePy及其依赖包的过程中存在问题,请提供反馈。
MoviePy依赖FFMPEG软件对视频进⾏读写。不⽤对此担⼼,在你第⼀次使⽤MoviePy的时候,FFMPEG将会⾃动由ImageIO下载和安装(不过需要花⼀些时间)。如果你想使⽤FFMPEG的特定版本,你可以设置FFMPEG_BINARY环境变量。详见
moviepy/config_defaults.py。
可选但有⽤的依赖包
ImageMagick 只有在你想要添加⽂字时需要⽤到。它可作为⼀个后端⽤在GIF上,但如果不安装ImageMagick,你也可以⽤MoviePy处理GIF。
⼀旦你安装了ImageMagick,它会被MoviePy⾃动检测到,除了Windows环境! Windows⽤户在⼿动
安装MoviePy之前,应在moviepy/config_defaults.py⽂件中指定ImageMagick binary的路径,并叫做convert。看起来应该像是这样:
MoviePy中⽂⼿册
MoviePy是⼀个⽤于视频编辑的Python模块,它可被⽤于⼀些基本操作(如剪切、拼接、插⼊标题)、视频合成(即⾮线性编辑)、视频处理和创建⾼级特效。它可对⼤多数常见视频格式进⾏读写,包括GIF。
⽰例如下(IPython Notebook环境)
⽤户⼿册
下载与安装
安装
pip安装⽅式:如果你安装了pip,只需要在终端输⼊如下命令(若没有安装ez_setup,则会⾃动安装)
(sudo) pip install moviepy
如果你既没有安装setuptools也没有安装ez_setup,那么上述命令就会运⾏失败。在这种情况下,你需要在安装前运⾏:
(sudo) pip install ez_setep
⼿动安装⽅式:从 PyPI 或者 Github (开发版本)上下载源码。将所有⽂件解压到同⼀⽂件夹,打开终端并输⼊
(sudo) python setup.py install
MoviePy依赖 Numpy 、 imageio 、 Decorator 和 tqdm ,他们将在安装MoviePy的同时⾃动安装。运⾏平台为
Windows/Mac/Linux,并使⽤Python2.7以上的版本和Python3。如果在安装MoviePy及其依赖包的过程中存在问题,请提供反馈。
MoviePy依赖FFMPEG软件对视频进⾏读写。不⽤对此担⼼,在你第⼀次使⽤MoviePy的时候,FFMPEG将会⾃动由ImageIO下载和安装(不过需要花⼀些时间)。如果你想使⽤FFMPEG的特定版本,你可以设置FFMPEG_BINARY环境变量。详见
moviepy/config_defaults.py。
可选但有⽤的依赖包
ImageMagick 只有在你想要添加⽂字时需要⽤到。它可作为⼀个后端⽤在GIF上,但如果不安装ImageMagick,你也可以⽤MoviePy处理GIF。
⼀旦你安装了ImageMagick,它会被MoviePy⾃动检测到,除了Windows环境! Windows⽤户在⼿动安装MoviePy之前,应在moviepy/config_defaults.py⽂件中指定ImageMagick binary的路径,并叫做convert。看起来应该像是这样:
IMAGEMAGICK_BINARY = "C:Program "
你也可以设置IMAGEMAGICK_BINARY环境变量,详见moviepy/config_defaults.py。
PyGame 在视频和声⾳预览中会使⽤到。不过如果你想要在服务器上使⽤MoviePy,但的确需要⼿动进⾏⾼级的视频编辑,Pygame就没什么⽤处啦。
对于⾼级的图⽚处理,你⾄少需要⼀个以下所列的包。例如使⽤size⽅法,就⾄少需要安装Scipy、PIL、Pillow或OpenCV其中⼀个。
python官方文档中文版Python图⽚库(PIL)或它的分⽀ Pillow 更好。
Scipy (⽤于追踪、分割等)可在没有安装PIL和OpenCV的情况下⽤于调整视频剪辑的⼤⼩。
Scikit Image 可能被⽤于⾼级的图⽚处理。
OpenCV 2.4.6 或更⾼版本(在cv2包中提供)可能被⽤于⾼级的图⽚处理。
如果你使⽤linux,这些软件都⼀定在你的仓库中。
MoviePy⼊门
此页⾯为你讲解如何使⽤MoviePy进⾏编辑。想了解更多的话,详阅作品展⽰和脚本⽰例。
快速准备
这个章节说明了使⽤MoviePy的场合以及⼯作原理。
我需要MoviePy吗?
这些是你想⽤Python编辑视频的理由:
你需要⽤很复杂的⽅法来处理或组成⼤量的视频;
你想在web服务器(Django、Flask等)⾃动⽣成视频或GIF动图;
你想⾃动完成⽆聊的任务,如插⼊标题、追踪对象、剪切场景、制作结尾的演职⼈员表、字幕等等;
你想⽤代码实现视频编辑软件所不能达到的视频效果;
你想将从别的Python库⾥(如Matplotlib、Mayavi、Gizeh、scikit-images等)⽣成的图⽚制作成动画。
但在以下情况中,MoviePy并⾮最好的选择:
你只需要对视频进⾏逐帧分析(如⼈脸识别或其他有趣的东西),使⽤MoviePy和别的库可以联合完成。但是事实上,仅使⽤ imageio、OpenCV 或者SimpleCV这些专⽤库即可达到要求。
你只需要视频⽂件转换,或者将⼀系列图⽚⽂件转换成视频。在这种情况下,直接调⽤ffmpeg(或avconv、mencoder等)将⽐使⽤MoviePy更快速、更有效率地使⽤内存。
优势与局限性
MoviePy在以下⽅⾯表现出⾊:
易于上⼿:⼀⾏即可完成⼀项基本操作。对于新⼿来说,代码易学易懂。
灵活:视频和⾳频的每⼀帧都尽在掌握,创作属于⾃⼰的特效就像Python⼀样简单。
便携:代码使⽤⼗分常见的软件(Numpy和FFMPEG),⽽且可以在⼏乎所有版本的Python和⼏乎所有的机器上运⾏。
局限性:MoviePy⽬前还⽆法对流媒体进⾏处理(从摄像头或者远程设备获取视频),并且MoviePy并不是被设计成⽤来对电影的连续帧进⾏处理(例如视频去抖,你需要寻另外的软件)。如果你同时处理⼤量视频,⾳频以及图⽚序列(数量⼤于100)可能会出现内存问题,但是这个问题会在将来的版本当中进⾏修复。
代码⽰例
在典型的MoviePy脚本是这样的:加载视频或⾳频、修改、将他们连接在⼀起并最后⽣成⼀个新视频⽂件。作为⼀个⽰例,我们加载⼀个关于我上个假期的视频,降低⾳量,在前⼗秒添加标题在视频的中央,然后写⼊⼀个⽂件:
# Import everything needed to edit video clips
from moviepy.editor import *
# Load myHolidays.mp4 and select the subclip 00:00:50 - 00:00:60
clip = VideoFileClip("myHolidays.mp4").subclip(50,60)
# 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("My Holidays 2013",fontsize=70,color='white')
# Say that you want it to appear 10s at the center of the screen
txt_clip = txt_clip.set_pos('center').set_duration(10)
# 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("myHolidays_edited.webm")
MoviePy的⼯作原理
MoviePy使⽤ffmpeg软件来读取和导出视频和⾳频⽂件。也使⽤(可选)ImageMagick来⽣成⽂字和制作GIF⽂件。不同媒体的处理依靠Python的快速的数学库Numpy。⾼级效果和增强功能使⽤⼀些Python的图⽚处理库(PIL,Scikit-image,scipy等)。
基本概念
在MoviePy中,核⼼对象是剪辑,可以使⽤AudioClips或VideoClips来处理。剪辑可被修改(剪切、降低速度、变暗等)或与其他剪辑混合组成新剪辑。剪辑可被预览(使⽤PyGame或IPython Notebook),也可⽣成⽂件(如MP4⽂件、GIF⽂件、MP3⽂件等)。以VideoClips为例,它可以由⼀个视频⽂件、⼀张图⽚、⼀段⽂字或者⼀段卡通动画⽽来。它可以包含⾳频轨道(即AudioClip)和⼀个遮罩(⼀种特殊的VideoClip),⽤于表明当两个剪辑混合时,哪⼀部分的画⾯被隐藏)。详见⽣成与导出视频剪辑和混合剪辑。
你可使⽤MoviePy的很多效果对⼀个剪辑进⾏修改(如size(width="360")、clip.subclip(t1,t2)、clip.fx(vfx.black_white)或使⽤⽤户⾃⾏实现的效果。MoviePy提供许多函数(如clip.fl、clip.fx等),可以⽤简单的⼏⾏代码实现你⾃⼰的效果。详见视频转换与效果。
你还可以在ls到⼀些⾼级的效果来对视频中的对象进⾏追踪、画简单的形状和颜⾊渐变(对于遮罩来说很有⽤)、⽣成字幕和结束时的演职⼈员表等。参见⾼级⼯具中的详细描述。
最后,尽管MoviePy没有⽣动的⽤户界⾯,它也有许多⽅法来预览剪辑,使你能够调试脚本,从⽽确保你的视频在⾼质量的同时⼀切正常。详见如果更有效率地使⽤MoviePy。
混合剪辑
视频合成,也称为⾮线性编辑,事实上就是把许多视频剪辑放在⼀起,变成⼀个新剪辑。这个视频就是⼀个很好的例⼦,告诉你可以⽤MoviePy做些什么样的合成:
原视频链接已失效
在开始之前要注意,⼀般来说视频剪辑都会带有⾳轨和遮罩,他们也同样是剪辑。当你将这些剪辑组合在⼀起时,⾳轨和剪辑的遮罩将会⾃动⽣成⾳轨和最终剪辑的遮罩。所以在⼤多数情况下,你并不必为混合⾳频和遮罩担⼼。
堆叠和连接剪辑
有两种简单的⽅法能将剪辑放在⼀起:⼀是连接(使它们变成⼀个更长的剪辑,⼀个接⼀个播放),⼆是堆起来(使他们并排组成画⾯更⼤的剪辑)。
使⽤concatenate_videoclips函数进⾏连接操作。
from moviepy.editor import VideoFileClip, concatenate_videoclips
clip1 = VideoFileClip("myvideo.mp4")
clip2 = VideoFileClip("myvideo2.mp4").subclip(50,60)
clip3 = VideoFileClip("myvideo3.mp4")
final_clip = concatenate_videoclips([clip1,clip2,clip3])
final_clip.write_videofile("my_concatenation.mp4")
final_clip是⼀个剪辑,使clip 1、2和3⼀个接⼀个播放。注意,剪辑不⼀定必须要相同尺⼨。如果各剪辑尺⼨不同,那么它们将被居中播放,⽽画⾯⼤⼩⾜够包含最⼤的剪辑,⽽且你可以选择⼀种颜⾊来填充边界部分。你还有许多其它可选项(详见函数的⽂档),例如你可以通过transition=my_clip选项来在剪辑之间加⼀个过场。
使⽤clip_array函数对剪辑进⾏堆叠操作。
from moviepy.editor import VideoFileClip, clips_array, vfx
clip1 = VideoFileClip("myvideo.mp4").margin(10) # add 10px contour
clip2 = clip1.fx( vfx.mirror_x)
clip3 = clip1.fx( vfx.mirror_y)
clip4 = size(0.60) # downsize 60%
final_clip = clips_array([[clip1, clip2],
[clip3, clip4]])
size(width=480).write_videofile("my_stack.mp4")
从⽽你可以获得⼀个看起来是这样的剪辑:
合成视频剪辑
CompositeVideoClip类提供了⼀个⾮常灵活的⽅法来合成剪辑,但它⽐concatenate_videoclips和clips_array更复杂⼀些。
video = CompositeVideoClip([clip1,clip2,clip3])
当前video播放clip1,clip2在clip1的上层,⽽clip3在clip1和clip2的上层。举例来说,如果clip2与clip3和clip1有同样的尺⼨,那么只有在顶层的clip3能在视频中可见,除⾮clip3和clip2被遮罩隐藏了⼀部分。注意,在默认情况下,合成的视频和第⼀个剪辑的尺⼨相同(因为它通常是⼀个背景)。但是有时,你想让你的剪辑在更⼤的合成视频⾥浮动,所以你需要像这样特意修改最终合成视频的尺⼨:
video = CompositeVideoClip([clip1,clip2,clip3], size=(720,460))
起始和终⽌时间
在⼀个合成剪辑中,所有的剪辑开始的时间都被clip.start属性所指定。你可以像这样设定开始时间:
clip1 = clip1.set_start(5) # start after 5 seconds
例如你的剪辑看起来会是这样:
video = CompositeVideoClip([clip1, # starts at t=0
clip2.set_start(5), # start at t=5s
clip3.set_start(9)]) # start at t=9s
在上⾯的例⼦中,clip2可能先于clip1的结束时间开始。在这种情况下,你可以给clip2添加⼀个1秒钟的淡⼊效果:
video = CompositeVideoClip([clip1, # starts at t=0
clip2.set_start(5).crossfadein(1),
clip3.set_start(9).crossfadein(1.5)])
剪辑的定位
如果clip2和clip3都⽐clip1⼩,你可以决定他们出现在视频中的位置。在这⾥,我们指定了剪辑左上⾓像素的坐标:
video = CompositeVideoClip([clip1,
clip2.set_pos((45,150)),
clip3.set_pos((90,100))])
有很多⽅法可以指定位置:
clip2.set_pos((45,150)) # x=45, y=150 , in pixels
clip2.set_pos("center") # automatically centered
# clip2 is horizontally centered, and at the top of the picture
clip2.set_pos(("center","top"))
# clip2 is vertically centered, at the left of the picture
clip2.set_pos(("left","center"))
# clip2 is at 40% of the width, 70% of the height of the screen:
clip2.set_pos((0.4,0.7), relative=True)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。