AI-Native 剪辑工具演进:为什么我放弃了 FFmpeg,转向 Remotion + JSON Timeline?
作为一个“懒狗”开发者,我总是想尽办法在一切环节偷懒。 现在的代码都已经进入 Vibe-coding(跟着感觉写代码)的时代了,你还指望我自己手动去剪辑视频吗? 所以自然而然的,我脑子里冒出了一个想法:能不能 Vibe-editing(跟着感觉剪视频)呢?
说干就干,我决定写一个 AI-Native 的剪辑工具:Mr.Director (V2)。
在这篇文章里,我想聊聊在开发这个项目的过程中,我是如何踩坑,并最终决定将核心技术栈从传统的 FFmpeg 转向 Remotion + JSON Timeline 的。
放空大脑的“暴力美学”
最初的版本(V1),我的想法简单粗暴:
- 用 Gemini 强大的多模态能力对视频进行分段解析。
- 将解析结果丢给由 ReAct 框架驱动的 LLM 进行循环思考。
- 让 LLM 直接输出 FFmpeg 命令进行剪辑。
我向万能的claudecode 祈祷,万能的claudecode 也确实聆听到了我的祈求:它一天就把原型写出来了,甚至跑起来还有模有样。
但很快,致命的问题出现了。
LLM 的剪辑方式,是靠写一段段又长又臭的 FFmpeg 命令行,强行把视频切成一个个片段然后再拼接组装起来。 当剪辑要求稍微复杂一些(比如转场、多轨叠加)、剪辑片段的颗粒度稍微精细一些时,悲剧发生了,llm死活改不对时间戳。
顿悟:视频剪辑也需要“源代码”
在浪费大约Nm个Token后,哥们儿是顿悟了,让 LLM 直接端到端包揽任务,产出最终结果,是违背人机协同直觉的。
这就好比现在的 AI 编程工具(比如 Claude Code / Cursor),它们写出来的代码是“人类肉眼可读、可修改的文本(Source Code)”,而不是直接给你编译出一个无法破解的 .exe 二进制程序,让你写完就死用。
视频剪辑也是一个道理。
如果 AI 的终点只是吐出一个 .mp4 视频文件(或者一串人类难以卒读的 FFmpeg 黑盒命令),这就像是一个编译好的“二进制程序”。它缺乏灵活性,人类根本无法在这个基础上进行微调和二次创作。
Remotion + JSON Timeline = 完美的中间态
为了打破这个黑盒,我重构了项目,也就是现在的 Mr.Director V2。
我彻底抛弃了直接生成视频的思路,采用了 Remotion(一个用 React 写视频的框架)配合 自定义的 JSON Timeline 表达形式,成功在浏览器中复刻了一个小型的 Premiere Pro(PR)。
在这个全新的架构下,无论是人类的拖拽,还是 LLM 的思考,所有的剪辑意图统统被具象化为一个 JSON Timeline。 这个转变带来了极其惊艳的两个好处
1. 对 LLM 极度友好:如鱼得水的“结构化剪辑”
LLM 天生对代码和结构化数据拥有极高的敏感度。让它去算 FFmpeg 复杂的命令行参数它会崩溃,但让它去操作、修改一个 JSON 对象(比如增加一个 Clip 节点、修改一段音频的 duration),对它来说简直是如鱼得水。 JSON 就是视频的“抽象语法树(AST)”,LLM 可以极其精准地理解当前的视频状态并进行增删改查。
2. 对人类极度友好:完美的人机协同闭环
不满意 AI 生成的剪辑方案?没关系! 因为有了 JSON Timeline 和 Remotion 渲染引擎,你可以在浏览器中直接拖拽修改! 改完了之后突然又有了新点子?也没关系!LLM 会直接读取你手动改动后的 Timeline JSON。 它能完全“看懂”你刚刚手动调整了什么,并且可以在保留你人工微调的基础上,进一步为你迭代出新的版本。
从 FFmpeg 到 Remotion + JSON Timeline,核心其实是从“命令式黑盒”到“声明式白盒”的范式转变。
AI-Native不能当口号用,偷懒也要有个限度,比如最少最少,得让AI 产出结构化、人类可读、可干预的“中间态(JSON)”,才能称得上是AI-Native 协同工具。
如果你也对 Vibe-editing 或 AI 视频生成感兴趣,欢迎来逛逛我的项目并点个 Star: