简短的答案
- 抓住那一帧。打开视频抽帧,把视频拖进去,沿着文件自己的帧列表逐帧走到分毫不差的那个瞬间。存成 PNG:无损的副本,这样什么都还没被决定。
- 取好景。把 PNG 带到图片改尺寸:裁成平台的形状 — YouTube 是 16:9 — 定好长边;1280 像素才是 YouTube 真正要的数字。
- 压到上限。最后交给图片压缩,把平台的限制设成目标 — YouTube 封面图是 2 MB — JPEG 还是 WebP 让它自己挑。
这条链上没有任何一环上传任何东西——视频还没发布时这一点很要紧,而封面图之所以要做,恰恰是因为视频还没公开。
为什么逐帧胜过暂停
暂停播放器再截屏,输两回。暂停停在播放器停得下来的地方——最近的一处,而不是你想要的那一帧——而截屏是给播放器拍的照片:它的分辨率、它的界面、它的色彩处理,而不是文件本身的。
抽帧工具走的是文件自己的帧列表,双向都能一帧一帧走,交到你手上的是解码出的帧本身,视频的完整分辨率。在那个瞬间前后各找四分之一秒,通常就是封面图住的地方:两帧显眼画面之间的那一帧,动势读得出来,又没有一处糊掉。
就算最终封面图会是 JPEG 或 WebP,抓到的也先存 PNG。PNG 是那一帧的精确副本;这样一来,所有有损的决定只在最后、在字节预算之内发生一次,而不是发生两次、层层叠加。
平台的算术
先裁再压,理由和照片指南里的一样:像素就是预算。从 4K 帧里裁出 16:9、降到 1280×720,压缩器就能把那 2 MB 花在没人需要眯起眼睛才看得清的画质上。改尺寸工具的裁剪框能锁定 16:9,所以形状是一次拖拽而不是一道算术题;文字和人脸要留在中间三分之二,因为信息流会把四角削圆,还会把时长压在右下角。
找不到那个瞬间时,来一张联系表
如果正确的瞬间藏在十分钟素材里的某处,抽帧工具的另一个模式每隔 N 秒存一张静帧,整批打包成 ZIP。像翻联系表一样翻这些静帧,记下最接近的那张的时间,再从那里逐帧走。这比来回搓进度条快,而且还给你留下一个候选文件夹,等哪天平台要另一种形状时用得上。
如果你每周都做这件事
这几步分住在三个页面上是有意为之:每个页面只做一件事,每一个都能独自证明没有任何东西离开你的电脑。但每一步都是开源的:MIT 许可证,每个工具一个文件夹,零依赖的 ES 模块,README 讲清解码器、重采样和字节目标的搜索。
如果封面图是每周的交付物,就把代码代理指向代码仓库,让它做出单页版:逐帧走、按你的平台预设裁剪、压到它的上限,一颗按钮。这些模块就是写来被读的,把它们带走,正是许可证存在的意义。