其实归结起来,就一句话:用好 ffmpeg 这个神器。
感觉如果硬盘好+CPU 核多活好的话,完全不用提前抽帧的(误)
先说为什么有这个事儿
我们做 Image 的时候,输入处理还算是比较简单的,读入一个图片,解码,Resize 一下,Padding 一下,完事儿。
但是 Video 不一样了:为了压缩,某些帧必须由其他帧得到(什么 A 帧、P 帧、E 帧的)。我们很难直接获取到视频中的某一帧。
所以,我们需要先将视频中的每一帧拿出来。
然后呢,这些帧实在太多了(最基本的,每秒 25 帧来说,一个 10 秒的视频就 250 帧)。为了减轻负担,只保留动作幅度比较大的部分,每秒 25 帧中我们可能只需要其中的 5 帧。
最后呢,上面的抽帧过程会产生大量的小文件——小文件简直是灾难啊。所以,我们希望尽量把小文件进行合并,形成 “假的” 视频。与真的视频不同,假视频里面的帧比较容易获取,而且只是原来视频帧的节选,体积会小一些。
然后再说说怎么干的这个事儿
一句话是,用好 ffmpeg 这个神器。
使用 ffmpeg,设置好各种参数,就能直接抽帧了。然后再用 Python 将这些帧进行合并一下,形成假视频文件就好了。
手动抽帧费时费力,所以我们希望能写个脚本,自动做这件事儿。
实验室同学写了一个脚本,我发现不太符合我的要求,于是就在其基础上魔改了一番,思路更加清晰,同时功能更加强大。然后 Release 了出来,需要的那去用就好。
所以代码呢
整个 Repo 在这里,小星星来者不拒。
当然,记得顺手给原始作者点个小星星啊~
Readme 什么的我慢慢写吧……
发表回复