video-use:编码 Agent 读着转写稿剪素材,中文字幕会烧成一排方块

video-use:编码 Agent 读着转写稿剪素材,中文字幕会烧成一排方块

今天拆的是 video-use:把原始素材丢进一个文件夹,让 Claude Code 或 Codex 读着词级转写稿剪出 final.mp4。文章给全它在链条上的位置、转写这一笔真实开销、中文字幕与音频接缝这两处已知阻塞,以及今天该不该动手的判断。

今天这一个叫 video-use,挂在 GitHub 的 browser-use 账号下,MIT 许可。它给自己的一句话是 “Edit videos with coding agents”:把原始素材放进一个文件夹,用编码助手说一句「把这些剪成一支发布片」,它交出 edit/final.mp41。截至今早,仓库显示 24,981 star、3,028 fork、21 次提交、9 位贡献者,主分支最后一次推送停在 8 月 30 日1
第 1 期的 video-shotcraft 给的是镜头,第 2 期的 OpenMontage 给的是流程,video-use 落在第三处:方法论与资产这一层里的剪辑手艺。它接过你已经拍好的素材,管的是哪一段留下、哪一段去掉,以及怎么把这件事交给模型判断。

素材先进文本,模型再下手

让模型逐帧看素材,代价它自己算过:README 里那笔账是 3 万帧乘以 1500 token,等于 4500 万 token 的噪声;它给模型的是 12KB 文本加几张 PNG1
第一层是全量转写,每个源素材一次 Scribe 调用,拿回带词级时间戳、说话人分离和音频事件((laughter)(applause)(sigh))的转写稿。所有素材打包成一个约 12KB 的 takes_packed.md,按 0.5 秒以上的停顿或换人切成短句,每行标着时间区间:
## C0103  (duration: 43.0s, 8 phrases) {#c0103-duration-430s-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.
这份文件是模型读素材的主要视图,挑剪辑点的判断都从它上面来2
第二层只在拿不准的地方调:helpers/timeline_view.py 给出任意时间段的胶片条、波形和字块合成图,用在含糊的停顿、多个 take 的取舍和剪辑点的检查上2。这两层合起来,就是它读素材的方式。
timeline_view 示例:胶片条、说话人轨、标着词的时间轴与波形,两处静音区间被标成深色,下方两个 CUT 标记
项目自带的时间线合成图示例(仓库里的 static/timeline-view.svg),画的是 42.00 秒到 48.00 秒这一段。中间那排字是词级时间戳,Ninety percent of what …wasted.We fixed this. 之间标着 620ms 的静音,后面还有一处 880ms;下方两个绿底 CUT 落在静音区间里。图底那行写着它的取舍标准:400ms 以上的静音是安全的切点,词提供边界精度,音频事件标记要留下的拍子。1
生产正确性被单独列成 12 条硬规则,和审美分开。规则管的是那些错了不会报错、只会静静坏掉的地方:字幕必须在滤镜链最后一道,否则叠加层会盖住它;每段单独取出来再无损拼接,否则加了叠加层就会把每段重编两次;每个段落边界加 30ms 音频淡入淡出;剪辑点不许落在词中间;边缘留 30 到 200ms 的余量,因为 Scribe 的时间戳会漂 50 到 100ms2。规则之外它反过来鼓励自由发挥,原话是拆分屏、画中画、人物条、反应镜头、变速、定格这些手法想做就做,格式支持的都能做2
交给你看之前,它先自己看一遍渲染出来的成片——不是素材——在每个剪辑边界前后 1.5 秒跑一次 timeline_view,查画面跳变、边界上的波形尖峰、被叠加层盖住的字幕、错位的叠加层,再抽查头 2 秒、尾 2 秒和中间两三个点。查到问题就改、重渲、再看,最多三轮;三轮之后仍有问题就报给你,不无限循环2。一支片子里多个动画分别交给子 Agent 并行去做,总耗时约等于最慢的那一个,这是第 10 条硬规则2
同一个仓库里还有两句放在一起读的话。SKILL.md 的设计原则写着对素材类型不作假设,先看清楚再提问题,README 也把旅游、教程、访谈一并列进适用内容;而它挑剪辑点的依据,是语音边界和静音区间。素材里说话的人少、画面本身才是内容的时候,这两句话能抻到多远,只有拿自己的素材试过才知道。

