没有封面的视频,好似剥掉封皮的书籍,抑或遗失了封套的CD,缺乏美感不说,仅凭系统或播放器随意选取的一帧作为缩略图,也不容易辨别彼此。或出于美学考虑,或仅仅想收藏包含封面的完整视频,或纯粹为了一览其主要主题和内容……为视频添加封面,总有各种理由。
本文介绍一套基于 FFmpeg 的自动化封面添加方案,可以自由选择所需的封面素材。目前提供 Shortcuts 版和 LaunchBar 版动作下载,代码为 Shell 脚本,可以移植到大多数自动化工具中。
几种方案的对比
视频封面这事儿,其实也有“看上去就行”和“真的有封面”两种路径,前者依托一些特殊的播放器或者视频管理工具,比如 Plex,可以从网上自动下载视频元数据——其中当然包括封面——并给视频贴上封面,用户所见就不是赤裸裸的某一帧。不过,抛开对特殊软件的依赖不谈,软件自动抓取的封面也严重依赖特定数据来源,不一定符合每个人的喜好,例如我喜好看老电影,最好其封面也是当年的海报,而一般的播放器,抓到的海报往往是后世制作的,往往和电影本身脱节;此外,也不见得所有视频都能匹配上封面,Plex抓到的数据往往限于电影,遇到MV(Music Video)就就只能耸耸肩,至于那些个人创作者制作的视频,就更没有保障。
“真的有封面”,则是把封面图片嵌入视频文件中,可以自由选择封面文件,且在主流播放器列表和文件浏览器中均可正常显示,比如 Finder 和 iOS Files 都能直接显示视频封面,非常醒目。1对比之下,左侧没有封面的视频观感就很差,而且有几个运气不好、踩中了全黑或全白的一帧,根本看不出是什么视频——恐怕还会引发某些不合时宜的联想。
天下没有免费的午餐,自制封面,难度当然比自动抓取要高。正常的做法,往往是求助于 iMovie 等剪辑工具,大动干戈,让人毫无兴致2;本文选择使用命令行工具,自制自动化工具解决问题,且配有现成的 Shortcuts 版与 LaunchBar 版动作下载。
万能工具 FFmpeg
可以添加封面的工具不少,我选用 FFmpeg,它没有图形界面,可以很方便地制成自动化动作。当然,当然,有一千个号称更简单的图形化工具,不过大概率都是抄 FFmpeg 的,我就懒得确认这些工具是否被钉在抄袭耻辱柱上了。
插入视频的原理是利用特殊帧位,其可供存放封面文件,与直接为视频文件设置缩略图不同,通过修改帧插入的封面非常清晰,而缩略图不能近观,否则就全是马赛克。惟需注意,使用的图片应当是其真实格式,而很多 macOS 用户误以为改个后缀名就算转换图片格式,结果就是报错——换言之,准备素材时,不要自作主张改图片后缀名。用 FFmpeg 为视频添加封面的命名如下,其中 INPUT.mp4
需更换为视频文件所在的路径,INPUT.jpg
则为封面的路径,不一定非得是 jpg,但据我测试,貌似 web 格式不行。OUTPUT.mp4
则为成品的位置。
ffmpeg -i "INPUT.mp4" -i "INPUT.jpg" -map 0 -map 1 -c copy -disposition:v:1 attached_pic "OUTPUT.mp4"
FFmpeg 强在快速,几个GB的视频,也只是两三秒3,并且没有导入导出环节,不会破坏视频画质——至少没有肉眼可见的损失。此前我还写过用 FFmpeg 快速转换视频格式的文章《音频视频格式批量转换终极工具:FFmpeg(附自动化)》,而包括本文在内,不过是 FFmpeg 的粗浅应用。
将 FFmpeg 命令打包成自动化动作
倘若每次都要手动填写各项参数,恐怕我也要放下面子,从 FFmpeg 的盗版耻辱墙上偷偷取下一个图形化工具了。好在命令行可塑性极好,不难打包成自动化动作,本节以 Shortcuts 为例。
这个 Shortcuts 的逻辑是:
- 选中需要处理的视频文件和封面图片,在右键上下文菜单中运行动作“video add Cover”;
- Shortcuts 根据文件拓展名,自动识别谁是视频、谁是图片;
- Shortcuts 将上一步的识别结果填入 FFmpeg 命令,并运行之,成功后会在当前文件夹中生成成品文件。
Shortcuts 可以直接调用第三方命令行工具,自然也包括 FFmpeg,通常您可以直接直接运行。而在其他自动化工具对应的动作中,则可能需要在脚本开头加一句 PATH=$PATH:/usr/local/bin/
。在自行移植脚本时,务必注意第三方命令行工具的兼容性。
小结
我在业余时间喜欢看老电影,其海报别有风味;也喜欢追一些小众歌手,他们常常上传一些MV,封面一般都很养眼。直接保存视频后,往往会丢失封面,只能面对着或是黑乎乎(运气算好的)、或是停留在诡异一帧(运气差的)视频文件,很煞风景。而电影海报或制作优秀的视频封面,本身就值得收藏,旋即想到,何不将两者结合?遂有本文。
至于如何获得封面素材,天哪,连下载视频这一难关都过了,就不要问这种问题了吧。