video-use
browser-use/video-use — 会話で動画を編集する 100% オープンソース Agent Skill · Python + ffmpeg
video-use は、生映像を任意フォルダに置き、Claude Code や Codex などのエージェントと会話するだけで final.mp4 を得る Agent Skill。トーキングヘッド、モンタージュ、チュートリアル、旅行、インタビューなどコンテンツ種別を前提にしない。プリセットや GUI メニューはなく、エージェントが素材を読み、戦略を提案し、ユーザー承認後に編集を実行する。
主な機能: フィラー語・デッドスペースのカット、セグメント単位のカラーグレード、30ms オーディオフェード、字幕焼き込み、HyperFrames / Remotion / Manim / PIL によるオーバーレイアニメーション(並列 sub-agent)、カット境界での自己評価、project.md によるセッション間メモリ。
エージェントは動画ファイルを直接視聴しない。2 レイヤーの派生データから編集判断を行う。
Layer 1 — 常時ロード
ElevenLabs Scribe でソースごとに単語レベルタイムスタンプ・話者分離・音声イベント((laughter) 等)を取得。pack_transcripts.py が全テイクを 約 12KB の takes_packed.md に圧縮。エージェントの主読み取り面。
Layer 2 — オンデマンド
timeline_view.py が任意区間のフィルムストリップ + 波形 + 単語ラベル PNG を生成。曖昧な間・リテイク比較・カット点確認など判断が必要な時だけ呼ぶ。常時スキャン用ではない。
## 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.
| アプローチ | トークン規模 | 問題 |
|---|---|---|
| 全フレーム投入 | 30,000 フレーム × 1,500 トークン ≈ 45M | ノイズだらけで編集精度が落ちる |
| video-use | 12KB テキスト + 判断点の PNG 数枚 | 単語境界・沈黙ギャップからカット候補を導出 |
自己評価はソースではなくレンダリング済み出力の各カット境界(±1.5s)に timeline_view を当て、視覚的ジャンプ・波形スパイク(ポップ)・字幕のオーバーレイ隠れ・PTS ずれを検出。合格するまでプレビューをユーザーに見せない。
ユーザーの映像フォルダ <videos_dir>/edit/ にセッション成果物を集約。スキル本体ディレクトリには書き込まない(Hard Rule 12)。
<videos_dir>/
├── (ソースファイル、未変更)
└── edit/
├── project.md ← セッション間メモリ
├── takes_packed.md ← フレーズ単位トランスクリプト
├── edl.json ← カット決定
├── transcripts/*.json ← Scribe キャッシュ
├── animations/slot_<id>/ ← オーバーレイ生成
├── clips_graded/ ← グレード済みセグメント
├── master.srt ← 出力タイムライン字幕
├── verify/ ← デバッグ PNG
├── preview.mp4
└── final.mp4
SKILL.md と同階層の helpers/ に Python スクリプトが置かれる。スキル登録時はリポジトリ全体を symlink し、相対パス解決を維持する。
| スクリプト | 役割 |
|---|---|
transcribe.py | 単一ファイル Scribe 呼び出し(--num-speakers 任意)。結果キャッシュ。 |
transcribe_batch.py | 4 ワーカー並列転写。マルチテイク向け。 |
pack_transcripts.py | transcripts/*.json → takes_packed.md(沈黙 ≥0.5s でフレーズ分割)。 |
timeline_view.py | 区間のフィルムストリップ + 波形 PNG。判断点専用。 |
render.py | セグメント extract → concat → PTS シフト済み overlay → 字幕 LAST。--preview で 720p 高速。 |
grade.py | ffmpeg フィルタチェーンによるグレード。プリセット + --filter カスタム。 |
各オーバーレイは edit/animations/slot_<id>/ に隔離。エンジンはスロットごとに選択し、並列 sub-agent で生成(Hard Rule 10)。
| エンジン | 向いている用途 |
|---|---|
| HyperFrames | HTML/CSS/GSAP 合成、UI モーション、WebM 透過。Node.js 22+。npx hyperframes。 |
| Remotion | React コンポーネント合成、既存 Remotion ブランド資産。 |
| Manim | 数式・状態機械・グラフ。同梱 skills/manim-video/ を参照。 |
| PIL + ffmpeg | カウンター、タイプライター、シンプルカード。高速反復。 |
以下は「好み」ではなくサイレント障害を防ぐ正しさ。SKILL.md の Hard Rules セクションと一致。
- 字幕はフィルタチェーン最後。先に焼くと overlay が隠す。
- セグメント単位 extract → lossless
-c copyconcat。単一 filtergraph は二重エンコード。 - 全セグメント境界に 30ms オーディオフェード。ポップ防止。
- overlay は
setpts=PTS-STARTPTS+T/TBでフレーム 0 をウィンドウ先頭へ。 - master.srt は出力タイムラインオフセット(
word.start - segment_start + segment_offset)。 - 単語の途中で切らない。Scribe の単語境界にスナップ。
- カット端に 30–200ms パディング(Scribe ドリフト吸収)。
- 単語レベル verbatim ASR のみ。SRT/フレーズモードは禁止。
- ソースごとに転写キャッシュ。ソース未変更なら再転写しない。
- 複数アニメーションは必ず並列 sub-agent。逐次は禁止。
- 戦略確認前にカットを触らない。
- 成果物は
<videos_dir>/edit/のみ。スキル本体に書かない。
- Inventory —
ffprobe、transcribe_batch.py、pack_transcripts.py。必要ならtimeline_viewを 1–2 枚。 - Pre-scan —
takes_packed.mdから言い間違い・スリップ候補を列挙。 - Converse — 素材に応じた質問(固定チェックリストなし)。長さ・アスペクト・グレード・字幕・アニメ要否を収集。
- Propose strategy — 4–8 文で方針提示。ユーザー承認を待つ。
- Execute —
edl.json、並列アニメ、grade.py、render.py。 - Preview —
render.py --preview。 - Self-eval — 出力の境界・先頭末尾・中間サンプルを検査。最大 3 パス。
- Iterate + persist — 自然言語フィードバック、
project.md追記。再転写はしない。
- Audio-first — 候補は単語境界と沈黙ギャップ(≥400ms が最もクリーン)。
- Peaks を残す — 笑い・パンチライン・強調ビート。反応(笑い声)もビートの一部。
- Audio events —
(laughs)等をビート信号として扱う。 - 音声と映像を独立に理由付けしない。両トラックで成立するカットのみ。
{
"version": 1,
"sources": {"C0103": "/path/C0103.MP4"},
"ranges": [
{"source": "C0103", "start": 2.42, "end": 6.85,
"beat": "HOOK", "quote": "...", "reason": "..."}
],
"grade": "warm_cinematic",
"overlays": [
{"file": "edit/animations/slot_1/render.mp4", "start_in_output": 0.0, "duration": 5.0}
],
"subtitles": "edit/master.srt",
"total_duration_s": 87.4
}
install.md が手順の正。概要は以下。
- リポジトリ clone(安定パス例:
~/Developer/video-use) - Python 依存 —
uv syncまたはpip install -e . ffmpeg/ffprobe(必須)、yt-dlp(任意)- エージェントの skills ディレクトリへディレクトリ全体を symlink
- ElevenLabs API キーを
.envに設定(Scribe 転写用)
git clone https://github.com/browser-use/video-use ~/Developer/video-use
cd ~/Developer/video-use
uv sync
brew install ffmpeg
ln -sfn ~/Developer/video-use ~/.claude/skills/video-use
cp .env.example .env # ELEVENLABS_API_KEY=...
シェル権限のあるエージェントに貼り付けて自動セットアップさせる例(README.md より):
Set up https://github.com/browser-use/video-use for me.
Read install.md first to install this repo, wire up ffmpeg, register the skill
with whichever agent you're running under, and set up the ElevenLabs API key.
Then read SKILL.md for daily usage, and always read helpers/ because that's
where the editing scripts live.
映像フォルダでエージェントを起動し、「edit these into a launch video」 のように指示する。出力は常に <videos_dir>/edit/final.mp4。
- GitHub: browser-use/video-use — 本体リポジトリ
- browser-use — 同一組織のブラウザ自律エージェント
- ElevenLabs API Keys — Scribe 転写用
- HyperFrames — HTML/CSS 動画合成
- Remotion — React 動画合成
- Manim — 数式・図解アニメーション
- Browser Use Box — VPS / Telegram 常時稼働向け
出典: README.md · SKILL.md · install.md · helpers/