你要给什么,它交回什么

你的准备只有三样:一个装着原始素材的文件夹,ffmpegffprobe 在 PATH 上,一把 ElevenLabs 的 API key。yt-dlp 只在要从链接下载素材时才要装;Node.js 22 以上只在动画插槽要用 HyperFrames 或 Remotion 时才要装3
拿回来的东西比一支成片多。所有产出落在 <素材目录>/edit/ 下:final.mp4preview.mp4 之外,还有 edl.json(每一刀取自哪个源、从第几秒到第几秒、属于哪一拍、为什么留)、master.srtclips_graded/ 里调过色的每段中间片,以及 takes_packed.md 本身2
project.md 是它的会话记忆,每剪完一支追加一次;下次在同一个目录里开工,它接着上次的记录走。转写结果按源文件缓存,源文件没变就不重新转写,这是第 9 条硬规则,也是这套东西里最省钱的一条2

从空目录到 final.mp4

装它四步,install.md 要求全部由 Agent 自己完成,只在要 key 的时候问你一次3
  1. clone 到一个稳定路径,建议 ~/Developer/video-use,然后 uv syncpip install -e .
  2. 装上 ffmpegffprobe
  3. 整个目录软链进技能目录——Claude Code 是 ~/.claude/skills/video-use,Codex 是 $CODEX_HOME/skills/video-use。要软链整个目录的原因是 helpers/ 里的脚本按 bare name 互相调用,必须和 SKILL.md 待在一起;
  4. 把 key 写进仓库根目录的 .env,权限设成 600。
install.md 里备了一段可以直接粘进 Agent 的安装提示词,让它自己走完这四步。里面还有一条克制的要求:装完不要顺手转写一遍做验证,等素材真正进来再跑,因为 Scribe 按小时计费3
装好之后,cd 进素材目录,在那一层起你的编码助手,说一句 “edit these into a launch video”。它会先清点素材、给出一段四到八句的策略(选哪些 take、剪成什么形状、要不要动画、调色方向、字幕样式、预计时长),等你点头再动刀2
终端里的 Claude Code 会话,左边是对话与任务清单,右边是一支待剪视频的素材库
README 顶部的演示横幅,来自仓库的 static/video-use-banner.png。画面是一次真实会话:你在对话里说一句要剪什么,Agent 把待办列成清单一项项做,素材库在右边。这一期的正文讲它读什么、剪什么,这张图给的是它的使用形态——一件发生在对话里的事,没有时间线界面。1

会卡住的地方

中文字幕会烧成一排方块

这条 issue 8 月 5 日提交,至今 open,没有指派人;页面上关联着一条未合并的 PR #12045
第一个坑在安装步骤里。install.md 让你 brew install ffmpeg,而报告者那台机器上(Homebrew ffmpeg 8.1.2、arm64 macOS)默认那个包没有编进 libass,subtitlesassdrawtext 三个滤镜根本不存在。后果是任何带 --build-subtitles 的运行都会在最后一步抛 CalledProcessError,而 master.srt 已经生成好了、前面的流程看起来全都正常,报错信息又长得像引号写错,不像少了个滤镜。他给的走法是先用 ffmpeg -filters 探一下,再在 macOS 上换 brew install ffmpeg-full(有 libass,但是 keg-only,得把它放到 PATH 前面),或者自己对着 libass 编一份。install.md 里另写着任何现代(4.x 以上)的 ffmpeg 构建都够用,把这两句并排看,最常见的 macOS 安装路径恰好在烧字幕这一步不够用4
第二个坑在 render.py 第 51 行:字幕样式被写死成 FontName=Helveticaforce_style 会盖掉字幕文件里的设定,而 libass 在这个路径下不做字形回退,中文转写出来的字就渲染成空方块。他用一段 720x1280 的竖版 H.265 中文素材复现了这件事,并顺手标了 macOS 上的一个细节:PingFang SC 走 fontconfig 解析不到(fc-match "PingFang SC" 会静默返回 Verdana),换成 Heiti SC 能解析到系统字体文件。他自己只改了字体这一处,就正常了4
同一条里还带着第三个更小的口子:字幕分块假设了拉丁文的空格分词,按两个词一切再统一转大写,中文素材上会把两句不相干的话并进同一条字幕——他那段 31 秒、47 个词的素材切出 24 条,按词间停顿分组之后是 14 条,和他实际说的一致4
适用范围写清楚:这是一个人在 macOS 上一次完整复现,转写、挑剪辑点到渲染都跑通了,断在最后烧字幕那一步;它说明的是中文素材在这条路径上会卡住,也说明绕法已经有人写明白了。

