素材加工怎么做批量化?我清完 3.1 万张图和 417G 视频,说点跟教程不一样的

关键词:素材加工,批量处理,FFmpeg,ImageMagick,素材转码

摘要:一次真实的大规模素材加工复盘:图片用 ImageMagick 批处理踩了哪些坑,视频转代理为什么体积反而变大,以及我为什么反对把所有素材统一格式。

上个月我把手上四家餐饮客户的素材盘清了一遍,总共 3.1 万张图片、417G 视频,散在 6 块硬盘里。最老的素材是 2023 年 3 月的,最新的拍于上周二。清完之后我做了次复盘,发现真正耗时间的根本不是拍摄也不是剪辑,是素材加工这个中间环节。

图片

先说结论,我的做法跟大部分教程不一样:我不建议你「统一格式」,而是「最小必要转换」。源素材永远留一份原始副本,只有进时间线的那份才做加工。这个原则后面展开讲,先说我踩的坑。

一、图片加工:别再用 PS 动作了

我最早是用 Photoshop 的动作加批处理,200 张图跑了大概 7 分钟,看着还行。但到 3000 张以上的量级就废了:PS 会吃满内存,中途崩一次你得从头来。而且动作保存出来的 JPEG,默认质量是 8(满分 12),跟手动导出的观感对不上。

后来换 ImageMagick 的 mogrify,命令行长这样:

mogrify -path ./out -auto-orient -resize 2000x2000\> -quality 82 -strip -interlace Plane *.jpg

几个参数值得单独说:

图片

-auto-orient 必须放前面。我第一次跑的时候没加,结果 800 多张竖拍的手机照片全部躺平了——因为 -strip 会把 EXIF 里的 Orientation 标记一起删掉,看图软件就不知道该怎么转。这个坑我在论坛上至少看到十几个人问过。

-resize 2000x2000\> 里那个反斜杠加尖括号是「只缩小不放大」的意思。不加的话小于 2000px 的图会被拉大,糊一片。

-quality 82 对 JPEG 是量化质量。我在 4K 屏上对比过 82 和 95,肉眼几乎看不出差别,体积差了将近一倍。82 是个比较划算的位置。

-interlace Plane 是渐进式 JPEG,网页加载时先出模糊轮廓,体感上会觉得快一点。

单进程跑 3 万张 resize,在我的 M2 Pro Mac mini 上大约 55 分钟。用 GNU parallel 拆成 8 个进程(M2 Pro 是 10 核,留两个给系统),压到 12 分钟出头。这里有个细节:mogrify 是原地覆盖的工具,必须用 -path 指定输出目录才安全。我第一次忘了写 -path,直接把一批原片覆盖成了缩略图,还好当时有备份。

图片

格式这块,如果素材是给网页或者 App 用的,我现在的顺序是 JPEG/PNG 原图先过 cwebp(-q 78 -m 6)。Google 官方给的数据是 WebP 有损比同画质 JPEG 小 25% 到 34%,我这次实测 1.2 万张商品图,JPEG 总共 4.7G,转成 WebP 之后 3.1G,降幅 34%,跟官方数据基本吻合。AVIF 还能再小一截,但编码速度慢 5 到 8 倍,3 万张的量级跑不起。

EXIF 我是用 exiftool 批量灌的,给每个客户的素材打上客户名和拍摄日期关键词,方便以后按关键词搜。命令是 exiftool -r -overwrite_original -Keywords+=客户名 ./目录。注意 -Keywords+= 是追加,写成 = 会直接覆盖掉相机原来的关键词和版权信息,这个也是后来才发现的。

二、视频加工:CRF 别照抄

网上关于 FFmpeg 的文章,十个有九个让你用 -crf 23 -preset medium。这个组合不算错,但要看场景。

H.264 的 CRF 范围是 0 到 51,23 是 x264 的默认值。我自己的经验是:给客户看的预览版用 CRF 26 到 28,交付成片用 CRF 19 到 21,需要二次调色的中间文件不要用 CRF,直接上 ProRes 或者 DNxHR。

之前有个项目,为了省硬盘,我把所有 4K 素材按 CRF 23 转成 H.264 1080p 再剪。剪完导出成片交付,客户拿去投流,投手反馈说画面上有轻微的块状感。回头一查,是二次转码叠加的伪影——原片 H.265 转 H.264 丢了一次信息,剪辑导出又在残留伪影上压了一遍。从那以后我改了规矩,代理只用于剪辑预览,交付一律从原始素材重新链接导出。

图片

代理素材这块有个反常识的地方:转代理不是为了省空间,是为了让剪辑软件跑得动。

我这次 417G 的 4K HEVC 素材,转成 1080p 的 ProRes Proxy,最后占了 512G,比原来还大。原因是 ProRes 422 Proxy 在 1920x1080 29.97fps 下的目标码率大概是 45 Mbps,而且是帧内压缩,你原来的素材压得越狠,转完涨得越多。想让代理文件比原片小,得换 DNxHR LB,1080p 大概 36 Mbps;或者干脆用 H.264 的 all-intra 模式,体积能压到原片三分之一以下,但拖时间线的流畅度不如 ProRes。

我的选择是买硬盘。2T 的三星 T7 现在六百多块,比省下来的时间便宜多了。

三、音频和杂项

音频这块我只做两件事:统一采样率到 48kHz(视频工程的标准,44.1kHz 是 CD 时代留下的),以及批量做响度归一化。

图片

响度我用 FFmpeg 的 loudnorm 滤镜,目标 -14 LUFS,这是 YouTube 和 Spotify 的标准。抖音和 B 站大概在 -13 到 -11 之间浮动,具体看内容类型。

ffmpeg -i in.wav -af loudnorm=I=-14:TP=-1.5:LRA=11 -ar 48000 out.wav

TP 是 true peak,-1.5dB 是留的余量,防止转成有损格式之后再削波。

四、我现在的工作流

  1. 原始素材进盘,按「日期_客户_设备」建目录,不重命名原始文件名
  2. exiftool 批量灌元数据,加客户名和日期关键词
  3. 图片:mogrify 出 2000px 工作副本,原图不动
  4. 视频:4K HEVC 走 ProRes Proxy,1080p 走 H.264 all-intra
  5. 进剪辑软件干活,交付时切回原始素材重新链接

第 5 步是重点。达芬奇和 PR 都有「切换代理」的开关,很多人不知道,剪完之后直接导出代理版,画质白瞎了。

图片

五、最后说点不太讨喜的

我觉得大部分人根本不需要这么复杂的素材加工程序。如果你一个月就剪三五个视频,素材不到 200G,手动拖拽完全没问题,学 FFmpeg 的时间成本够你手动拖一年。

批量化加工真正划算的临界点,我的经验是在 5000 个文件或者 300G 素材左右。低于这个量,投入产出比是负的。

还有就是,脚本能帮你省时间,但替不了判断。哪个镜头留哪个镜头扔,哪张图调亮一点哪张压暗一点,这些事工具做不了。我见过有人把批量锐化、批量加对比度的脚本套到所有素材上,出来的东西千篇一律,客户一眼就能看出来。

批量化只解决重复的部分,剩下的还是得自己来。

标签: