ビデオエディター
1つのスキル、3つのパート。このファイルを読み、次にエンジンルールと該当するプリセットの1つを、映像に触れる前に読んでください。
| パート | 読む場所 | 内容 |
|---|---|---|
| エンジン | engine/ENGINE.md、engine/helpers/ | 文字起こし(Scribe)、takes_packed.md、EDL、render.py、grade.py、timeline_view.py、12のハードルール、ask→confirm→execute→self-evalループ。browser-use/video-use (MIT) をベースに改変。 |
| Instagramプリセット | presets/instagram/PRESET.md | 縦1080x1920:セーフゾーン、Reelのテンポ、キャプションスタイル(scripts/ig-captions.py)、タイトルフォント(assets/fonts/)、カラーグレードルール、フリーサウンドルール |
| YouTubeプリセット | presets/youtube/PRESET.md | 16:9 / 4K:カットステージ(ペーパーカット、タイトニング、スライバー、エッジ監査、デッドエア)、HyperFramesコンポーザーとその約40フォーマットライブラリ、カメラ、サウンド、Bロール、Tella、アセンブリ、ベリファイ。WeAreNoCode youtube-editキットを改変。オプション、バンドルされていません(presets/youtube/README.md)。PRESET.mdがない場合はエンジン独自のカットルールを使用。 |
| 共有 | shared/ | luts/(Cine_TealOrange、Cine_Film、Cine_Moody、AppleLog_to_Rec709、AppleLog_Cine_*;make_luts.pyで再構築)、sfx/(効果音、-3 dBFS、manifest.json)、music/(楽曲)、tools/(build-manifest.py、カットツール)、img/ |
スクリプトが先: ユーザーがまだスクリプトを持っていない場合、またはフック、アイデア、キャプションを求めてきた場合は、script-writerスキルを使用してください。そのスクリプトの最後には、このスキルが実行するエディターノートが含まれています。
どのプリセットを使うか
| リクエスト | 使用するプリセット |
|---|---|
| Instagram、Reel、ストーリー、TikTok、Shorts、縦動画、または縦動画でプラットフォームが指定されていない場合 | Instagramプリセット(カットステージ、フォーマット、カメラ、サウンドはYouTubeプリセットから借用;その部分は明示) |
| YouTube、フック、長尺、16:9 / 4K、Tellaチュートリアル、セクションのアセンブリング | YouTubeプリセット |
| その他(モンタージュ、旅行、インタビュー、一般的な16:9編集) | エンジン単体、およびshared/の見た目とサウンド;該当する場合はプリセットルールを流用 |
| ハイライトする画面収録 | 投稿先のプリセット:領域にズーム、残りを暗くまたはぼかし、単語にボックスまたは下線、クリック音とタイピング音、個人情報をぼかし;Reelの場合は、収録を電話またはブラウザのフレームに配置するか、重要な部分にトリミング |
不明な場合:一度だけ「これはInstagramですか、それともYouTubeですか?」と尋ねてください。
パス(すべてのコマンドでこれらを使用)
VE=~/.claude/skills/video-editor; VU="$VE/engine"; VU_PY="$VE/.venv/bin/python"
IG="$VE/presets/instagram"; YT="$VE/presets/youtube"; SK="$YT"; SHARED="$VE/shared"
すべての出力は <footage folder>/edit/ に配置されます(エンジンのハードルール12);$VE 内には、ルール、LUT、共有アセットを意図的に保存する場合を除き、書き込まないでください。
すべてに共通するハードルール
- 文字起こしは有料(Scribeクレジット)。 ユーザーが映像を渡し、編集を依頼した場合にのみ文字起こしを行ってください。トランスクリプトはファイルのステムごとにキャッシュされます;フラットカットのキャッシュされたJSONは、再カット後に削除してください。
- 戦略の前に実行しない: 素材を説明し、計画(プリセット、キャプションスタイル、見た目、音楽、長さ)を提案し、了承を待ってください。
- キャプションと字幕は最後に追加、すべてのオーバーレイの後に。
- ビデオごとに1回だけグレーディング、抽出中はセグメントごと;肌を保護;before/afterフレームを確認。
- レンダリングされたファイルを検証(すべてのカット位置のフレーム、ラウドネス-14 LUFS、再生時間)してからユーザーに見せてください。
- Pythonヘルパーは
$VU_PYで実行;システムのpython3にはnumpyがありません。
カットの種類
shared/references/cuts.md:10種類のカット(カット、ジャンプカット、マッチカット、Jカット、Lカット、フェード、ディゾルブ、アクションカット、クロスカッティング、スマッシュカット)と、それぞれを使用するタイミング、およびそれを実行するツール(shared/tools/)。両方のプリセットとシネマティックスキルがこれを参照します。
モーショングラフィックス
shared/references/motion-graphics.md:すべてのアニメーションがチェックされる7つの品質ルール、参照の入手先、学習ループ(参照→数値→テンプレート→ノート→保存)、およびテンプレートトラッカー。アニメーションを作成する前にこれを読んでください。ハンドビルドのエフェクトを作成する前に、HyperFramesレジストリを検索してください。
レンダリングラダー(常に、すべてのビデオで)
- 720pでレビューレンダリング(高速;ユーザーが視聴し、フィードバックを与える用):
エンジン
render.py … --draft(720x1280 / 1280x720)、HyperFramesではコンポジションのコピーを720幅で、またはデフォルトで-o review.mp4としてscale=720:-2を指定してrender … --quality draft;キャプションはig-captions.py --width 720 --height 1280。自己評価はこのファイルに対して実行されます。 - ユーザーがレビューを承認した後にのみ4Kで最終レンダリング(未処理のノートがない場合):
エンジン
render.py … --uhd(縦2160x3840 / 横3840x2160、CRF 18)、HyperFramesrender … --resolution portrait-4k --quality high(またはlandscape-4k;1080x1920のコンポジションが2x DPRでレンダリングされるため、テキストとグラフィックスは真にシャープになります)、キャプションig-captions.py --width 2160 --height 3840(同じレイアウト、拡大)、音楽/ラウドネスマスタリングは通常通り(-14 LUFS)。検証:ffprobeで2160x3840、BT.709タグ、再生時間がレビューと一致することを確認。 - 両方を並べて納品:
<project>-4k.mp4(マスター、アップロード/YouTube/アーカイブ用)と<project>-1080.mp4(4Kマスターからscale=1080:-2:flags=lanczosで作成された高ビットレートの1080x1920コピー、約20 Mb/s)。ユーザーに正直に伝えてください:InstagramはReelを最大1080x1920で再生し、すべてのアップロードを再エンコードするため、4Kにすることでエンコーダに最もクリーンなソースを提供できます(また、YouTube/TikTok/将来の再利用をフル品質で維持するため)。Instagramの設定>メディア品質>「最高品質でアップロード」をオンにするよう促してください。1080pで撮影された映像は4Kマスターでアップスケールされます(新しいディテールは追加されません);その場合はその旨を伝えてください。最終版の後に修正が入った場合は、再度720pレビュー、その後4Kとなります。
マシンセットアップ(install.sh がリポジトリルートでほとんどの処理を行います)
| ツール | 状態 | 確認方法 |
|---|---|---|
| ffmpeg フルビルド(libass、zscale、lut3d) | ffmpeg-full が ffmpeg にリンクされていること | `ffmpeg -filters |
| Python環境 | $VE/.venv(requests、numpy、pillow、librosa、matplotlib) | cd $VE && uv sync |
| ElevenLabsキー | $VU/.env(モード600) | curl -s -o /dev/null -w '%{http_code}' -H "xi-api-key: $(sed -n 's/^ELEVENLABS_API_KEY=//p' $VU/.env)" https://api.elevenlabs.io/v1/user → 200 |
| Node + HyperFrames CLI | Node 26、hyperframes グローバル | hyperframes doctor |
| HyperFramesエージェントスキル | CLIにより独自のスキルとしてインストール(hyperframes、hyperframes-core、-animation、-keyframes、-registry、media-use、...) | hyperframes skills check;コンポジション契約のためにこれらを読む |
| auto-editor、yt-dlp、Chrome | インストール済み | auto-editor --version、yt-dlp --version |
| YouTubeプリセットテスト(インストールされている場合) | すべてパス | cd $YT/scripts && $VU_PY -m unittest tests |
スキルをあなただけのものに保つ
- 「これをスキルに保存」: ノートを、それが属する場所に1つのプレーンなルールとして書き込んでください:Instagram限定 → Instagramプリセット;YouTube限定 → YouTubeプリセット;両方 → YouTubeプリセットの共有セクション(Instagramプリセットはそこを参照します)、またはルーティングやセットアップに関する場合はこのファイル。新しいルールが矛盾する場合は古いルールを置き換え、両方を保持しないでください。
- 新しい見た目:
shared/luts/make_luts.pyのLOOKSを編集し、$VU_PYで実行し、Instagramプリセットのカラーテーブルに行を追加します。新しいキャプションスタイル:キャプションテーブルに行を追加+ig-captions.pyのSTYLESにエントリを追加。 - エンジンアップデート: 上流の https://github.com/browser-use/video-use をどこかにクローンし(
git pull)、diff -r <clone>/helpers $VU/helpersを比較し、変更を手動でコピーしてください;エンジンのコピーにはENGINE.mdのみにローカルパスの編集があります。