每个剪辑接缝后面有一声咔哒

9 月 15 日提交的 issue #162,open,没有指派人6
症状是任何两段以上的 EDL 渲出来,每个拼接点之后约 100ms 有一声能听见的轻响,切在说话中间的最明显。根因是 concat_segments() 用 concat demuxer 加 -c copy:每段取出来的素材各自带着 AAC 编码器的 priming 与 padding 样本,流复制时这些样本在每个接口处对不齐。他对一段两段预览做了逐样本分析(48kHz 单声道),不连续点正好落在 AAC 帧边界上、拼接点之后约 102ms,max |Δsample| = 2038,而局部语音的 p95 约 400;这个跳变在 loudnorm 之前的基础预览里就存在,所以是拼接带进来的6
他给的修法是拼接时只把音频重编成一条连续的流(-c:a aac -b:a 192k -ar 48000),视频继续 -c copy——第 2 条硬规则防的是视频被二次编码,这样既守住它,又消掉了接缝6
他顺带提的另一个点更值得记住:现在的自检靠 Agent 肉眼看 timeline_view 的 PNG,这一声咔哒是用户先听到的,不是流程抓到的。他建议加一个 helpers/verify_cuts.py,每次渲染后机械地检查音频跳变和边界上的亮度突变,不合格就返回非零码,用它卡住「给你看预览」这一步6
适用范围:他的环境是 macOS 苹果芯片加 ffmpeg-full 9.0.1,用的是主分支当前的 render.py。这是一个人在一台机器上的一次复现,和上面那条字幕问题各走各的路径。

Windows 上 helper 会中途崩掉

8 月 9 日的 issue #125,open,旁边同样挂着一条未合并的 PR #14478
几个 helper 会往 stdout 打印 这类字符。Windows 上 Python 对重定向或管道流会回落到本地代码页(cp1252),打印这个动作本身就抛 UnicodeEncodeErrorrender.py 死在第一行进度上,一段都没提取出来;pack_transcripts.py 在写完 takes_packed.md 之后仍然以非零码退出,任何检查退出码的 Agent 步骤会被它打断。作者数出 15 处调用点、分布在 4 个 helper 里,并说明这不限于 Windows——LANG=C 加管道输出同样中招;chcp 65001 不管用,因为非 tty 流用的是 locale 的首选编码。他自己给的绕法是一行环境变量 PYTHONIOENCODING=utf-8,不用改仓库7
同一批问题里还有一条 8 月 5 日的 issue #121,建议加一个 preflight 或 doctor 命令,先把 ffmpeg 和可选叠加依赖在不在验一遍9。今天还没有这个命令,所以上面这些坑都要等你跑起来才撞得上。

78 个 PR 挂着,主分支三周没动

仓库首页那排数字值得一起看:21 次提交,78 个 open 的 pull request,主分支最后一次推送是 8 月 30 日,没有发布过 release1
对读者的意思是:你今天 clone 到的是带着上述问题的版本,而修法大多已经有人写下、挂在队列里没合。自己合一下补丁,或者就改 render.py 里那一行字体常量,不算难题。

转写全靠一把 ElevenLabs 钥匙

install.md 把这件事写得很直白:转写全部由 Scribe 完成,key 不生效或过期,就等于不能装3。素材进不了文本层,整套流程起不来,所以要评估它,得先确认你能拿到 ElevenLabs 的账号,也接受把素材音频送到它的接口上。手上是还没公开的访谈素材时,这一条值得在动手前想清楚。

许可与真实成本

