前排提示:
本文需要你知道命令行工具[1]是什么。
上周我刷完了今夏非常火的仙侠剧《琉璃》,共 59 集,高燃高虐场景甚多。
于是一不小心又上头了,开始胡思乱想:将 59 集内容中所有的精华片段剪出来、拼一起,自己存着慢慢看,岂不美滋滋?
我大三时候在 B 站做 UP 主,最喜欢剪辑心水的电视电影桥段。那时我用格式工厂、Camtasia 软件做最简单的视频剪切和拼接,仍会觉得在下载/打开视频软件、剪辑的按键操作、视频的导入导出等方面,花费了很多时间。
后来我明白了,这其实是大部分 GUI(图形化用户界面)软件的弊端:不利于自动化批量操作、注重与用户交互导致操作延时等。
「打工人 Coco」的小科普:
GUI 强调通过图形化效果与人类直接交互,信息以多层次的方式呈现,视觉元素更丰富。这种信息呈现的复杂设计使得自动化变得非常困难。
另外,为交互而生的 GUI 响应不能太快,因为要留给用户反应时间。有时为了优化用户体验,甚至得故意给某些操作注入延迟。
与 GUI 相反,命令行界面 (CLI) 抛弃图形化展示,最大程度提供了自动化能力。因此,对于含有大量重复性操作的事情,如视频批量剪辑合并等,命令行工具 (CLI tool) 是非常适合的选择。
嗯,说服了自己造轮子,那就开搞吧。
基于 ffmpeg 开发的 covideo 命令行工具
ffmpeg[2] 是视频处理最常用的开源软件。它功能强大,用途广泛,大量用于视频网站和商业软件(比如 Youtube 和 iTunes),也是许多音频和视频格式的标准编码/解码实现。——来自阮一峰[3]
如其名,covideo 是一个视频处理相关的命令行工具。只需一行命令,便可批量处理视频。
covideo 的实现原理也很简单,就是用 Python 脚本调用 ffmpeg 强大的视频处理功能,并补足 ffmpeg 命令行本身不提供的批处理能力。
covideo 功能速览
目前,covideo 的功能还很初级:
目前支持的功能 | 待支持和优化的功能 |
剪切视频 | 合并视频、加字幕、加背景音乐或旁白,甚至转码视频、转化格式、连续截图等 |
剪切常见格式的视频文件,如 .mp4、.m4v、mov、.avi、.mpeg、.wmv、flv、f4v 等 | 剪切更多格式的音视频文件 |
支持剪切单个文件,也支持批量剪切给定目录下的所有文件 | 支持过滤掉某些文件等 |
用户必须给出剪切的起始时间点和结束时间点,来剪切该时间段的视频 | 支持起始时间点或者结束时间点为空 |
仅支持用户利用终端交互方式配置剪切时间点 | 支持在配置文件中定义各个文件的剪切时间点,适合大批量的视频文件处理 |
了解 covideo 能做什么后,就可以介绍如何下载和使用 covideo 了。
下载 covideo
准备工作:
•需要提前安装 ffmpeg 和 pip。安装 ffmpeg 的小白教程可以参考这篇文章。•注意记下 ffmpeg 可执行文件解压后所在的目录,后面会用到。
准备工作做好后,打开终端,执行如下命令,下载 covideo 命令行工具:
pip install covideo
预期输出如下,包含“Successfully installed covideo-xxx”关键词即下载成功:
Collecting covideo Downloading https://files.pythonhosted.org/packages/62/f2/61045e4654fd5b9ff6ba5cf499e08a78d5f1a509d89334be4dea41455fb3/covideo-0.0.3-py3-none-any.whlInstalling collected packages: covideoSuccessfully installed covideo-0.0.3
covideo 选项介绍
下载完成后,就可以使用 covideo 命令行啦!
先在终端执行 covideo -h
,看看 covideo 目前支持哪些选项 (Options):
yikekedembp:~ coco$ covideo -hUsage: covideo [options]Options: --version show program's version number and exit -h, --help show this help message and exit -c CLIP, --clip=CLIP Use this option to clip videos of many formats; receive one argument that can be a file path or a directory
选项说明:
•--version
和 -h
/--help
是默认选项,方便用户查看命令行工具的版本和帮助信息。•-c
/--clip
选项对应的就是剪切视频的功能(目前唯一的功能?)。用户需要在选项后提供单个视频或文件夹的地址,便可自动批量剪切给定地址下的视频。
使用 covideo -c
命令剪切视频
接下来看看使用 covideo -c
命令来剪切视频,有多么简单、丝滑(尖叫般的体验,为 ffmpeg 打 call!):
首先,进入前面提到的 ffmpeg 可执行文件解压后所在的目录,在终端执行如下命令:
cd
之后便可以愉快地调用 ffmpeg 的强大能力来处理视频了!
下面是一个简单的录屏:
该录屏中执行了一条 covideo -c "/xxx/test-videos"
命令,做的事情是:
•遍历 test-videos
目录下的所有视频•用户针对不同视频给出指令,确定剪切的起始时间和结束时间•目录下非支持格式的视频,会在最后报出来
大概 1~5 秒内,两个剪出的视频(基于选取的时间段命名)就出现在新生成的 clips
目录了:
401 MB 的 琉璃第二集.mp4
剪了 10 分钟出来,生成视频为 67.7 MB;130.6 MB 的数据库.mp4
剪了 111 秒出来,生成视频为 10.6 MB。可以看出,剪辑的速度和压缩率还是不错的。
covideo 的定位和价值
看到这里,也许你会问:这本质上不就是一条 bash 批处理命令嘛,为什么要大费周章包装成一个命令行工具?
我初步想了想,covideo 的定位应该是补足 ffmpeg 批量处理文件的能力。它本质上是一群批处理脚本的集合,每个脚本对应一个 ffmpeg 功能的批处理实现。
因此,它的价值可以有以下几点:
1.提高 availability 和 accessibility:每个人都在本地维护七八个批处理脚本,自然不如将这些脚本上传服务器,以命令行形式向未来更多的人提供服务。2.提高 usability:ffmpeg 命令行参数太多太复杂,我实在看得头疼,相信不少人有同感。为了我们这部分小白的使用,我利用 covideo 做了些更易用的交互逻辑。
以上都是我现编的 ;) 希望有说服到你。最重要的原因其实是:最近我在学习命令行工具,正好有适用场景撞上门来,当然得撸起袖子肝一肝。
结语
有了 covideo,以后我看片的最佳实践也许会变成:边看片,边在 covideo 的配置文件中记录高能片段的时间点。看完后,输入一条命令,即可将所有喜欢的片段立刻裁剪合并,生成一个高能大合辑。
联想到 B 站的很多影视区 UP 主,需要在自制解说视频里穿插大量原剧的剪辑片段,也许他们的场景里,covideo 也能派上用场呢。
References
[1]
命令行工具: https://baike.baidu.com/item/命令行界面[2]
ffmpeg: https://zh.wikipedia.org/wiki/FFmpeg[3]
阮一峰: https://www.ruanyifeng.com/blog/2020/01/ffmpeg.html