browser-use video-use 技术解读:Claude Code 对话式视频剪辑的文本优先方案

2026 年 8 月 15 日,browser-use 团队在 GitHub 建立了 video-use 仓库。两周后,它以单日新增 509 星的速度登上 GitHub Trending,总星数 22,890。功能用一句话可以说完:把一个文件夹的原始素材交给 Claude Code,说一句「把这些剪成一支发布视频」,然后收下 final.mp4。没有时间线界面,没有预设模板,剪辑决策全部由编码智能体在对话中完成。

video-use 官方演示:在 Claude Code 会话中完成视频剪辑

官方横幅截图记录了一次真实运行:Claude Code 在 Opus 4.6(1M 上下文)下接管一支 45 秒的发布视频,素材 13 个 take。智能体先做素材清点(ffprobe + 批量转写 + 转写打包),再扫一遍口误,然后向用户提出策略并停下等待确认,后续的 EDL 构建、动画生成、渲染自检才依次展开。这套流程被写进仓库的 SKILL.md,也是理解这个项目的入口。

装进技能目录的剪辑台

video-use 的交付形态是一个智能体技能目录,而非独立应用。安装分四步:把仓库克隆到稳定路径(官方明确建议 ~/Developer/video-use,不要放 /tmp 或下载目录),用 uv syncpip install -e . 装 Python 依赖(requests、librosa、matplotlib、pillow、numpy),brew install ffmpeg 补上硬依赖,最后把 ElevenLabs 的 API Key 写进 .env。可选的 yt-dlp 用于直接拉取线上视频源。

安装完成后,把仓库软链到智能体的技能目录(Claude Code 是 ~/.claude/skills/video-use/,Codex 是 ~/.codex/skill)就完成了注册。README 提供了一段安装提示词,粘进 Claude Code、Codex、Hermes 或 Openclaw 等任何有 shell 权限的智能体即可,由智能体自己完成克隆、依赖安装、技能注册,只在需要 API Key 时向用户要一次。日常使用同样是对话驱动:在素材目录启动智能体,说「把这些剪成一支发布视频」,智能体盘点素材、提出策略、等用户点头,然后在素材旁边的 edit/ 目录产出成片。

LLM 不看帧,读文字

video-use 最值得展开的是它的输入表示。视频对大模型的默认形态是一长串帧:按每秒 1 帧抽样,一段素材就是上万张图。仓库 README 给了这笔账——30,000 帧 × 每帧 1,500 token,约 45M token 的上下文,其中绝大部分是冗余画面。video-use 的做法是把视频「读」出来:一条 ElevenLabs Scribe 转写调用拿到词级时间戳、说话人分离和音频事件标注((laughter)、(applause)、(sigh)),所有素材打包成一个约 12KB 的 takes_packed.md,作为大模型的主要阅读视图。

timeline_view 合成图:胶片条、说话人轨、波形、词级标签与静音切点

打包文件的每一行都带精确到百分之一秒的时间区间。仓库里的示例长这样:

text
## 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 fixed this.

短语在静音超过 0.5 秒或说话人切换处断开。剪辑决策依赖的第二层输入是按需生成的视觉合成图:timeline_view.py 对任意时间区间输出一张 PNG,包含胶片条、说话人轨道、波形、词级标签和候选切点。SKILL.md 专门强调它只该出现在决策点——模糊的停顿、备选 take 的对比、切点复核——而不是当作扫描工具全程调用。

README 把这个思路类比为 browser-use 本身的设计:给大模型结构化的 DOM,而不是屏幕截图。这里是给大模型带时间戳的文本,而不是帧序列。

十二条硬规则与剪辑工艺

从转写到成片之间,SKILL.md 划出了 12 条硬规则,全部围绕「偏离即静默失败」的环节。几条有代表性的:字幕必须在滤镜链最后应用,否则叠加动画会盖住字幕;每个片段单独抽取后用无损 -c copy 拼接,避免单趟滤镜图把所有片段二次编码;每个片段边界做 30ms 音频淡入淡出,消除切点的爆音;叠加动画用 setpts=PTS-STARTPTS+T/TB 平移到窗口起点;主字幕文件按输出时间轴重算偏移(output_time = word.start - segment_start + segment_offset),否则拼接后字幕错位。

