# imagemagick、FFmpeg 和 ghostscript：材料原则视角下的命令行工具

> 本文开放前 70% 正文，剩余内容会员可见。

原文：https://utgd.net/article/20974

在中文互联网上，效率工具讨论者往往会落入业余烹饪爱好者的困境：不可避免地谈到种种顺手的工具，但只要是褒贬，甚至只是露出商标，乃至把商标用不透明胶布贴上，都会被人认定：你在测评，你在软广/硬广，你在恰饭，我要代表读者/观众/听众/月亮/正义/不在场的债权人锤死你。

我确实从一开始就感受到如上种种压力，而我所推荐的工具，几乎全是在国内不能直接购买的舶来品，或者干脆是免费的开源作品，得益于此，我长期以来只是一个边缘人，较少遭到前述种种攻讦。然而就后一类工具——开源工具——来说，事情并不那么简单，开源和免费只是我的政治幌子，实际上我更关注它们的另一共性：面向材料。

一方面，我讨厌像 Microsoft 办公套件或者 Evernote 这样的巨无霸，更推荐轻巧、专用的工具；但同时，我却积极拥抱 imagemagick、ghostscript 和 FFmpeg 这类瑞士军刀般多功能的开源工具，这似乎是某种人格分裂。其实不然，苟以功能主义视角视之，Evernote 和FFmpeg 确实貌似雄踞于各自领域的利维坦；倘从材料的视角察之，Evernote 无非提供了一系列傻瓜相机式功能，而 FFmpeg 为代表的一批命令行工具则直面材料，把各种时髦的功能和形容词还原为具体操作。

材料原则确有如此清澈的解释能力。与其说 imagemagick、ghostscript 和 FFmpeg 是瑞士军刀，它们其实更像是厨师的卷帘收纳袋，打开之后三德刀、水果刀、削皮刀、擦丝器和牛排夹一字排开。相比之下，Microsoft 套件和 Evernote 则类似有过度设计之嫌的厨房电动玩具（工具），在难谓优雅的本体之外还拖着一堆的维修工具。

## 图片：imagemagick

故事要从图片自动化处理工具 imagemagick 说起。大约在七年前，我制作过一批基于 imagemagick 的自动化小工具，简单的有横向或纵向拼接图片、压缩图片体积或各种套壳截图，复杂一点的有 App Store 风格截图生成器。

当时制作这一批小工具的起因，恰是多数图片处理工具都处在两个极端上，难以满足实际工作需求：要么像 Photoshop 那样包罗万象，理论上可以做任何事，但往往不一定刚好有你需要的功能，还得自己拼凑，尽管理论上也可以制作自动化流程，但是相对复杂，而且软件本身非常昂贵；在另一个极端则是傻瓜相机式的工具，典型如曾风靡一时的套壳截图工具，它们本质上就像蛋糕模具，你只是在套模板，往往没有太多调整空间。打个比方，后一类软件做出来的图片，就好波浪土豆或者狼牙土豆，第一次吃到时多少觉得新鲜，但当你发现全中国的小吃街都在贩卖这些网红食物时（而且用的还是同一款模具），这些奇形怪状的土豆片就可能引发部分读者的生理性厌恶了。

图片处理也是如此，如果网上的图片都用同一套模板，就好比所有的饭店都用同一套模具、同一款调料或同一个厂出来的预制菜，无聊透顶。

如果说 Photoshop 代表了设备齐全的现代化厨房，几乎可以做出任何菜肴，而那些傻瓜工具则像是功能单一的电动工具，而且几乎不太可能挪做它用，那么在这巨大的鸿沟之中，理应还有第三种可能。

