最近有一些视频需要剪辑,但本人比较懒,不想逐一手工处理。第一个想到的,就是万能的 Python。
果不其然 google 一搜,真的有现成的库 moviepy
。如官方文档所介绍的,moviepy是一个用于视频编辑 Python 库,可以切割、拼接、标题插入,视频合成(即非线性编辑),进行视频处理和自定义效果的设计。总的来说,可以很方便自由地处理视频、图片等文件。
英文版官方文档地址: https://zulko.github.io/moviepy/。中文版文档,本人近期本文打算做一些翻译,估计要两三个月时间,到时再把地址更新上来。
接下来,介绍一下 MoviePy 的安装及基本操作。
MoviePy 的安装
首先,安装moviepy基本包。与其他的库一样,直接采用 pip 的方式安装即可。
1 |
pip install moviepy |
第二步,安装依赖包 ImageMagic
ImageMagic 是用于在视频中填入文本信息的工具,我认为还是很有用处的,需要单独下载 exe 程序安装。
下载地址为:https://imagemagick.org/script/download.php,windows 系统页面拖到最下面可以找到。下载完毕后双击安装即可
第三步,设置 ImageMagic 路径
在上一步中安装了 ImageMagic,但此时仍无法使用,因为 Python 不知道 ImageMagic 安装在哪里,
需要在 Python 的库文件中找到moviepy/config_defaults.py
,并在最后一行加入IMAGEMAGICK_BINARY = "C:\\Program Files\\ImageMagick_VERSION\\convert.exe"
第四步,安装ffmpeg
(可忽略)
打开 Python Terminal,输入from moviepy.editor import *
即可自动安装此模块
至此,moviepy安装完毕!
视频文件的读取
剪辑处理视频,首先需要读取到视频文件,主要有VideoFileClip
、clips_array
、CompositeVideoClips
这三种方法
读取视频文件,合并,再导出文件
1 2 3 4 |
clip1 = VideoFileClip("1.flv").subclip(10,20) #读取视频,并截取10-20秒的内容 clip2 = VideoFileClip("2.webm").resize(0.60) # 将视频画面尺寸缩小到60% final_clip = concatenate_videoclips([clip1,clip2]) #视频合并 final_clip.write_videofile("hebing.mp4") |
将多段视频以列表展现的形式显示
1 |
final_clip = clips_array([[clip1, clip2],[clip3, clip4]]) |
CompositeVideoClips(视比 concatenate_videoclips、clips_array 好用,推荐使用此方法)
合并视频文件,可选择起止位置,也可设置渐进切换
1 2 3 4 5 6 |
video = CompositeVideoClip([clip1, # starts at t=0 clip2.set_start(5), # start at t=5s clip3.set_start(9)]) # start at t=9s,fade-in 的形式转换 video = CompositeVideoClip([clip1, clip2.set_pos((45,150)), clip3.set_pos((90,100))]) |
其他设置视频位置的函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
clip2.set_pos((45,150)) # x=45, y=150 , 设置视频展示的位置 clip2.set_pos("center") # 居中 # 顶部居中 clip2.set_pos(("center","top")) # 顶部靠左 clip2.set_pos(("left","center")) # 在屏幕的相对位置 clip2.set_pos((0.4,0.7), relative=True) # 在中心位置考下50的地方 clip2.set_pos(lambda t: ('center', 50+t) ) |