夕雾实验室
Noob Gopher 实现一个 ffmpeg 脚本

需求的产生

通常来讲, 老夕手里有数量非常庞大的类似森萝财团这种写真集, 苦于高档单反画质实在是高, 每张恨不得 40M 大, 千兆 NAS 加载一张图需要半天, 严重影响欣赏时的心情, 于是

通常, 我们用一个万金油命令

ffmpeg -i input.jpg output.webp

神奇的 ffmpeg 就会帮我们执行流程, 将图片按照原尺寸, 但是 75% 的质量转换为高压缩比的 WebP 有损图片

对于编码器参数, 性能质量比的测评可以等我把以前写在别处的重新投一遍, 目前最优解基本上就是 WebP, 或者为了更高的兼容性继续使用 JPEG

对于单一文件, 我们可以一行一行敲, 但作为懒狗, 这种时候最好还是用个脚本, 于是老夕用着自学的半吊子 Golang 技术来给大家献个丑

实现

鉴于这个东西已经基本成型了, 没法 Step By Step 讲, 我就倒叙, 大概需要这么几个东西:

  • 判断文件夹和文件, 是文件需要处理, 是文件夹需要建立 filepath.WalkDir()
  • 判断后缀, 到底哪些是需要转码的图片 map if else / switch case & goto
  • 多线程支持, ffmpeg 单核运行, 多开几个完全利用计算资源 goroutine chan
  • 错误处理, ffmpeg 炸了你得调查是什么问题导致的好修改参数 if err!=nil{}
    还有进阶配置:
  • cmd 传递目录参数 flag
  • 读配置文件指定更多的参数 BurnSushi/toml
  • 内嵌配置文件 embed

Go 可能是最为合适的语言, 相比 Shell Script 跨平台支持更好, 类原生编译(编译器生成 Plan9 汇编, Native 上运行 Plan9), 强类型, 这个示例基本上把 single package 开发给练习完了