分布式视频转码系统

把一个经常堵死的转码队列,改造成可弹性伸缩、可断点续转、成本可控的分布式转码集群。

  • 6×任务吞吐提升
  • -58%单位转码成本
  • 99.95%任务成功率
  • < 8min1 小时视频平均处理时长

项目背景

客户是一家内容平台,每天有数万条用户上传的视频需要转码成多档清晰度并切片分发。原有方案是一台高配物理机上跑 FFmpeg 脚本 + 数据库轮询队列:高峰期任务积压到十几个小时,机器故障就意味着队列全部丢失,运营同事只能人工重跑。

核心难点

  1. 长任务不能重来:一条 2 小时的 4K 视频转码要几十分钟,中途失败若从头再来,成本和延迟都无法接受。
  2. 负载极不均匀:白天上传高峰与夜间空闲期相差十几倍,固定资源要么浪费要么不够。
  3. 成本敏感:转码是纯 CPU/GPU 密集型任务,成本几乎线性增长,必须从编码参数层面下手。
  4. 优先级混杂:付费客户的视频要插队,历史视频的批量重转不能影响新上传。

解决方案

任务分片与断点续转

把每个视频按 GOP 边界切成若干独立分片,分片级别调度、失败只重试单个分片,最后用 concat 无损合并。单任务失败成本从「整条重来」降到「一个分片重来」。

弹性调度集群

  • 调度器用 Go 实现,任务状态存 Redis,事件流走 Kafka
  • Worker 以 Kubernetes Job 形式运行,基于队列积压量做 HPA 自动扩缩容
  • 夜间自动缩容到最小副本,高峰期分钟级扩容到上百个 Worker
  • 混合使用竞价实例跑低优先级任务,被回收时分片自动重新入队

多级优先级队列

按 付费实时 > 普通上传 > 批量重转 三档拆分队列,配合抢占式调度:高优任务到达时可暂停低优任务的分片,保证 VIP 视频的处理时延。

编码参数调优

针对不同内容类型(讲课录屏、实拍视频、动画)分别调优 x264/x265 参数与滤镜链,并引入基于 VMAF 的画质评估做自动化对比。最终在主观画质不变的前提下平均码率下降 30%+,直接带来带宽与存储的双重节省。

输出与分发

统一输出 HLS 多码率(360p/720p/1080p/原画)+ 缩略图雪碧图 + 关键帧封面,写入对象存储并预热 CDN,播放端自适应切换。

成果

  • 任务吞吐从约 1,200 条/日提升到 7,500+ 条/日,高峰积压消失
  • 单位转码成本下降 58%(弹性伸缩 + 竞价实例 + 编码优化三者叠加)
  • 任务成功率从 96.2% 提升到 99.95%,人工介入基本归零
  • 完整的转码大盘:队列深度、Worker 利用率、失败原因分布、单任务成本

沉淀

这套调度框架已经抽象成内部组件,后续同类项目可以直接复用,交付周期缩短近一半。

这条转码链路后来还成了 AI 能力的载体:解码环节被复用,抽帧与音轨分离作为旁路挂在上面,叠加内容理解与审核之后单位处理成本只增加了 0.9%——详见 AI 视频内容理解与审核平台。

相关能力见软件开发与技术服务与运维。

想要同款系统?

架构方案可复用,我们按你的业务规模重新裁剪,避免过度设计。

免费咨询