将 4500 万 Token 压缩至 12KB:video-use 如何用“读文本 + 按需波形”终结多模态视频剪辑的算力黑洞
在多模态大模型席卷视频领域的浪潮中,绝大多数开发者试图将整段 1080p 原始素材以每秒数帧的密度切碎,暴力灌入超长上下文大模型进行剪辑分析。一段短短 10 分钟的多机位素材,动辄包含 18,000 帧画面,哪怕按极低分辨率压缩,也会消耗超过 2,700 万到 4,500 万的 Token 吞吐;随之而来的不仅是高昂的推理账单和漫长的网络等待,更有大模型在毫秒级时序定位上的幻觉与灾难性误差。
开源项目 browser-use/video-use 给出了颠覆性的架构解法:“大模型根本不应该‘看’视频,而应该‘读’视频。” 借鉴了 browser-use 用轻量 DOM 树替代高昂屏幕截图的降维思想,video-use 通过高精度语音转录与按需视觉合成,将 1 小时的多机位素材压缩为仅 12KB 的紧凑 Markdown,配合确定性 EDL 状态机、多引擎动画并行编排以及严格的音视频自检闭环,让 Claude Code、Codex 等通用代码 Agent 拥有了专业级视频剪辑与工业级交付能力。
1. 痛点与范式反思:为什么多模态大模型“看画面剪辑”是一场工程灾难?
在探讨 video-use 的技术方案之前,我们需要深入拆解当前 AI 视频剪辑在架构层面的根本矛盾。
1.1 算力黑洞与 Token 暴击
传统的端到端多模态大模型(Vision-LLM)剪辑方案,本质上是在用“像素暴力”解决“逻辑结构”问题。
假设有一段 15 分钟的访谈或口播素材,包含 3 个机位和多次重录(NG takes):
- 视频总时长:900 秒;
- 帧采样率:若按最起码的 2 fps 抽帧,共有 1,800 帧关键画面;
- Token 消耗:主流多模态模型(如 GPT-4o、Gemini 等)每张图像切片消耗 800 ~ 1,500 Token。单次完整输入便消耗超过 2,000 万 Token;若包含多轮交互和重新剪辑,Token 消耗迅速突破 4,500 万;
- 推理延迟:处理千万级 Token 的视频上下文往往需要数十秒乃至数分钟,交互体验完全停滞;
- 经济成本:单次剪辑调优的 API 开销高达几十乃至上百美元,根本无法应用于严肃的日常生产。
1.2 连续像素与离散切点的不可能三角
即便不考虑成本,视觉模型在时序剪辑上也存在天然的物理缺陷:
- 时序定位模糊:多模态模型能够理解“画面中有人笑了”,但无法精确指出笑声开始于第
14.320秒还是第14.480秒; - 气口与切点破坏:剪辑的精髓在于“气口(Breath Gaps)”与重音停顿。视觉模型无法感知音频采样的零交叉点(Zero Crossing),切片极其容易落在单词中途,导致产物出现刺耳的破音或生硬的半截发音;
- 幻觉剪辑:超长上下文中注意力机制出现稀释,模型极易“编造”不存在的时间戳,导致后续 FFmpeg 渲染指令崩溃。
flowchart LR
subgraph 传统多模态暴力方案
A1[原始视频素材 15min] --> A2[高频抽帧: 18000+ 帧]
A2 --> A3[Vision-LLM 上下文: 45M Tokens]
A3 --> A4[高昂成本 / 毫秒时序幻觉 / 截断爆音]
end
subgraph video-use 降维架构
B1[原始视频素材 15min] --> B2[ElevenLabs Scribe ASR]
B2 --> B3[12KB 密集文本 takes_packed.md]
B3 --> B4[Claude Code 精准时序推理]
B4 --> B5[按需调用 timeline_view 局部核验]
B5 --> B6[确定性 EDL + FFmpeg 无损渲染]
end
正如 browser-use 团队在浏览器 Agent 领域通过提取可交互的语义 Accessibility/DOM 树,击败了全图像素识别一样;video-use 在视频领域也贯彻了相同的核心哲学:让声音和文字充当主坐标系,视觉只充当按需调用的微观探针。
2. 感知双层架构:文本首选层与按需视觉合成
video-use 的核心创新,在于构建了“文本第一(Text-First)、视觉为辅(Visual-On-Demand)”的两级感知体系。
2.1 第一层:密集型 Markdown 首选视图(takes_packed.md)
大模型最擅长处理的介质是高密度的离散符号,而非连续矩阵。video-use 首先通过 helpers/transcribe_batch.py,调用高保真 ASR 服务(如 ElevenLabs Scribe)提取毫秒级词级时间戳、说话人声纹特征与非言语声学事件。
随后,helpers/pack_transcripts.py 执行启发式分句聚类算法:
- 静音阈值截断:默认以
silence >= 0.5s为天然物理边界; - 说话人切换截断:一旦检测到 Speaker ID 变更,立即分割;
- 保留语气声学事件:精确保留
(laughter)、(applause)、(sigh)等非言语信息,坚决不进行文本平滑化; - 时间轴量化对齐:为每条短语打上
[002.52-005.36]格式的对齐时间戳。
最终生成的 takes_packed.md 如下所示:
# Packed transcripts
Phrase-level, grouped on silences ≥ 0.5s or speaker change.
Use `[start-end]` ranges to address cuts in the EDL.
## C0103 (duration: 43.0s, 8 phrases)
[002.52-005.36] S0 Ninety percent of what a web agent does is completely wasted.
[006.08-006.74] S0 We fix this.
[007.80-011.20] S0 (sigh) Let me re-read this sentence without the stutter.
[013.40-016.95] S0 We built video-use so coding agents can cut videos deterministically.
通过这一层转换,原本数十分钟的高清视频流被浓缩成一份仅 10KB ~ 15KB 的结构化文本。代码 Agent 只需读取该 Markdown,便能看清所有重复录制(Takes)、口误停顿、叹气笑场,直接在字符级进行逻辑构思。
[!IMPORTANT]
为什么坚决拒绝标准 Whisper 的文本规范化?
普通语音识别(如本地 Whisper CPU)通常会自动过滤或平滑掉口头禅(umm、uh、like)和口吃停顿。但对于剪辑 Agent 而言,这些语气词和假起步(False Starts)恰恰是最宝贵的剪辑决策信号!一旦被平滑掉,Agent 就会丧失定位并切除瑕疵气口的能力。
2.2 第二层:微观决策级复合视觉切片(timeline_view.py)
如果 Agent 完全不看画面,遇到复杂的画面衔接(如眼神跳跃、手势断裂、光线突变)时如何决策?
video-use 给出的答案是:绝不全局扫描,只在决策歧义点定点下钻。
当 Agent 面临多条 Take 择优、气口是否安全、以及最终成片切点复核时,它会按需调用 helpers/timeline_view.py <video> <start> <end>。该脚本会在底层执行轻量级 FFmpeg 采样与 PIL 合成,生成一张复合监控图:
- Top Track(水平胶片带):在指定时间窗口内等距抽取 N 帧缩小尺寸(320px)的画面缩略图,直观展现人物姿态、光影与表情变化;
- Bottom Track(归一化 RMS 音频波形带):将音频提取为 16kHz PCM,计算滑动窗口能量均方根(RMS),并做全局归一化;
- Token Track(词级文字标注):根据 Scribe 时间戳将对应单词投射在波形时间轴上方;
- Silence Highlight(静音候选切点阴影):将所有持续时长 ≥ 0.4s 的能量真空区以半透明色块高亮标注,指引物理切刀位置。
+---------------------------------------------------------------+
| [Frame 01] | [Frame 02] | [Frame 03] | [Frame 04] | ... | <- 画面胶片带 (姿态核验)
+---------------------------------------------------------------+
| "Ninety" "percent" "of" "what" |//// SILENCE ////| | <- 字词标注与气口阴影
| /\_/\_/\__/\_ \__/\_/\__ \_/\__/\_/\_ | | | <- RMS 波形带 (防爆音)
+---------------------------------------------------------------+
Agent 在一次完整的 15 分钟长视频剪辑任务中,通常仅需调用 4 ~ 6 次 timeline_view,消耗不足 3,000 Token 的图像开销,便精准解决了所有视觉层面的连续性问题。
3. 全链路工程流水线:从自然语言到无损渲染
video-use 的运行闭环由一套严格的状态机组织而成,各个子系统紧密协同,杜绝 Agent 的自由发散。
sequenceDiagram
autonumber
actor User as 用户 (User)
participant Agent as Claude Code / Codex
participant Transcriber as Scribe / Batch Transcriber
participant Packer as pack_transcripts.py
participant Tool as timeline_view.py
participant Render as render.py (FFmpeg)
participant Critic as Critic Sub-Agent
User->>Agent: "把这批素材剪辑成一段硬核发布会视频"
Agent->>Transcriber: 批处理提取词级音轨数据 (transcripts/*.json)
Transcriber-->>Agent: 写入本地磁盘缓存
Agent->>Packer: 聚合生成 takes_packed.md
Packer-->>Agent: 交付 12KB 纯文本大纲
Agent->>Agent: 粗筛口误与假起步,构思剪辑节奏
Agent->>Tool: 对模糊镜头与重录点调用 timeline_view
Tool-->>Agent: 返回胶片与波形复合 PNG
Agent->>User: 输出剪辑方案(叙事结构、选条理由、时长预算)
User-->>Agent: 确认批准(Confirmation)
Agent->>Agent: 编排生成 edl.json
Agent->>Render: 执行轻量预览 (render.py --preview)
Render-->>Agent: 生成 720p preview.mp4
Agent->>Tool: 在所有拼接点 (±1.5s) 执行切口回检
Agent->>Critic: 唤醒挑刺 Sub-Agent 进行毒舌审查
Critic-->>Agent: 给出降噪/排版/节奏缺陷报告 (最多 3 轮修正)
Agent->>Render: 执行最终全分辨率交付渲染 (final.mp4)
Agent-->>User: 交付 final.mp4,并在 project.md 持久化会话记忆
3.1 确定性剪辑决策列表(EDL)
LLM 在完成策略构思后,不会直接执行任何不可逆的破坏性命令,而是输出一份完全声明式的 edl.json(Edit Decision List):
{
"version": 1,
"sources": {
"C0103": "/Users/lijianfei/Videos/raw/C0103.MP4",
"C0108": "/Users/lijianfei/Videos/raw/C0108.MP4"
},
"ranges": [
{
"source": "C0103",
"start": 2.42,
"end": 6.85,
"beat": "HOOK",
"quote": "Ninety percent of what a web agent does is completely wasted.",
"reason": "最清晰的开场,果断截断 7.80 秒处的叹气与口吃。"
},
{
"source": "C0108",
"start": 14.30,
"end": 28.90,
"beat": "SOLUTION",
"quote": "We built video-use so coding agents can cut videos deterministically.",
"reason": "第三遍重录发挥最完美,语速稳定,眼神正对镜头。"
}
],
"grade": "neutral_punch",
"overlays": [
{
"file": "edit/animations/slot_1/render.mp4",
"start_in_output": 2.42,
"duration": 4.43
}
],
"subtitles": "edit/master.srt",
"total_duration_s": 19.03
}
将复杂的剪辑逻辑解耦为纯声明式的 JSON 数据,保证了整个流程的可回溯、可差分(Diff)、可调试。
4. 生产级“防翻车”硬红线(The 12 Hard Rules)
音视频处理与文本代码存在巨大的范式差异。文本稍有瑕疵尚可容忍,但在音视频编码中,一个毫秒的偏差或滤镜顺序的颠倒就会造成肉眼可见的“灾难”。video-use 在 SKILL.md 中固化了 12 条经过实战检验的非妥协硬红线:
| 规则编号 | 规则核心定义 | 违背后的物理现象与灾难性后果 |
|---|---|---|
| Rule 1 | 字幕必须置于滤镜链最末端 (subtitles LAST) |
若先烧录字幕再叠加图形/动画,顶层 Overlay 会将字幕遮挡,产生低级的画面穿模。 |
| Rule 2 | 单段裁剪调色 → 无损 -c copy 拼接 |
严禁使用单趟复合 Filtergraph 拼接。后者在包含复杂贴片时会对所有原始帧进行重复二次解码转码,耗时翻倍且损失画质。 |
| Rule 3 | 拼接处必须增加 30ms 音频交叉淡入淡出 | 纯硬切(Hard cut)大概率落在音频波形的非零振幅处,引起采样跳变,产生明显的“咔哒(Clicks/Pops)”高频爆音。 |
| Rule 4 | Overlay 必须使用 setpts=PTS-STARTPTS+T/TB |
若不重置时间戳,叠加的动画图层会在前面空跑,导致在目标时间窗展现的是动画中间帧甚至静止黑屏。 |
| Rule 5 | Master SRT 必须采用输出时轴重映射计算 | 公式:output_time = word.start - segment_start + segment_offset。若直接复用原始时间戳,拼接后字幕完全脱节。 |
| Rule 6 | 严禁在单词中间动刀 | 切口必须严格对齐 ASR 词边界。切中音节会造成严重的“吞字”或半字喉音。 |
| Rule 7 | 切口双向安全微量填充(30ms ~ 200ms Padding) | ASR 时间戳受声学模型窗长影响普遍存在 50ms 左右漂移。保留 30~200ms 的气口缓冲,能彻底消除吃字风险。 |
| Rule 8 | 仅使用词级原汁原味(Verbatim)ASR | 禁用常规平滑模型。语气词 umm、uh 是剪辑定位口误的核心锚点。 |
| Rule 9 | 转录结果以文件哈希严格缓存 | 转录耗时耗费 API 额度。只要源文件未变,绝不重复调用转录。 |
| Rule 10 | 多动画图层必须并发唤醒 Sub-Agent 构建 | 串行生成 4 个动效耗时累加;通过并发 Agent 工具派发独立槽位,渲染总耗时取决于最慢单项。 |
| Rule 11 | 未获用户自然语言方案确认前,绝不触碰剪刀 | 杜绝盲目消耗算力渲染。必须先向用户陈述构思并取得确认。 |
| Rule 12 | 所有衍生中间件严格隔离于 <videos_dir>/edit/ |
确保源素材目录绝对只读安全,同时防止污染 video-use 工具目录。 |
4.1 深入解析:为什么音频必须执行 30ms 交叉淡入淡出?
让我们用音频工程原理来直观还原 Rule 3 的精妙之处。
在数字音频中,波形是由连续的 PCM 采样点构成的。若在时间点 T 处直接将 Clip A 的尾部与 Clip B 的头部生硬拼接:
Clip A 波形: ... ~~~/\__/\ (振幅在 +0.8 处被突然截断)
| <--- 形成瞬间垂直阶跃!产生无穷大高频分量 (Click Pop)
Clip B 波形: (振幅从 -0.6 处突兀开始) \_/\___/ ...
在模拟电路或扬声器单元重放该瞬间时,音圈会在 0 秒内被迫从正压极值跃迁至负压极值,产生清脆且极具刺痛感的爆音(Pop noise)。
video-use 在 helpers/render.py 中为每一个切片片段强制注入了对称的 30ms 淡化滤镜:
afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03
这 30 毫秒的时间窗人耳几乎无法感知任何音量骤降,但它强制波形在物理切点处平滑收敛到零振幅(Zero-crossing),从数学原理上消灭了所有拼接爆破音。
5. 多引擎动画生态与动态重音对齐
高品质的科技类短视频离不开动态数据图表、代码高亮以及概念动画。video-use 并没有局限在单一工具上,而是解耦支持四大动画生态:
- HyperFrames:专精于网页原生生态(HTML/CSS/GSAP/WebM)。适合展示产品 UI 交互、网页落地页动态穿梭、滚动截图动效及透明通道贴片;
- Remotion:基于 React 声明式组件的状态动画。适合将复杂的数据驱动型设计系统、参数化组件进行帧级渲染;
- Manim:深度集成数学几何动画引擎(
skills/manim-video/)。专门负责公式推导、神经网络拓扑、函数图谱与高维数据空间演示; - PIL + FFmpeg 像素流:极轻量级的 Python 脚本绘图。针对极客风终端打字机、数字递增计数器、状态指示灯等轻量场景,做到数秒内生成交付。
5.1 视觉高潮对齐法则(Payoff Timing)
动画最容易出现“廉价感”的原因,在于动画动作与说话者的声音重音错位。video-use 在设计动效调度时明确规定了倒推同步法:
# 动画高潮对齐核心逻辑示例
payoff_word_time = 4.28 # 语音中说出核心爆点单词的时间戳
reveal_duration = 0.80 # 动画展开所需的动画物理时长
# 倒推动画起始时间,使动画完成瞬间与声音重音完全重合
overlay_start_time = payoff_word_time - reveal_duration
如果等到说话人说出关键词才开始播放动画,观众的视觉反应会滞后于听觉,产生割裂感;只有在重音落地的那一帧,动画图形刚好完成展开定格,音画一体的沉浸感才会被真正激发。
5.2 拒绝生硬:缓动曲线与排版避坑
在细节打磨上,video-use 同样设立了严谨的工程标准:
- 非线性缓动:严禁使用死板的线性动画(Linear)。单次入场必须采用三次贝塞尔减速曲线
ease_out_cubic(t) = 1 - (1 - t)^3;持续绘制则采用ease_in_out_cubic; - 打字机锚定对齐陷阱:在生成打字机代码效果时,必须预先计算完整字符串的物理包围盒(Bounding Box),以完整宽度作为水平居中基准。如果按当前打出的子字符串动态居中,文字会随着输入过程不断向左抖动滑移;
- 短视频安全区规范:移动端短视频平台(TikTok、Reels、Shorts)底部的操作栏与标题会遮挡约 25% ~ 30% 的画面。
render.py将字幕垂直边距(MarginV)基线锁定为90(基于 288p 参考分辨率),确保字幕稳稳悬浮在 UI 遮挡区上方。
6. 机器眼闭环:自检评估与“挑刺者”Critic Agent
很多自动化剪辑工具最致命的缺陷,在于渲染完毕后“盲目交工”,把瑕疵直接暴露给用户。video-use 引入了极具工业成熟度的“机器眼自检(Self-Evaluation)”与“挑刺者(Critic Sub-Agent)”双重防线。
6.1 渲染产物切口微观扫描
在生成预览视频后,主 Agent 不会直接向用户发消息,而是自动调用 timeline_view 对已经渲染完成的最终成品进行回检。
回检重点覆盖每个切口边界(±1.5s 窗口):
- 跳跃感检测:画面在切点处是否存在不可接受的人物头部闪烁或视线突跳;
- 波形毛刺检测:波形图在接缝处是否出现未压住的奇异高能尖刺(Spike);
- 字幕图层检测:动画 Overlay 是否意外遮挡了底部文字。
同时,通过 FFmpeg 执行声学绝对测量:
ffmpeg -i edit/preview.mp4 -af ebur128=peak=true -f null -
测量整体集成响度是否达标(标准:-14 LUFS,True Peak ≤ -1 dBTP),检查人声与背景音乐的 RMS 比值。系统深知“大模型没有耳朵,无法听音频”,因此坚决不用主观词汇描述音质,完全用声学仪表数据说话。
6.2 毒舌审核员:Critic Sub-Agent
对于正式发布的营销与 Demo 视频,主流程会额外唤醒一个独立的 Critic Agent。
这个 Agent 的系统 Prompt 只有一条明确要求:“全面挑刺,绝不奉承(Roast, not praise)”。
你是一名严苛的顶级短视频监制。你的职责是挑出成片中所有可能让受众划走的瑕疵。
输入:成片 MP4、EDL 时间线、原始叙事意图。
输出要求:
1. 严禁任何客套表扬;
2. 逐一列出时间码、缺陷定性与证据(截图、响度偏差);
3. 输出最先需要修改的 TOP 5 致命硬伤(例如:38px 小字在手机屏幕无法辨认、笑点 payoff 在高潮前 0.3s 被切断、0.5s 梗图停留时间过短导致无法理解)。
通过“创作者 Agent + 监制 Critic Agent”的双重对抗机制,video-use 能够在交付用户之前,自主消灭绝大部分初级排版与剪辑节奏硬伤。
为了防止双 Agent 对抗陷入无限修正陷阱,流水线设计了硬性熔断:自我修正循环上限为 3 次。若 3 轮后依然存在分歧,系统会将未决细节清晰整理,交由人类决策。
7. 实战价值与思考:AI 时代的系统架构范式转移
回顾 video-use 的整套设计,它为我们理解大模型在专业工程领域的落地提供了极具前瞻性的范式样本:
-
从“多模态崇拜”回归“符号与确定性工程”:
在技术热潮中,人们倾向于把所有任务丢给更庞大、更慢的多模态大模型;然而,将大模型置于“战略规划与语义调度”的位置,将底层“像素渲染与信号处理”沉降给经过数十年工业验证的确定性工具(FFmpeg、PIL、ASR),不仅将推理开销降低了 99.9%,更获得了毫秒级的物理确定性。 -
状态透明与声明式解耦:
从takes_packed.md、edl.json到project.md,每一个中间介质都是人类与机器都能阅读、校验与版本控制的纯文本。没有不可名状的二进制黑盒,任何步骤出错都可以针对单点进行无缝修复。 -
从单机脚本到 Agent Skill:
video-use 的代码结构没有采用传统的庞大 Monolith 架构,而是将其标准化为一个兼具SKILL.md、install.md与原子helpers/的 Agent 技能包。无论是在终端跑 Claude Code,还是通过 VPS、Telegram 结合 Browser Use Box 长期驻留,它都能被各类编码 Agent 秒级加载,成为开发者身边不眠不休的专业视频工程副驾。
原文链接与参考资料
- 项目开源代码仓:GitHub - browser-use/video-use: Edit videos with coding agents
- ElevenLabs Scribe 语音转录:ElevenLabs Scribe: Speech-to-Text API
- Browser Use 团队主页:Browser Use - Web Agents Platform
- HyperFrames 动效引擎:GitHub - heygen-com/hyperframes: Declarative HTML/CSS Video Engine
- Remotion 框架:Remotion - Make videos programmatically with React
- Manim 数学可视化库:Manim Community: A community-maintained Python library for creating mathematical animations