剪辑工艺部分给出了一组可以直接抄的数字。切点永远吸附在词边界上,绝不切进单词内部;每个切缘留 30–200ms 的缓冲,吸收 Scribe 时间戳 50–100ms 的漂移;说话人交接处留 400–600ms 空气感,快节奏内容再收紧;超过 400ms 的静音是最干净的切点,150–400ms 的短语边界需目检确认,低于 150ms 视为不安全。笑声、叹气、掌声这类音频事件被当作节拍信号,切点向后延展把反应收进来。仓库自带的这支发布视频用了 50ms 前置、80ms 后置的切缘缓冲。转写按源文件缓存,源不变就不重转;ASR 只用词级逐字模式,短语模式和规范化填充词都被排除,因为前者丢失亚秒级间隙,后者丢失编辑信号。

动画叠加走并行子代理

成片的视觉层由四条动画引擎承接:HyperFrames、Remotion、Manim 和 PIL。每个动画在 animations/slot_<id>/ 目录里独立成一个槽位,由智能体并行派生子代理同时构建,总耗时约等于最慢的一个——SKILL.md 明确禁止串行执行。HyperFrames 需要 Node.js 22+,Remotion 可以用 npx create-video@latest 现场脚手架,Manim 的技能文件直接内嵌在仓库里(vendored skills/manim-video/)。动画引擎全部延迟安装,项目第一次真正用到才装。

调色走独立的 grade.py,内置预设,也接受自定义 ffmpeg 滤镜链。渲染由 render.py 收口:逐段抽取、拼接、按 PTS 平移叠加动画、最后压字幕,--preview 出 720p 快速版,--build-subtitles 在渲染中生成主字幕文件。

渲染后的自检回路

video-use 在把预览交给用户之前,先自查一遍。自检的对象是渲染输出本身:对成片的每个切点区间跑 timeline_view,检查画面跳变、边界波形尖峰(漏网的音乐爆音)、被叠加层遮住的字幕、错位的动画。另外抽样首尾各 2 秒和中间 2–3 个点,核对调色一致性与字幕可读性,再用 ffprobe 验证成片时长与 EDL 预期一致。发现问题就修复、重渲、复检,上限 3 轮,仍有问题就把问题清单交给用户而不是继续循环。只有自检通过,用户才会看到预览。

多 take 的择优还有一条专门路径:派一个编辑子代理,在打包转写上按节拍挑每个位置最好的 take,把人工剪辑里最耗时的对素材环节压进文本层。

会话记忆留在素材旁边

edit/ 目录是完整的会话现场:project.md 追加每次会话的记忆,下周再剪同一支视频时智能体从这里恢复上下文;takes_packed.md 是阅读视图,edl.json 存剪辑决策,transcripts/ 存缓存的原始转写 JSON,clips_graded/ 存带调色和淡入淡出的分段抽取,master.srt 是输出时间轴的字幕,verify/ 存自检用的调试帧。SKILL.md 的规则是会话产物全部留在素材目录,不污染 video-use 仓库本身。想常驻的话,官方提供了 Browser Use Box,把智能体挂在 VPS 或 Telegram 上随时接单。

编码智能体正在自带运行时

video-use 上榜的同一天,Simon Willison 在博客上记录了另一个细节:OpenAI 的 Codex 桌面应用(现已并入 ChatGPT 品牌)在 ~/.cache 里藏了 1.7GB 的 codex-primary-runtime,内含完整的 Python 和 Node.js 运行时,以及 Poppler、git 和 LibreOffice 的原生二进制——其中 libreoffice-headless 占 429.7MB,配套的技能文件教 Codex 如何找到并使用这些二进制处理文档。

两件事放在同一周发生,指向同一个方向:编码智能体的能力边界正在从「写代码」向「操作桌面软件」扩张,而扩张的方式是把传统软件整体搬进自己的运行时或技能目录。video-use 选择了轻的一端——ffmpeg 加转写 API 加一个技能文件就构成剪辑台;Codex 选择重的一端——直接内嵌 LibreOffice。剪辑软件和办公软件都是智能体下一个学期的课程表,区别只在挂载方式。

仓库地址:browser-use/video-use(MIT 协议,含安装文档与示例转写)。Codex 内嵌整套运行时的发现来自 Simon Willison 9 月 1 日的博客笔记