FFHub vs Transloadit — 开发者视角对比
从 API 设计、计费方式、FFmpeg 支持、学习成本和适用场景几个维度,把 FFHub 和 Transloadit 放在一起看。

Transloadit 和 FFHub 都在云端处理媒体,但思路差得不能再差。Transloadit 是个全功能文件处理平台,自家有 Assembly 语言和 Robot 系统。FFHub 是个聚焦的云端 FFmpeg API,发命令、拿结果。这篇文章把核心差异拆开讲,方便你判断。
各是什么
Transloadit 是围绕 Assembly(工作流)和 Robot(机器人)建起来的媒体处理平台。你用 JSON 形式的 DSL 描述处理管线,每一步交给一个专门的 Robot——视频编码一个、图片缩放一个、文件导入一个等等。
FFHub 是云端 FFmpeg API。通过 REST API 发标准 FFmpeg 命令,FFHub 跑完返回结果。一个概念,一个端点。
对比一览
| 维度 | FFHub | Transloadit |
|---|---|---|
| API 模型 | REST API + FFmpeg 命令 | Assembly DSL + Robot |
| 处理范围 | 视频/音频(FFmpeg) | 视频、音频、图片、文档 |
| FFmpeg 兼容性 | 100% | 部分——只暴露在 Robot 参数里 |
| 学习成本 | 会 FFmpeg 就够 | 学 Assembly 语法 + Robot 目录 |
| 计费方式 | 按处理秒数 | 按输出 GB + 月度套餐 |
| 文件上传组件 | 无 | 有——Uppy(开源) |
| 输入源 | URL、本地文件上传 | URL、S3、GCS、Azure、直传 |
| 图片处理 | 走 FFmpeg(有限) | 完整(基于 ImageMagick) |
| 文档处理 | 不支持 | 支持(PDF、Office) |
| 管线编排 | FFmpeg 命令顺序执行 | Assembly 步骤 + 依赖关系 |
| Webhook | 支持 | 支持(notify Robot) |
| 客户端库 | Node.js、Python、CLI | Node.js、Ruby、Python、PHP、Java、Go |
| 供应商锁定 | 无——标准 FFmpeg | 高——专有 Assembly DSL |
API 设计:FFmpeg 命令 vs Assembly DSL
最根本的差别就在这。
FFHub:一条命令
curl -X POST https://api.ffhub.io/v1/tasks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"command": "ffmpeg -i https://example.com/input.mp4 -c:v libx264 -crf 23 -vf scale=1280:720 -c:a aac -b:a 128k output.mp4"
}'
用过 FFmpeg 的话,一眼就能看懂。命令跟你本地终端写的一模一样。
Transloadit:Assembly + Robot
{
"steps": {
"imported": {
":robot": "/http/import",
"url": "https://example.com/input.mp4"
},
"encoded": {
":robot": "/video/encode",
"use": "imported",
"preset": "iphone-high",
"width": 1280,
"height": 720,
"ffmpeg_stack": "v6.0.0",
"ffmpeg": {
"crf": 23,
"b:a": "128k"
}
},
"exported": {
":robot": "/s3/store",
"use": "encoded",
"bucket": "my-bucket",
"key": "output/${file.id}.mp4",
"credentials": "my_aws_creds"
}
}
}
Assembly 写法更啰嗦,但有结构。每个 step 调一个 Robot,Robot 之间通过 use 串起来。
学习成本
FFHub 这边,会 FFmpeg 学习成本基本为零。命令跟本地一样。
Transloadit 这边,要学的东西不少:
- Assembly 的 JSON 结构
- Robot 目录(50+ 个)
- 怎么用
use把 Robot 接起来 - 每个 Robot 的参数体系(跟 FFmpeg 参数不一样)
- 模板(Template)语法
文档很全,但这是一套全新的心智模型。
FFmpeg 灵活性
FFHub:不受限
FFHub 是原样跑你的 FFmpeg 命令,FFmpeg 的所有功能都能用:
# 多输入复杂滤镜图
ffmpeg -i video.mp4 -i overlay.png -i audio.mp3 \
-filter_complex \
"[0:v][1:v]overlay=10:10[bg]; \
[bg]drawtext=text='%{pts\:hms}':fontsize=20:fontcolor=white:x=10:y=H-th-10[v]" \
-map "[v]" -map 2:a \
-c:v libx264 -crf 22 -c:a aac output.mp4
# 二次编码精确控码率
ffmpeg -i input.mp4 -c:v libx264 -b:v 4M -pass 1 -f null /dev/null
ffmpeg -i input.mp4 -c:v libx264 -b:v 4M -pass 2 output.mp4
# 带调色板优化的 GIF
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
# 提音频、做响度归一化、转 Opus
ffmpeg -i input.mp4 -vn -af "loudnorm=I=-16:TP=-1.5:LRA=11" -c:a libopus -b:a 128k output.opus
Transloadit:Robot 参数
Transloadit 把部分 FFmpeg 选项暴露在 Robot 参数里,但不是全部:
{
"steps": {
"encoded": {
":robot": "/video/encode",
"use": "imported",
"preset": "empty",
"ffmpeg_stack": "v6.0.0",
"width": 1280,
"height": 720,
"ffmpeg": {
"crf": 23,
"b:a": "128k",
"vf": "drawtext=text='Hello':fontsize=24:fontcolor=white:x=10:y=10"
}
}
}
}
Robot step 里的 ffmpeg 字段可以塞一些 FFmpeg 参数,但复杂滤镜图、多输入操作和不少高级特性都不直接支持。能做什么,看 Robot 暴露了什么。
在 Transloadit 里不容易做的事:
- 多输入滤镜图(合多个视频源)
- 二次编码
- 任意流映射
- 一些小众编解码器和输出格式
- 带复杂条件的自定义抽帧
价格对比
FFHub
简单透明:
- 按真实处理秒数
- $0.005/秒(标准档)
- 24 小时免费临时存储
- 数据传输包含
Transloadit
按月度套餐 + 输出量:
| 套餐 | 月费 | 包含 GB | 超出每 GB |
|---|---|---|---|
| Startup | $49/月 | 10 GB | $4.00/GB |
| Growth | $149/月 | 50 GB | $3.00/GB |
| Business | $449/月 | 200 GB | $2.25/GB |
| Enterprise | 定制 | 定制 | 定制 |
Transloadit 是按输出文件大小(GB) 收,不是按处理时间。这意味着:
- 1GB 的输出文件,跑 10 秒还是 10 分钟,价格一样
- 一个输入生成多个输出,费用乘 N
- 纯音频输出(文件小)很便宜
- 高分辨率/高码率(文件大)就贵
真实场景算笔账
场景 1:1,000 个视频,每个 5 分钟,H.264 720p(约 150MB/个)
| FFHub | Transloadit | |
|---|---|---|
| 计算 | 30 秒/视频 × 1,000 × $0.005 | 150GB × $3.00/GB(Growth) |
| 处理费 | $150 | $450 |
| 月度套餐 | $0 | $149 |
| 合计 | $150 | $599 |
场景 2:200 个视频,每个 2 分钟,多码率(1080p + 720p + 480p,合计约 300MB/个)
| FFHub | Transloadit | |
|---|---|---|
| 计算 | 60 秒/视频 × 200 × $0.005 | 60GB × $4.00/GB(Startup) |
| 处理费 | $60 | $240 |
| 月度套餐 | $0 | $49 |
| 合计 | $60 | $289 |
场景 3:10,000 次音频抽取,每个输出约 5MB
| FFHub | Transloadit | |
|---|---|---|
| 计算 | 3 秒/次 × 10,000 × $0.005 | 50GB × $3.00/GB(Growth) |
| 处理费 | $150 | $150 |
| 月度套餐 | $0 | $149 |
| 合计 | $150 | $299 |
FFHub 的按秒模型更可预测,输出文件越大优势越明显。Transloadit 的按 GB 模型在「处理时间长但输出小」的任务上有可能更划算。类似的价格分析也可以看 FFHub vs AWS MediaConvert。
文件上传:Uppy vs 直接 API
Transloadit:Uppy 上传组件
Transloadit 一个真正有意思的东西是 Uppy,他们的开源前端上传组件:
<script>
import Uppy from '@uppy/core'
import Transloadit from '@uppy/transloadit'
const uppy = new Uppy()
.use(Transloadit, {
assemblyOptions: {
params: {
auth: { key: 'YOUR_TRANSLOADIT_KEY' },
steps: {
encoded: {
robot: '/video/encode',
preset: 'iphone-high'
}
}
}
}
})
</script>
Uppy 开箱给你拖放、进度条、断点续传、摄像头采集。要做面向用户的上传体验,这东西真的很值。
FFHub:API 和 CLI
FFHub 上传走 API 或 CLI:
# CLI 上传
ffhub upload video.mp4 --command "ffmpeg -i video.mp4 -c:v libx264 output.mp4"
# API 上传
curl -X POST https://api.ffhub.io/v1/tasks \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "[email protected]" \
-F 'command=ffmpeg -i video.mp4 -c:v libx264 -crf 23 output.mp4'
FFHub 没有前端上传组件。要做面向用户的上传,自己写或者用第三方方案。
视频之外:Transloadit 的处理范围
Transloadit 不止处理视频,Robot 目录里还有:
- 图片处理:缩放、裁剪、水印、人脸检测、智能裁剪
- 文档处理:PDF 生成、Office 文档转换
- 音频处理:波形生成、语音转文字
- 文件管理:S3、GCS、Azure、FTP、SFTP 的导入导出
如果你的应用要让一个服务处理所有类型的文件(不只是视频),Transloadit 的覆盖面是显著加分项。
FFHub 只盯 FFmpeg。视频/音频处理很到位,但图片(FFmpeg 能做的除外)和文档不管。
管线编排
Transloadit:Assembly 步骤
Assembly 让你把多个 Robot 接成一条管线:
{
"steps": {
"imported": {
":robot": "/http/import",
"url": "https://example.com/input.mp4"
},
"thumbnails": {
":robot": "/video/thumbs",
"use": "imported",
"count": 5
},
"encoded_hd": {
":robot": "/video/encode",
"use": "imported",
"preset": "iphone-high",
"width": 1920,
"height": 1080
},
"encoded_sd": {
":robot": "/video/encode",
"use": "imported",
"preset": "iphone",
"width": 854,
"height": 480
},
"stored": {
":robot": "/s3/store",
"use": ["thumbnails", "encoded_hd", "encoded_sd"],
"bucket": "my-bucket"
}
}
}
互相不依赖的步骤会自动并行。复杂媒体管线下,这套挺好用。
FFHub:顺序或并行任务
FFHub 走多次 API 调用,或者一条复合 FFmpeg 命令:
# 一条命令多输出
ffmpeg -i input.mp4 \
-vf scale=1920:1080 -c:v libx264 -crf 22 output_hd.mp4 \
-vf scale=854:480 -c:v libx264 -crf 24 output_sd.mp4 \
-vf "fps=1/60" -q:v 2 thumb_%02d.jpg
更复杂的管线,提交多个任务,编排放在你自己的应用代码里。控制权全在你这边,但要写更多代码。
Transloadit 更合适的场景
1. Uppy 上传组件
要做面向用户的上传——拖放、断点续传、摄像头、进度条——Uppy 真的好,开源。
2. 文件类型覆盖广
图片缩放、文档转换、非视频任务,一个服务搞定。
3. Assembly 管线
复杂的多步骤工作流,Assembly 配合自动并行执行很顺手。
4. 客户端 SDK
7+ 种语言的官方 SDK,跟 Assembly 系统深度集成。
5. 模板系统
Assembly 模板可以复用,一次定义,按名调用,生产环境部署更干净。
FFHub 更合适的场景
1. FFmpeg 原生
写真实的 FFmpeg 命令。没有翻译层,没有 Robot 参数要学。FFmpeg 知识直接复用。
2. 价格更简单
按处理秒数。没有月度套餐,没有按 GB 算,没有超额惊吓。
3. FFmpeg 全部能力
复杂滤镜图、二次编码、任意编解码器、自定义流映射——FFmpeg 能做的都能做。
4. 学习成本低
会 FFmpeg 几分钟就能上手,不用啃 Assembly DSL 和 Robot 目录。
5. 没有供应商锁定
标准 FFmpeg 命令到处能跑。从 FFHub 迁出,把同样的命令搬到自己服务器上就行。
6. 处理过程透明
你能直接看到执行的内容——就是你写的 FFmpeg 命令。没有行为不明的黑盒 Robot。
怎么选
选 FFHub,如果:
- 需要完整 FFmpeg 命令灵活性
- 处理需求集中在视频/音频
- 想要简单的按秒计费
- 不想被供应商锁定
- 团队已经会 FFmpeg
- 需要复杂滤镜链或高级编码选项
选 Transloadit,如果:
- 需要面向用户的上传组件(Uppy)
- 应用还要处理图片、文档,不只是视频
- 想要托管的多步骤 Assembly 管线
- 喜欢更高层的抽象,不想直接写 FFmpeg 命令
- 想用 50+ 种 Robot 的覆盖面
上手 FFHub
如果看重 FFmpeg 灵活性和价格简单,FFHub.io 几分钟就能跑:
# 装 CLI
npm install -g ffhub
# 在云端跑任意 FFmpeg 命令
ffhub run "ffmpeg -i https://example.com/input.mp4 -c:v libx264 -crf 23 -vf scale=1280:720 output.mp4"
# 上传本地文件
ffhub upload video.mp4 --command "ffmpeg -i video.mp4 -c:v libx265 -crf 28 output.mp4"
没有 Assembly。没有 Robot 目录。就是 FFmpeg。
总结
Transloadit 和 FFHub 的目标用户有重叠也有差别。Transloadit 是综合性文件处理平台——如果你想在一个服务下解决图片缩放、文档转换、视频编码,加上成熟的管线系统,它是个不错的选择。FFHub 是给那些想在云端用上 FFmpeg 全部能力、希望抽象越少越好、价格越透明越好的开发者准备的。
纯视频/音频处理要灵活性,FFHub 的 FFmpeg 原生方式很难被超越。需要更广的文件处理 + 托管编排,Transloadit 开箱内容更多。挑跟你主场景匹配的工具就行。如果你在为 SaaS 产品或批量转码工作流评估 FFHub,那两篇文章讲集成模式更细。
延伸阅读
- FFHub vs AWS MediaConvert - FFHub 跟 Amazon 托管转码服务在价格、灵活性、配置上的对比
- FFHub vs Coconut - 另一篇面向开发者的对比,覆盖 API 设计和 FFmpeg 兼容性
- Video Processing for SaaS - SaaS 加视频功能的「自建 vs 外购」决策指南