published on in Python

影像处理・视频编辑

返回教程主页

上篇 影像处理・人脸识别

关于影像处理除了进行类似计算机视觉与数字图像处理的操作,我们还可以像一些非线性编辑软件一样对视频材料进行剪辑处理,以及添加专场、字幕等操作。通常此类操作都会使用到ffmpeg这款开源的数字媒体处理工具,而它有一个叫做moviepy的接口,可以让我们轻松上手。

安装moviepy

使用pip就能完成下载安装,命令如下:

pip install moviepy

如果安装过程出现问题可以去到项目网页(https://github.com/Zulko/moviepy)查看原因,或者搜索相关信息。

载入视频

首先我们可以载入一段视频,然后获取相关信息,如:帧率、时长、分辨率……:

import moviepy.editor as mpy

video = mpy.VideoFileClip('我的视频.mp4')
print(video.fps, video.duration, video.size)

运行后输出:

15.0 39.93 [1368, 768]

mpy.VideoFileClip接收一个字符串类型的视频地址用于载入该视频并实例化一个VideoClip对象。.fps为帧率;.duration为时长;.size为分辨率大小。

截取视频

使用.subclip方法可以截取视频:

sub1 = video.subclip(0, 5)
print(sub1.duration)
sub2 = video.subclip(-5)
print(sub2.duration)

.subclip用于截取视频并返回对应的VideoClip对象,通过.subclip的参数可以决定我们截取视频的位置。第一个参数表示开始时间;第二个参数表示终止时间,默认为原视频的终止时间。

导出视频

使用.write_videofile方法可以将视频对象导出成视频文件:

sub1.write_videofile('sub1.mp4')

.write_videofile就收一个字符串类型的参数用于指定视频保存的文件名。

添加淡入淡出

sub1_faded = sub1.fadein(0.5).fadeout(0.5)
sub1_faded.write_videofile('sub1_faded.mp4')

淡入为.fadein,会返回对应的VideoClip对象,可以传入一个浮点型参数用于设定时长;淡出为.fadeout,同样会返回对应的VideoClip对象,也可以传入浮点型参数设定时长。

拼接视频

final = mpy.concatenate([
    sub1.fadein(0.5).fadeout(0.5),
    sub2.fadein(0.5).fadeout(0.5),
])
final.write_videofile('final.mp4')

使用mpy.concatenate函数可以拼接视频并返回对应的VideoClip对象。它就收一个列表作为输入参数,该列表的每一项都是VideoClip对象。

继续学习

更多操作可以去到官方文档(https://zulko.github.io/moviepy/)学习。

下篇 数据分析・操作环境准备