我当时找到的答案就是 imagemagick。它非常违反（图形界面拥趸的）直觉，就算你愿意仔细阅读——说真的，谁会读？——手册，估计在第一时间你也找不到目标。想要套壳截图？想把截图变成柔和时髦的圆角卡片风格？抱歉，这些东西你肯定找不到。不过，你可以找到很多干巴巴的参数，从叠加图片、调整尺寸、裁剪边角到设置阴影，一应俱全。某种程度上，可以说 imagemagick 是命令行版本的 Photoshop，不过我更喜欢另一个比喻——imagemagick 是一家模具工厂，当你锻打这些参数时，你就化身为一个资深的车床设计师，在为自己打造合适的模具。

这个过程，更多的是工匠气息，而非工厂的机械风格，原因在于，你必须强迫自己了解最终要处理的原材料，而不是浮在表面的抽象功能。什么叫套壳截图？难道世界上有某种抽象的功能叫做套壳截图吗？非也，这个曾经时髦如今已经过期的功能，其实是一连串基本操作的组合，掰开了看，无非是把一张图片叠放在素材上面；换作如今的圆角弧形屏幕，可能还需要调整图片素材顺序，并多放几层；考虑到逻辑分辨率和物理分辨率并不同步，你还需要适当缩放图片素材……好在一旦学会分解，剩下的只是量的差距，鲜有复杂度上面的质的分野。

顺带一提，曾有读者用我的图片拼接工具做了一个照片墙，展示同学的照片，效果非常好。我的设计初衷只是并置竖屏截图以节省文章版面，并未想到还有此用，不过，其实一切都蕴含在材料原则的推论之中了：

> 易言之，面向功能的软件提供了一个常数，它或许非常大，但可能仍然不够大，或者很难一口气全部学会，又或者这个常数刚好不能覆盖你想要的东西。而面向材料的软件则提供几组元素，其连乘得到的笛卡尔积不仅在理论上可以很大，而且在现有材料足够丰富的情况下，引入一种新材料或一条新定律后，你得到的东西将会乘以现有元素的体积。面向材料的软件开辟了没有边界的可能性空间。

## 视频：FFmpeg

正所谓物种被增了，属也形成了。我撰写材料原则系列的文章，大概也是在频繁使用第二款命令行工具 ghostscript 之后。我非常落后于时代，基本只看文本和图片，很少处理视频，包括那些风靡全国的考研视频和资格考试教学视频，我甚至连一分钟都没看过——书都看不完了，谁有空看这些老师隔空咆哮或抖包袱呢？当然，我的专业（法学）也不那么需要看视频资料。

但在正式工作后，完全出于技术原因，我不得不处理体量巨大的视频：办理案件、尤其是刑事案件时，常常需要分析超长的录音和录像，几个小时甚至几天的监控录像司空见惯。在这种极端情况下，我不得不像当年处理图片一样，自己摸索可能的方案。

设想，我拿到了一段长达几天的监控录像，为了尽快缩小审查范围，我希望每隔半小时或者15分钟截一张图，以便略去那些明显没有捕捉到任何移动物体的时段。事后我才知道，这种功能叫雪碧图，相信大多数读者也是第一次听到这个词语 （或在我的其他文章中初见），不过大家估计都很熟悉视频网站上的缩略图矩阵。幸运的是，我也不知道关键词是什么，因而脑子里只有最基本的名词和动词：把一个视频等时长切片，然后将图片拼成一个矩阵。这两步分别可以用 FFmpeg 和 imagemagick 完成，不过我连后半段都省去，直接在 Finder 里切到图标视图，摆开的截图看上去就像一个缩略图矩阵。

毫无疑问，我不可能向你展示我在工作中实际看到的监控画面，下面是一段公开演讲的缩略图切片画面，也足够看出效果。

拓展阅读：低技术视频缩略图预览方案

早在十年前，我就零零星星用过 FFmpeg，但过去只是限于格式转换或从著作权可疑的视频中抽出 MP3 听，直到成功用它透视视频之后，我才意识到面向材料、回归基本操作的可塑空间何其广

---

[前往标准阅读页](https://utgd.net/article/20974?audience=web)
