Skill 安装
多 Agent 安装npx skills add https://github.com/browser-use/video-use --skill video-use
使用 npx skills 快速安装,支持将 Skill 添加到多个兼容的 AI Agent。
Skill 调研报告
browser-use/video-use#video-use
Skill 更新日志
版本列表
无版本号
render:短语感知字幕,字幕文件缺失时报错;skill:声音、字体、critic 环节(#183)
字幕:build_master_srt 使用固定的 2 词配对,会在停顿处拆分
("DOES IS")并闪现 0.18 秒的字幕("WHAT A")。chunk_words 现在会在
标点处和 >= 0.3 秒的停顿处断句,并将过短的字幕扩展到最多 3 个词。
字幕路径:EDL 的 "subtitles" 路径若无法相对于 EDL 目录解析,会打印警告
并在无字幕的情况下渲染。现在它还会尝试当前目录,然后以错误退出。
SKILL.md:音乐/音效规则、逐段响度检查以及自评估中的 critic 子代理、
字体加载断言,以及作为完整示例的 "show the edit" 钩子。
Co-authored-by: Claude Opus 5.5 (1M context)
无版本号
transcribe:选择音轨,并拒绝上传静音音轨(#134)
* feat(transcribe):选择音轨并拒绝上传静音
extract_audio 运行时没有 -map,因此 ffmpeg 应用了其默认流选择
并只取了一条音轨——第一条。多音轨录制是屏幕录制的常见情况:OBS 将应用程序写入音轨 0,
将麦克风写入音轨 1。转写此类文件会上传应用程序音频
并悄无声息地丢弃旁白。
--audio-track 选择流,从零开始计数,默认为 0,因此现有的
单音轨运行保持不变。具有多条音轨的文件会在详细输出中说明,
因为默认值对其中一些是正确的,对另一些则是错误的。
提取出的 wav 在发送前还会检查电平。峰值低于
-60 dBFS 意味着该音轨是静音,这实际上意味着选错了音轨,
而 Scribe 对静音和语音收费相同。错误信息会列出
音轨数量并指向该标志。
* fix(transcribe):按音轨设置缓存键,分块扫描峰值,命名音轨
对 #134 的审查发现了四个问题。
转写缓存仅以视频文件名为键,而 transcribe_one 在查看 audio_track 之前
就在缓存命中时返回。因此在选错音轨运行后使用 --audio-track 1 重新运行,
会返回该标志本应替换的那份转写。现在音轨会加入文件名,
而音轨 0 保留旧名称,因此现有转写仍然有效。
peak_dbfs 使用 readframes(getnframes()) 读取整个片段并将其复制到
数组中,因此一个两小时的 16 kHz 单声道文件会占用 230 MB 两次,
而批处理模式会同时运行多个。现在它改为以 64k 帧分块扫描;
在真实录制上测量,峰值与整文件版本相同。
"try --audio-track" 提示在 0 和 1 之间切换,因此在具有三条
音轨的文件上它可能指向另一条静音音轨。现在它会列出存在的音轨:
"The file has 3 audio tracks; try --audio-track 0 or 2."
该标志的帮助文本说 ffmpeg 否则会取音轨 0。实际上它会应用其
默认流选择,即选择声道数最多的音轨。
* fix(transcribe):在单文件和批处理模式之间共享一个转写路径
对 #134 的再次审查:前一次提交将音轨加入 transcribe.py 中的缓存键,
却让 transcribe_batch.py 仍检查 {stem}.json。因此批处理模式
使用 --audio-track 1 时会把具有音轨 0 转写的文件视为
已缓存并跳过,这使该标志失效,并且永远无法识别它刚刚写入的
{stem}.track1.json,因此每次运行都会重新上传并重新计费该文件。
两者现在都调用 transcript_path(),因此它们不会再出现偏差。
在一个包含一个视频和一份音轨 0 转写的目录上验证:默认
运行报告 "1 cached, 0 to transcribe",使用 --audio-track 1 的同一运行
报告 "0 cached, 1 to transcribe" 并继续进入静音防护。
无版本号
fix(render):在竖屏检测中考虑旋转元数据(#137)
* fix(render):在竖屏检测中考虑旋转元数据
在读取编码尺寸的同时读取 display-matrix 旋转和旧式 rotate 标签。对四分之一圈旋转交换尺寸,以便 ffmpeg 自动旋转后的滤镜输入使用正确的缩放轴。
* fix(render):仅信任 display rotation 侧数据
忽略不能保证 ffmpeg 自动旋转的普通 rotate 标签,并断言 ffprobe 查询继续请求 display-matrix 旋转。
---------
Co-authored-by: Anton Sidorov aka anticodeguy
无版本号
fix(render):默认保留源帧率;添加 --fps 覆盖(#55)
* fix(render):默认保留源帧率;添加 --fps 覆盖
extract_segment 硬编码了 `-r 24`,因此每次渲染都被强制为 24 fps,
无论源如何。这会静默地对 30/60 fps 素材进行降采样
(例如以 60 fps 录制的 OBS 屏幕/摄像头捕获),并与该 skill 声明的
"除非另有要求,否则匹配源" 原则相矛盾。此前没有
CLI 选项可以更改它。
使用 ffprobe 探测源的 r_frame_rate 并将其原样传递给
ffmpeg(因此像 30000/1001 这样的分数帧率可以保留而无需
舍入),仅在无法确定帧率时回退到 24。
添加 `--fps N` 标志以在需要时强制指定帧率。
行为变更:渲染现在默认保留源帧率,
而不是始终生成 24 fps。
Co-Authored-By: Claude Opus 4.8 (1M context)
* fix(render):每次渲染解析一个帧率,而不是每个片段
回应审查反馈(由 cubic 识别):在 extract_segment 内部探测帧率
意味着混合帧率的多源 EDL(例如一个
30fps 和一个 60fps 源)会以不同帧率编码片段。无损
拼接(`-c copy`)要求每个片段共享同一帧率,因此这会破坏
多源编辑的拼接。
在 extract_all_segments 中一次性解析出单一输出帧率并传递给
每个片段:显式 --fps 优先,否则保留第一个源的
帧率(如果无法探测则回退到 24)。单源渲染仍保留
源帧率;多源渲染保持同质且拼接安全。
extract_segment 现在接受已解析的 `rate` 字符串(在没有 rate 独立调用时
仍会探测自己的源)。
Co-Authored-By: Claude Opus 4.8 (1M context)
* fix(render):强化源帧率处理
对可变帧率输入优先使用 avg_frame_rate,回退到 r_frame_rate,并接受十进制或分数形式的 --fps 覆盖。添加针对验证、探测和统一多源渲染帧率的专项测试。
* fix(render):在分数解析前验证 fps
将 FPS 输入限制为有界的 ffmpeg 兼容数字和分数形式,规范化接受的值,并覆盖显式覆盖、回退行为和探测失败。
* fix(render):保持规范 fps 解析幂等
拒绝超出 FFmpeg AVRational 分量边界的约简 FPS 分数,确保每个被接受的规范帧率都能再次安全解析。
---------
Co-authored-by: Anton Sidorov aka anticodeguy
Co-authored-by: Claude Opus 4.8 (1M context)
无版本号
合并拉取请求 #91,来自 ShawnPana/patch-1
更新 README.md
无版本号
更新 README.md
无版本号
合并拉取请求 #34,来自 browser-use/add-bux-video-use-note
添加 Browser Use Box 编辑说明
无版本号
添加 Browser Use Box 编辑说明
无版本号
fix(render):为竖屏视频源保留方向(#29)
横屏视频按宽度缩放(scale=W:-2),这对
水平素材有效,但会挤压竖屏/垂直片段(高度 > 宽度),
因为高度成为受约束的维度。
添加了 is_portrait_source(),它使用 ffprobe 检测 h > w 的情况,然后
将缩放滤镜切换为 scale=-2:H,以便竖屏源改为按
高度缩放,从而在整个流程中保持正确的 9:16 方向。
Co-authored-by: Claude Sonnet 4.6
无版本号
fix(pack_transcripts):以 UTF-8 写入输出以避免 cp1252 编码错误(#10)
在 Windows 上,Path.write_text() 默认使用系统区域设置编码
(cp1252),无法编码输出中使用的 Unicode 字符
(例如 >= U+2265、-> U+2192)。传入 encoding="utf-8" 可确保文件
在所有平台上正确写入。
无版本号
添加 MIT 许可证(#32)
无版本号
docs:添加 HyperFrames 动画选项(#13)
无版本号
fix(subtitles):将 MarginV 提高到 90 以避开垂直安全区(#5)
随附的粗体叠加字幕样式使用 MarginV=35,这会将
字幕基线放在靠近底边的位置。在 1080×1920 垂直输出
(TikTok / IG Reels / YouTube Shorts / Snap)上,这正好位于
平台 UI 安全区内——字幕、用户名、音乐滚动条和右侧栏
操作大约覆盖画面底部 ~25–30%。上传后字幕会被
UI 裁剪或遮挡。
提高到 MarginV=90,使基线落在距底部约 30% 的位置,
避开每个主要垂直平台上的 UI。添加注释记录
理由,以免未来的编辑悄悄改回去。
Co-authored-by: Claude Opus 4.7 (1M context)
无版本号
fix(render):将 HLG/PQ 源色调映射到 Rec.709 SDR(#6)
iPhone(以及许多无反相机)默认输出 HDR——iPhone 为 HLG,
其他为 PQ。当前流程通过 pix_fmt=yuv420p 转换位深,
但在输出上保留了 HDR 传输元数据(arib-std-b67 / smpte2084)。
遵循该元数据的播放器——屏幕录制器、几乎所有
社交上传的重新编码路径(TikTok、IG、YouTube、X)——会将 8 位
值解释为 HDR,并显示压暗、过饱和的颜色。
macOS 上的 QuickTime 恰好在播放时进行色调映射,这在本地
掩盖了该 bug。屏幕录制和上传的渲染则不能。
修复:
- 通过 ffprobe color_transfer ∈ {smpte2084, arib-std-b67} 检测 HDR 源。
- 当为 HDR 时,在 vf 图中前置 zscale → tonemap=hable → bt709 链,
以便提取产生干净的 Rec.709 SDR,并带有正确的元数据。
- 对 SDR 源(大多数现有素材)为空操作。
在模块级暴露 `is_hdr_source()` 和 `TONEMAP_CHAIN`,以便下游
脚本可以复用该检测。
在 iPhone HLG 1080×1920 HEVC 素材上端到端验证:
之前:输出 pix_fmt=yuv420p,color_transfer=arib-std-b67(损坏)
之后:输出 pix_fmt=yuv420p,color_transfer=bt709(干净的 SDR)
Co-authored-by: Claude Opus 4.7 (1M context)
无版本号
添加 install.md 和一键粘贴设置提示(#9)
镜像 harnesless 入门模型,以便 Claude Code、Codex、Hermes、
Openclaw 等可以通过单个粘贴的提示安装 video-use。
install.md 处理克隆、依赖、ffmpeg、按代理注册 skill,
并引导用户粘贴他们的 ElevenLabs API 密钥。
Co-authored-by: Claude Opus 4.7 (1M context)
无版本号
向 readme 添加 what-it-does 部分
Co-Authored-By: Claude Opus 4.6 (1M context)
无版本号
精简 readme——先讲 get started,收紧 how-it-works
Co-Authored-By: Claude Opus 4.6 (1M context)
无版本号
重命名为 video-use + readme 主视觉
将包从 video-editor 重命名为 video-use。向 README 添加横幅截图
和独立的时间线视图 SVG。
Co-Authored-By: Claude Opus 4.6 (1M context)
无版本号
海报
无版本号
自评估循环
无版本号
自动评分 + 自动声音
无版本号
v1
暂无评论...