1. 简介
由于恶心的工作和没有规划的部门安排,我被排到了算法部门,从事和算法没有半毛钱关系的业务上,也就是。。。搞视频。咋说呢?视频这东西我没有一点基础,还好有前人写好的代码,用的是moviepy和ffmpeg。那接下来就简单说说这两个吧。
1.1 moviepy是什么
moviepy是一个python库,用于音视频编辑。
官方API文档
别人翻译的一个中文文档
有一个别人翻译的中文文档
1.2 ffmpeg是什么
ffmpeg是一个强大的,难用的命令行工具,专门用于编辑处理各种音视频或图像。
1.3 gl-transitions是什么
有的时候,我们想要把视频转到另一个场景的画面,此时如何丝滑的转换到下一个场景呢?难不成像播放PPT那样,卡的一下到下一页?能不能像翻书那样,有个中间的过度阶段?
- 可以的。
这个过度的阶段,我们称之为“转场”.
那如何实现转场,目前来说我也不知道,总不能不来写吧,找了找,目前有个开源的项目gl-transitions,它实现了一些转场效果。
gl-transitions项目地址
它的使用应该有很多中,有一种是把代码编译到ffmpeg代码中去,也是我现在在使用的方式,其他的方式我也不懂。。。
gl-transitions 【68个转场效果图】
2 moviepy介绍
本文还是重点讲讲moviepy。关于文档啥的,我在1.1小节已经给出来了。如果你不懂,或者刚入门,那简单!!!看几个例子就好了。因为,环境搭建简单的很,docker啦。有别人已经搞好的镜像,拉下来就可以直接用了。
2.1 moviepy的核心概念
- 蒙板/Mask
如果同时播放两个视频,并且是叠加到一起,那这样的话,在上面的视频肯定会把下面的视频给挡住,结果就是只能看到在上面的视频。那要是可以把上面的视频变得透明一点,这样不就可以看到下面的视频了吗?蒙板,也就是Mask的作用。在moviepy中它是一个矩阵,矩阵中的值是一个0到1的浮点数。0是全透明,1是完全不透明。 - 切面/Clip
Clip是moviepy中最核心的一个概念,对音视频的操作都是对clip的操作。
图片来源 https://blog.csdn.net/as604049322/article/details/134938026
moviepy的依赖库
- The Python Imaging Library (PIL) or, better, its branch Pillow .
- Scipy (for tracking, segmenting, etc.), and can be used for resizing video clips if PIL and OpenCV aren’t installed on your computer.
- Scikit Image may be needed for some advanced image manipulation.
- OpenCV 2.4.6 or more recent (provides the package cv2) or more recent may be needed for some advanced image manipulation.
- ffmpeg
- ImageMagick. ImageMagick is
not strictly required, only if you want to write texts.
moviepy是如何工作的,
看原文 https://zulko.github.io/moviepy/getting_started/quick_presentation.html#how-moviepy-works
moviepy的坐标
和其他的坐标一样,左上是原点
Clip的两个重要方法:fl、fx傻傻分不清
-
fl:
def fl(self, fun, apply_to=None, keep_duration=True)
使用fun
方法修改当前的帧。
-
fx:
def fx(self, func, *args, **kwargs)
为了链式调用,clip.fx( volumex, 0.5).fx( resize, 0.3).fx( mirrorx )
set_start/set_end/set_duration
设置组合视频中Clip的播放开始时间/结束时间/播放时长
Clip的方法不是面向对象的,不会修改原本的clip,因此每次修改都要接受返回值。
newclip = clip.subclip(0,-2)