结论先放前面:在 ARM 服务器上批量转码是错的,不是因为 CPU 不够强,而是因为这件事根本不该发生在服务端。

实测数据

一段 120 秒、4K、60fps 的素材,在 4 OCPU 的 Ampere A1 上:

输出规格耗时实时倍数
1080p H.264 预设 medium418 秒0.29x
1080p H.264 预设 veryfast246 秒0.49x
720p H.264 预设 veryfast131 秒0.92x

也就是说,上传一个十分钟的视频,服务器要忙上一个小时。这期间它还要跑数据库、跑 SSR 渲染,CPU 抢成这样,页面响应会直接崩。

正确的做法

本地用 HandBrake 或 ffmpeg 转好再传。命令大概是:

ffmpeg -i input.mov \
  -c:v libx264 -preset slow -crf 21 \
  -profile:v high -level 4.0 -pix_fmt yuv420p \
  -c:a aac -b:a 128k \
  -movflags +faststart \
  output.mp4

-movflags +faststart 这一条不能省。它把 moov atom 挪到文件头部,浏览器才能一边下一边拖进度条;不加的话,用户得等整个文件下完才能跳转。