
























分析日期:2026-07-05
video-use 是由 browser-use 团队推出的开源 AI 视频编辑工具,核心理念是通过自然语言对话驱动 AI Agent(Claude Code、Codex、Hermes、Openclaw 等)完成专业的视频后期剪辑。用户只需将原始素材放入文件夹,用自然语言描述需求,AI 即可自动完成从剪辑、调色、字幕烧录到动画叠加的全流程,最终输出 final.mp4 [1]。
video-use 延续了 browser-use 的核心理念——不给 LLM 喂像素,喂结构化数据。browser-use 是让 AI 通过结构化 DOM 操作浏览器,video-use 是让 AI 通过结构化文本(转录)编辑视频 [1]。
| 项目 | 详情 |
|---|---|
| 项目名称 | video-use |
| 项目地址 | https://github.com/browser-use/video-use |
| 项目官网 | 无独立官网;可通过 Browser Use Cloud 在线体验:https://cloud.browser-use.com/v4 |
| 作者/组织 | browser-use 组织 |
| Stars | 12,500+(截至 2026 年 7 月) |
| 当前版本 | 0.1.0 |
| 开源协议 | MIT License |
| 主要语言 | Python 76.0%、HTML 22.9%、Shell 1.1% |
| 仓库创建 | 2026 年 4 月 12 日 |
| 演示视频 | TikTok 15 秒 Demo |
poster.html)timeline_view 生成的胶片条+波形图+词标签合成图、以及完整工作流展示video-use 最核心的差异化设计是:LLM 全程不直接分析视频帧。它通过两层抽象让 LLM "阅读"视频而非"观看"视频 [1]:
| 层级 | 说明 | 输出 |
|---|---|---|
| 第一层 — 音频转录层(始终加载) | 通过 ElevenLabs Scribe API 对每段素材进行逐词级时间戳转录,包含说话人分离(diarization)和音频事件标记(如 (laughter), (applause), (sigh)) |
takes_packed.md(约 12KB) |
| 第二层 — 可视化复合层(按需生成) | 仅在 LLM 需要判断"某段沉默是否为死区"或"比较两次拍摄节奏"时,才调用 timeline_view 生成含胶片条+波形+词标签的合成 PNG |
PNG 图片 |
效率对比:传统方案逐帧分析 30,000 帧 x 1,500 tokens = 4500 万 tokens 噪声;video-use 方案仅需 12KB 文本 + 少量 PNG [1]。
Transcribe → Pack → LLM 推理 → EDL → Render → Self-Eval
└─ 问题? 修复 + 重新渲染(最多 3 次)
渲染完成后自动在每一处剪辑点运行 timeline_view 检查:画面跳变、音频爆音、字幕遮挡、叠加层错位。预览仅在通过质检后展示给用户。最多 3 轮自检,超限则标记问题交给用户 [1]。
项目定义了 12 条不可协商的生产正确性规则,确保输出质量 [1]:
| 编号 | 规则 |
|---|---|
| 1 | 字幕必须最后应用 |
| 2 | 分段提取 + 无损拼接 |
| 3 | 每段 30ms 音频淡入淡出(防止剪辑点爆音) |
| 4 | 叠加层 PTS 偏移 |
| 5 | 字幕时间轴偏移计算 |
| 6 | 禁止词内切割 |
| 7 | 剪辑点 padding(30-200ms) |
| 8 | 仅使用逐词级 ASR |
| 9 | 缓存转录结果 |
| 10 | 动画并行子代理 |
| 11 | 策略确认后执行 |
| 12 | 所有输出到 <videos_dir>/edit/ |
支持 4 种动画引擎,按需选择:
| 引擎 | 适用场景 |
|---|---|
| HyperFrames | 创意动画、角色动画 |
| Remotion | 数据可视化、信息图动画 |
| Manim | 数学/技术动画(3Blue1Brown 风格) |
| PIL | 简单叠加层 |
自动分析每段素材的亮度/对比度/饱和度(基于 ffmpeg signalstats 滤镜),所有修正限制在 ±8% 内,目标为"干净而不像调过色"。支持预设模式(warm_cinematic/neutral_punch/subtle/none)和自动分析模式。
| 对比维度 | video-use | 传统视频编辑软件(PR/FCP) | 其他 AI 视频工具 |
|---|---|---|---|
| 交互方式 | 自然语言对话 | GUI 时间轴操作 | 多为一键模板/预设 |
| LLM 视频理解 | 文本 + 按需可视化(不分析帧) | N/A | 多数逐帧分析 |
| 剪辑精度 | 词级边界 | 帧级 | 场景级 |
| 开放性 | 100% 开源,可扩展 | 商业闭源 | 多数闭源 |
| Agent 集成 | 深度集成 Claude Code/Codex 等 | 不支持 | 不支持 |
| 动画引擎 | HyperFrames/Remotion/Manim/PIL 四选一 | 内置效果 | 通常有限 |
| 平台 | 支持状态 |
|---|---|
| macOS | 主要支持(安装脚本优先 macOS/brew) |
| Linux | 支持(Debian/Ubuntu、Arch,提供 apt/pacman 安装命令) |
| Windows | 理论上支持(Python 跨平台,但安装文档未专门列出 Windows 步骤) |
Python 环境: Python >= 3.10
Python 包依赖:
requests — HTTP 请求(ElevenLabs API)librosa — 音频分析(可选,timeline_view 有纯 ffmpeg 回退方案)matplotlib — 图表绘制pillow — 图像处理(timeline_view 合成)numpy — 数值计算manim — 数学/技术动画系统依赖:
ffmpeg + ffprobe(硬性要求,>= 4.x)yt-dlp(可选,用于下载在线视频源)API 依赖:
# 1. 克隆仓库
git clone https://github.com/browser-use/video-use ~/Developer/video-use
# 2. 安装 Python 依赖
cd ~/Developer/video-use
uv sync # 或 pip install -e .
# 3. 安装系统依赖
brew install ffmpeg # macOS
brew install yt-dlp # 可选
# Ubuntu: sudo apt-get install -y ffmpeg
# Arch: sudo pacman -S ffmpeg yt-dlp
# 4. 注册技能到 Agent
mkdir -p ~/.claude/skills
ln -sfn ~/Developer/video-use ~/.claude/skills/video-use # Claude Code
# 或 Codex: ln -sfn ~/Developer/video-use ~/.codex/skills/video-use
# 5. 配置 ElevenLabs API Key
cp .env.example .env
# 编辑 .env 填入 ELEVENLABS_API_KEY=...
也可使用一键 Setup Prompt(粘贴到 Claude Code 等 Agent 中自动完成安装)。
video-use/
├── README.md # 项目说明
├── SKILL.md # 核心技能定义(12 条硬规则 + 完整工作流)
├── install.md # 安装指南
├── pyproject.toml # Python 项目配置
├── LICENSE # MIT 许可证
├── .env.example # 环境变量模板
├── poster.html # 项目展示海报
├── static/ # 静态资源
├── helpers/ # 核心脚本工具
│ ├── transcribe.py # 单文件转录(ElevenLabs Scribe)
│ ├── transcribe_batch.py # 4 线程并行批量转录
│ ├── pack_transcripts.py # 转录打包为 takes_packed.md
│ ├── timeline_view.py # 按需可视化(胶片条+波形+词标签)
│ ├── render.py # 渲染管线(EDL → final.mp4)
│ └── grade.py # 调色引擎(预设 + 自动分析)
└── skills/
└── manim-video/ # Manim 动画技能(3Blue1Brown 风格)
└── SKILL.md
| 模块 | 功能 | 输入 | 输出 |
|---|---|---|---|
| transcribe.py | 单文件转录,调用 ElevenLabs Scribe,提取 16kHz 单声道音频,逐词级时间戳 + 说话人分离 + 音频事件标记 | 视频文件 | transcripts/<name>.json |
| transcribe_batch.py | 4 线程并行批量转录,自动跳过已缓存文件 | 视频目录 | 多个 transcripts/<name>.json |
| pack_transcripts.py | 将转录 JSON 打包为短语级 markdown,按 0.5s 以上静音或说话人切换断句 | transcripts/*.json |
takes_packed.md(约 12KB) |
| timeline_view.py | 按需生成时间范围的可视化合成图(胶片条 + 波形 + 词标签 + 静音阴影) | 视频 + 时间范围 + 转录 | PNG 图片 |
| render.py | 完整渲染管线:分段提取 → 调色 → 无损拼接 → 叠加层 → 字幕 → 响度归一化 | edl.json |
final.mp4 / preview.mp4 |
| grade.py | 调色引擎:预设模式 + 自动分析模式(每段采样分析亮度/对比度/饱和度,±8% 修正) | 视频 + 预设/自动 | 调色后视频 |
transcribe.py)def call_scribe(audio_path, api_key, language=None, num_speakers=None):
data = {
"model_id": "scribe_v1",
"diarize": "true", # 说话人分离
"tag_audio_events": "true", # 音频事件标记
"timestamps_granularity": "word", # 逐词级时间戳(硬规则8)
}
with open(audio_path, "rb") as f:
resp = requests.post(
SCRIBE_URL,
headers={"xi-api-key": api_key},
files={"file": (audio_path.name, f, "audio/wav")},
data=data, timeout=1800,
)
return resp.json()
关键设计:使用 timestamps_granularity=word 获取逐词级时间戳,确保剪辑精度达到词级边界;启用 diarize 和 tag_audio_events 为 LLM 提供丰富的编辑信号(如 (laughter), (applause), (sigh) 等音频事件标记)[1]。
render.py)def extract_segment(source, seg_start, duration, grade_filter, out_path, ...):
# 30ms 音频淡入淡出(硬规则3:防止剪辑点爆音)
fade_out_start = max(0.0, duration - 0.03)
af = f"afade=t=in:st=0:d=0.03,afade=t=out:st={fade_out_start:.3f}:d=0.03"
# HDR→SDR 色调映射(自动检测 HLG/PQ 源)
vf_parts = []
if is_hdr_source(source):
vf_parts.append(TONEMAP_CHAIN) # zscale+tonemap 链
# 竖屏视频自适应缩放
portrait = is_portrait_source(source)
scale = "scale=-2:1920" if portrait else "scale=1920:-2"
cmd = ["ffmpeg", "-y", "-ss", f"{seg_start:.3f}", "-i", str(source),
"-t", f"{duration:.3f}", "-vf", vf, "-af", af, ...]
关键设计:每段独立提取并编码(硬规则2),避免全局滤镜图导致的双重编码;自动检测并处理 HDR 源(HLG/PQ)和竖屏方向,确保跨素材类型兼容 [1]。
grade.py)def auto_grade_for_clip(video, start=0.0, duration=None):
stats = _sample_frame_stats(video, start, duration) # 采样10帧分析
y_mean, y_range, sat_mean = stats["y_mean"], stats["y_std"]*4, stats["sat_mean"]
# 所有调整限制在 ±8% 内,目标:"干净而不像调过色"
if y_range < 0.65: # 画面偏平→轻微对比度提升
contrast_adj = 1.03 + 0.05 * (1 - (y_range-0.50)/0.15)
if y_mean < 0.42: # 偏暗→gamma 提升
gamma_adj = 1.02 + 0.08 * (1 - (y_mean-0.30)/0.12)
filter_string = f"eq=contrast={contrast_adj:.3f}:gamma={gamma_adj:.3f}:saturation={sat_adj:.3f}"
return filter_string, stats
关键设计:基于 ffmpeg signalstats 滤镜采样分析,数学驱动而非视觉判断,所有修正有界(±8%),不引入创意性色彩偏移,确保输出"干净而不像调过色" [1]。
pack_transcripts.py)def group_into_phrases(words, silence_threshold=0.5):
# 在 >=0.5s 静音或说话人切换处断句
for w in words:
if w["type"] == "spacing" and (w["end"] - w["start"]) >= silence_threshold:
flush() # 输出当前短语
if speaker != current_speaker:
flush() # 说话人切换,断句
输出格式示例:[002.52-005.36] S0 Ninety percent of what a web agent does is completely wasted.
这是 LLM 编辑决策的主要阅读视图——约 12KB 的文本文件,让 LLM 通过"阅读"而非"观看"来完成视频编辑决策 [1]。
| 场景 | 说明 |
|---|---|
| 口播/Vlog 博主 | 批量去除填充词(umm/uh)、口误、重复句及静默死区,快速出片 |
| 知识/教程 UP 主 | 讲错重录无需手动剪辑,AI 自动拼接正确片段 |
| 产品/运营团队 | 同一套素材快速生成不同风格宣发短片(不同调色、字幕、动画) |
| 开发者/极客 | 将视频剪辑纳入 AI Agent 工作流,结合 Claude Code 实现自动化 |
| 采访/纪录片 | 自动识别说话人,按问答结构组织剪辑 |
| 旅行/活动视频 | 混剪素材,自动添加动画叠加和背景音乐 |
project.md)持久化。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。