仓库许可是 MIT,版权归 Browser Use,2026 年10。它管的是这份软件;素材、素材里的肖像和音乐、成片的权利,是另外几个问题,不在这份许可里。
必须花钱的只有转写一处。ElevenLabs 官方价目表上,Scribe v2 按音频时长计价,每小时 0.22 美元,另外两个可选加项是 entity detection 每小时 0.070 美元、keyterm prompting 每小时 0.050 美元;订阅档位从每月 6 美元起,各档包含不同的小时数11。按这个价,十小时素材的转写约合 2.2 美元,而素材越剪越短,转写只发生一次。
剪辑这一半在你自己的机器上跑,不按量计费:抽帧、拼接、调色、烧字幕都交给本地的 ffmpeg。真正可能牵出第二笔许可的是动画插槽——它默认可以调 HyperFrames(Apache-2.0,要求 Node.js 22 以上),也可以调 Remotion;Remotion 对个人和 3 人以内的公司免费,4 人及以上要公司许可,做自动化出片这类用途按每次渲染 0.01 美元、每月最低 100 美元起12。不碰动画插槽,这笔钱就不发生。
想让这件事常驻跑,README 另指了一条 Browser Use Box 的路,把 Agent 挂到自己的服务器或 Telegram 上1

和已经在用的四套方案放在一起

方案你给它什么它给你什么它在这一层许可与公开体量
video-use一个装原始素材的文件夹,加一把 ElevenLabs key一条按词边界剪出来的成片,连转写稿、剪辑决定和字幕一起交回方法论与资产层里的剪辑手艺:一份技能规则加几个 ffmpeg、PIL 脚本MIT;24,981 star、3,028 fork1
video-shotcraft(第 1 期)一句需求和你产品的截图一支还能继续编辑的 Remotion 宣传片工程站在 Remotion 之上的镜头与动效资产库Apache-2.0;8,771 star、789 fork13
OpenMontage(第 2 期)一句需求,加你的素材走完工序的成片,带审批门、决策日志和预算上限流程与方法层,安排哪个阶段谁做什么AGPL-3.0;59,577 star、7,498 fork14
HyperFrames用 HTML、CSS 和 GSAP 写的合成确定性渲染出的 MP4渲染底座;video-use 的动画插槽会把活派给它Apache-2.0;50.7k star、4,349 次提交15
hypit一支参考视频,或一句描述一套以词为锚点的工作流,换宿主、换语言、换比例都能重跑视频工作流的描述语言自订许可;6,479 star、777 fork16
这几样能叠着用,各管一段。OpenMontage 在上面选流程、定 provider、管预算和审批;video-use 管的是素材进来之后怎么下刀,它把合成和后期交给 ffmpeg,动画插槽再分给 HyperFrames 或 Remotion;video-shotcraft 补的是镜头长什么样;hypit 那门语言管的是工作流换环境之后还能不能重跑。HyperFrames 的 Playground 挂在 hyperframes.dev,video-use 的动画插槽能把它的技能调起来。15

今天装还是不装

今天就能装的:你手上有真实拍出来的素材——访谈、口播、教程、录屏——要剪成一支能发的片子,而且素材里的信息主要靠说话承载。clone、注册技能、配一把 Scribe key,先剪一支一分钟的口播,重点看两件中间产物:edl.json 里那些剪辑决定你认不认,project.md 记下来的东西够不够你下次接着用。这一轮的钱按素材时长算,一小时素材 0.22 美元。
先收藏的:你的素材是中文、又必须靠烧录字幕出片。字幕这一层眼下对中文字符是坏的,绕法和补丁都摆在那条 issue 里,等你愿意自己改一行字体常量再上。你要的是无人值守的批量出片,它每支片子都会在策略那一步停下来等你点头,这是设计。你的素材里没有对话,它挑剪辑点依据的词边界和静音区间就无从谈起。你要处理的是不方便外发的素材,先把音频会送到 ElevenLabs 接口这件事想清楚。
跳过的:你要的是从零生成画面。它的画面全部来自你给进去的素材,生成模型另在一条链上,这类需求用生成模型自己的产品更直接。

This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.

Related content

More from this channel