最近一段时间我需要为自己的 LaunchBar 教程录制大量的讲解视频。之前采取的是全屏录制,基本要表现的内容都出现在屏幕中心。帮助我复审排版的责任编辑 @文刀 希望我能把这些视频截剪一下,把画面四周不重要的区域截掉,只保留中心区域,把操作表现得更大更清楚。 我使用了自制的 LaunchBar 动作,来调用 QuickTime Player 进行屏幕录制的:
QuickTime 这个原生的工具完全可以满足我的录屏需求,但它并不能对录好的视频进行画面裁剪。当文刀提出这个要求的时候,我感觉非常挠头,因为虽然 QuickTime Player 录屏之前可以通过鼠标拖动选择录制区域,但手动选择区域会导致每一次录制的大小、位置都不统一,得不到令人满意的结果。
于是我需要一个软件工具,输入裁剪参数就可以对输入的视频进行批量裁剪处理。四处寻访而不可得,正当因束手无策而郁郁时,发现了电脑上早已安装的 FFmpeg,完全可以帮我完成这个需求。
于是我用它制作了一个 LaunchBar 动作,用于对视频进行统一的批量裁剪。运行效果如下:
你可以点击 这里下载这个动作,在安装 FFmpeg 之后即可使用。要介绍这个动作的制作方法,要先从 FFmpeg 是什么谈起。 FFmpeg 是什么
FFmpeg 是一款功能强大的跨平台的自由软件,可以执行音频和视频多种格式的录制、转换、串流以及丰富的编辑功能等等。你可以在终端通过 Homebrew 直接免费安装它: brew install ffmpeg。 在安装好 FFmpeg 后,就可以直接使用上面提供的动作了。
举一个其 官网首页 的例子,想要把一个 mp4 视频转换成 avi 格式,只需要在终端输入下面一行短命令即可: ffmpeg -i input.mp4 output.avi
如果你想要自己动手试一试这条命令,只需把想要转换的文件直接拖到终端里替换掉 input.mp4。按下回车,命令的运行效果就是这样的:
文件转换就完成了。
正如 FFmpeg 所言:
视频/音频转换从未如此简单。
用 FFmpeg 裁剪视频
把上面的命令加上简单的裁剪参数,就可以完成我的需求:
ffmpeg -i input.mov -vf "crop=width:height:x:y,scale=new_width:-1" -y output.mp4
我们看到,其中增加了 -vf "crop=width:height:x:y,scale=new_width:-1" -y 这一部分。下面依次来解释它们:
-vf:要对视频加入其它转换参数;
crop=width:height:x:y":对视频进行裁剪,后面的四个参数分别为:
width:裁剪后的宽度,
height:裁剪后的高度,
x:裁剪起始点横坐标,
y:裁剪起始点纵坐标;
scale=new_width:-1:再对视频进行缩放,后面的两个参数分别为:
new_width:缩放后的宽度,
-1:高度与宽度保持原比例;
-y:强制输出,即如果已存在相同名称的文件,不发生询问,直接用新文件将其替换掉。
以我要裁剪的视频为例,全屏录制得到的视频尺寸为 2560x1600,我要对它进行裁剪的方式为,以点 (400, 150) 为左上点(起始点),裁剪出一个 1760x1100 的区域,再将其缩放至 720P 的尺寸(1280x800),则需要使用的命令为:
ffmpeg -i input.mov -vf "crop=1760:1100:400:150,scale=1280:-1" -y output.mp4
只需要打开终端在视频路径下输入上述指令,就可以直接把视频裁剪成想要的尺寸了。
制作 LaunchBar 动作
在制作这个 LaunchBar 动作时,我们选择 Python 作为脚本,在脚本中调用这条命令即可,脚本内容如下:
上图是偷师 @Minja 的彩色代码大法,以向没有编程经验的读者把整个流程介绍清楚,其中:
灰色部分是注释、导入的库以及对运行 FFmpeg 所需要的环境变量的定义;
橙色部分定义了裁剪尺寸,并把它们从数值变成相应的字符串,以待写入命令中,你可以根据自己的需求,修改它们的值;
粉色部分表示对输入的每一个视频文件分别进行操作;
紫色部分表示获取要处理的文件的文件名,并在其后面加上 _cropped 作为裁剪后的文件名称;
蓝色部分运行上述视频转换命令,先把命令中的每一个部分作为一个字符串,组合成一个列表,再运行它;
棕色部分表示在处理完一个文件之后弹出通知提醒,提醒内容为新生成的文件名,这里调用了一个 AppleScript,其内容比较简单直观,把「Video Cropped!」作为通知的标题,把新生成的视频名称作为通知的内容:
完成动作后,就可以像文章开头的视频所示,选中多个视频文件,对它们进行批量裁剪了。
将视频转换为 GIF 动图
少数派之前也分享过一些其它的 GIF 录制软件,如 @Minja 推荐的 Kap,@唐小筑 推荐的 Gifox,都可以直接进行屏幕录制并转换为 GIF 动图。如果是直接将现有的视频转换为 GIF,则需要其它一些工具,如 @JasonZone 曾介绍过他使用的是一个在线的 GIF 制作工具。再例如 GIF Brewery 3,可以在本地进行转换。在使用了一段 GIF Brewery 3 时间之后,我最后仍是选择卸载了它,因为其转换效果并不理想,转换过程漫长,会引起风扇飞转,而每一次转换所需要的繁琐操作也总是让人心生不快,用 @Minja 的话说:
GIF Brewery 3 的操作堪比飞机仪表盘了。
窃以为这样的设计很荒谬,因为在制作动图时,我们一般只是想让动图拥有和原视频相同的长度、相同的播放速度,当你为了完成这个简单的需求,打开这个工具,很容易对满屏不知所云的按钮和参数感到困惑。
另外一方面,以上谈到的工具,都无法实现批量转换视频,也是一大痛点。
在上面裁剪视频的例子中,我们可以看到,把 LaunchBar 和 FFmpeg 结合起来,就可以轻松对多个视频进行一键批量裁剪。如果转换 GIF 的过程也能像这样完成,那就是我所能想像出的制作动图最轻松最高效的方式了。而 FFmpeg 确实也提供了制作动图的功能,只需要简单的两行命令:
ffmpeg -i vid.mp4 -vf fps=10,scale=960:-1:flags=lanczos,palettegen -y palette.png
ffmpeg -i vid.mp4 -i palette.png -filter_complex "fps=10,scale=960:-1:flags=lanczos[x];[x][1:v]paletteuse" -y output.gif
其中 fps=10 表示每秒 10 帧,经尝试这也是一个比较合适的数值;与之前的命令参数相同,scale=960 :-1 仍表示进行宽度为 960 高度依照原比例的缩放。
再模仿上文所述的制作裁剪视频动作的方法,就可以轻松做出一个转换动图的 LaunchBar 动作。
在这个动作的脚本中我还在这两行命令之后添加了一行命令,用以借助 gifsicle 对生成的 GIF 文件进行可以接受范围内的进一步压缩:
gifsicle -i output.gif -O3 -o autput.gif
这个动作的运行效果如下:
你可以点击 这里下载这个动作。由于这个动作的脚本的写法与上一个动作的结构一致,故不另行在这里进一步解释,感兴趣的读者可以在这个动作中查看这个脚本。 最后
我通过这次寻找工具而得到的经验是,当我们遇到某种需求而找不到合适而有效的工具时,不妨把目光转向命令行软件,往往都会遇到意想不到的强大工具。而把这些工具与 LaunchBar 结合起来,则可以轻松的组合出一套适合自己的利器,轻松且高效地完成目标。
本文中谈到的 LaunchBar 与命令行工具的结合方法,基本可以适用于其它各种命令行工具。这样的使用方式既充分利用了命令行工具的简洁、高效,也结合了 LaunchBar 出色的启动器属性,免去了记忆和输入这些命令的过程,仍然可以随心所欲地调用它们。
希望本文所分享的经验,也可以对你有所启发。如果你日常也会使用到某些命令行工具,不妨尝试把它们做成 LaunchBar 的动作,以更方便快捷的调用它们。