关于影像处理除了进行类似计算机视觉与数字图像处理的操作,我们还可以像一些非线性编辑软件一样对视频材料进行剪辑处理,以及添加专场、字幕等操作。通常此类操作都会使用到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/)学习。