Communitygithub.com

Reel編集

ユーザーのリール(Instagram用縦型カメラトーク動画)を、承認済みフローに従って編集します。ローカルWhisperによる文字起こし、無音・フィラーワード・テイクの削除、フックの大文字表記、2~3秒ごとのアニメーショングラフィック、実際のブランドロゴ、1行の字幕、調整済み効果音、-14 LUFSの音声、HyperFramesによるレンダリングを行います。

Reel編集 とは?

このスキルは、ユーザーがInstagram用に撮影した縦型リール動画(カメラに向かって話す形式)を編集するためのものです。ユーザーがWhatsAppで承認したリール(`references/ejemplo-whatsapp.reel.json`)と同じスタイルと品質で出力することを目的としています。このスキルはClaude CodeとHyperFrames CLI上で動作し、`faster-whisper`によるローカル文字起こし、無音/フィラーワード/不要テイクの自動削除、キャッチーなフック、2~3秒ごとに切り替わるアニメーショングラフィック、実際のブランドロゴ(Simple Iconsなど)、1行の字幕、調整済み効果音、音声の-14 LUFSノーマライゼーション、HyperFramesによるレンダリングという一連のワークフローを実行します。ユーザーは「編集」「カット」「字幕」「仕上げ」といった依頼をするたびに、このスキルを呼び出す必要があります。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Alexandrevnc/editar-reel/tree/HEAD

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

リールを編集する

これは、WhatsAppのリール(references/ejemplo-whatsapp.reel.json)で承認済みのフローです。 目的は、次のリールも同じスタイル、同じ基準、同じチェックで、ユーザーが再度説明しなくて済むようにすることです。ユーザーにはスペイン語で、不必要に専門用語を使わずに話しかけてください。

最初に: プロフィールとインストール

~/.claude/skills/editar-reel/perfil.json を読み込んでください(ユーザー名、ブランド名、クロージングロゴ、クリップの保存場所)。ユーザーを名前で呼び、ステップ1でそのクリップフォルダーを使用します。 perfil.json が存在しない場合、または環境にツールが不足している場合、このMacでは初めての使用です: 編集を行う前に、INSTALAR.md(すべてをインストールしてプロフィールを作成する)に従ってください。

環境(install.sh が準備します。INSTALAR.md を参照)

  • HyperFrames CLI: ~/.npm-global/bin/hyperframes(テレメトリー無効)。常に PATH="$HOME/.npm-global/bin:$PATH" HYPERFRAMES_NO_TELEMETRY=1 HYPERFRAMES_SKIP_SKILLS=1 をエクスポートします。Claudeのシェルは ~/.zshrc を読み込みません。
  • faster-whisper: ~/.venvs/whisper/bin/python(av<16 付き。新しいPyAVはfaster-whisperを壊します)。
  • FFmpeg: /opt/homebrew/bin にあります。システムの python3(3.9)はnumpyを使わないスクリプトに使えます。
  • 効果音ライブラリ: ~/Movies/Reels/_sfx/。元の13個(whoosh_1/2, pop_1/2, tick, ding, message, counter, typing, clock, slide, hit, riser)はグラフィックと一緒に鳴ります。Appleのサウンドスタイル: 短く、クリーンで、ソフト。さらに約45個(インパクト、ウィッシュ、レジスター、クリック、iPhoneなど)を手動で使用できます。カタログと各効果音の使用タイミングは references/sfx.md を参照。
  • このスキルのスクリプト: SK=~/.claude/skills/editar-reel/scripts
  • クロージングロゴ: perfil.json のもの(cierre)。vinagre.techのベクターロゴは assets/vinagre-tech/ にあります。他のブランドのロゴは assets/marca/ に保存されます(INSTALAR.md を参照)。

スタイル

ユーザーはスタイルを指定してリールを依頼します(「スタイル2で編集して」など)。指定がない場合は スタイル1 を使用します。 すべてのスタイルは以下のフロー(文字起こし、カット、QA、サウンド、マスタリング)を共有します。ステップ5~6が変更されます。 すべてのスタイルは、ブランドのクロージングロゴ(perfil.json のもの、1.6秒、白背景、scripts/outro.py)で終わります。動画が突然終わることはありません。デフォルトで表示されます(プロフィールで "cierre": null の場合は除く)。reel.json で "outro": null とすると削除され、"outro": {"bg": "#000"} で背景色を変更できます。

スタイル説明スクリプトリファレンス
1 · カード2~3秒ごとに上部の濃いカード内にグラフィック付きの見出し + 下部に小さな1行の字幕。build.pyreferences/ejemplo-whatsapp.reel.json
2 · フレーズ下部に大きな白いフレーズ(内容は半透明)、キーワードをピル型に、インラインとフローティングアイコン、白いカードと全画面グラフィックのショットは少数。build_frases.pyreferences/estilo-frases.md
3 · シネマ黒背景の16:9シネマスコープストリップ内の横長クリップ(ストリップはクリア)、暖色、スローズーム、顔の両側に小さな小文字の字幕、最後の単語を大文字で大きく表示。クローズアップや感情的な動画向け。cut_cine.py + build_cine.pyreferences/estilo-cine.md

モーションv2(2026年11月2日承認、スタイル1でデフォルト): references/motion-reglas.md のルール(見出しの回転、桁ごとに回転する数字、グラフィック全体の出現)。以前に作成されたリールは、reel.json に "anim": 1 が設定されており、修正時に既に承認されたモーションが変更されないようになっています。

スタイル1と2は、さらに全画面モーションショット(Macの端末、数字付きドットグリッド、カードの軌道)を含めることができ、reel.json の "motion" で指定します。いつ、どのように使用するかは references/motion.md を参照してください。

ユーザーがスタイルの変更を要求し、それを承認した場合は、その変更をスクリプトとそのスタイルのシートに保存してください。新しいものを欲しがった場合は、承認済みのスタイルを変更するのではなく、新しいスタイル(4、5...)を作成してください。リール全体を組み立てる前に、まず約10秒のサンプル(reel.json の "sample_end"、スタイル2と3)を作成してください。

各リールの構造

~/Movies/Reels/<short-name>/
  reel.json            このリール固有の設定(あなたが作成。形式は references/reel-json.md)
  work/                文字起こし、カット、QAフレーム、中間レンダリング
  proyecto/            HyperFramesプロジェクト(生成された index.html + assets/)
  reel-<name>.mp4      最終成果物
  portada-<name>.jpg   Instagram用のサムネイル(ステップ8b)

フロー

1. クリップの特定

通常は perfil.json の clips フォルダー(デフォルトは ~/Movies/CapCut/)またはそのサブフォルダーにあります。候補が複数あり、どれかわからない場合は、選択肢(名前、長さ、日付)を提示して尋ねてください。間違ったものを編集すると大きな時間のロスになります。ffprobe で解像度、fps、長さを確認してください。

2. 文字起こし

mkdir -p ~/Movies/Reels/<n>/work
~/.venvs/whisper/bin/python -I $SK/transcribe.py "<clip>" ~/Movies/Reels/<n>/work medium es

src.words.json(単語とタイミング)、fillers.txt(Whisperが「えーと」「あのー」「つまり」などを書き出すように強制するパス。通常は無視されます)、silences.json を作成します。3つのファイルすべてを読んでください。

3. 削除する部分を決定する(あなたの判断で)

  • 繰り返しテイク: フレーズを繰り返したり、始めて途中で切ったりしている場合、最後のテイクを残し、前のテイクは削除します。
  • フィラーワード: fillers.txt に表示され、クリーンな単語リストにないもの。
  • 無音: マークする必要はありません。cut.py が0.2秒以上の無音を削除し、両側に0.07秒の余白を残します。 削除範囲(元の時間)を reel.json の remove に、source とともに記録してください。削除するものがない場合は、"remove": [] とし、その旨を伝えてください(「フィラーワードや繰り返しテイクはありませんでした」と、該当する場合。確認した結果であり、推測ではないことを明確に)。
cd ~/Movies/Reels/<n> && hyperframes init proyecto --example blank --resolution portrait --non-interactive
python3 -I $SK/cut.py ~/Movies/Reels/<n>

HyperFramesプロジェクトを作成し(カットする前: init は proyecto フォルダーが存在しないことを必要とします)、カットを実行し、1080×1920、30fpsで出力し、音声を-14 LUFSにノーマライズして proyecto/assets/cut_norm.mp4 に保存します。新しいタイミングの単語リストは work/cut.words.json に保存されます。

4. フレーミングを確認する

フレームストリップを抽出し(ffmpeg -i proyecto/assets/cut_norm.mp4 -vf "fps=1/5,scale=270:-1,tile=6x1" -frames:v 1 work/contact.png)、顔の位置を特定します。参照リールでは、縦方向に約520~1160ピクセル、右側に空いた壁があります。見出しは頭の上(170~430ピクセルのカード内)、字幕はラベリアマイクの下のシャツの上、イントロロゴは頭の横の壁に配置されています。このクリップのフレーミングが異なる場合は、reel.json の layout と logos の位置を調整してください。

5. reel.json にコンテンツを記述する

references/reel-json.md と references/graficos.md を読んでください。決定事項は以下の通りです:

  • フック(0~2秒): 大文字の2行、黄色いボックスに黒いテキスト。動画が提起する問題を要約する質問や主張。文字通りのフレーズではありません。最初のフレームから表示されます。
  • 見出し: 2~5語。2~3秒ごとに変更。そのセクションでの発言内容を要約し、それぞれがアニメーショングラフィックを持ちます。
  • ロゴ: ツールやブランド名が出てくるたびに、その実際のロゴ(Simple Icons。ない場合は、公式プレスキットのSVGを proyecto/assets/logos/<slug>.svg に)を使用します。架空のロゴや類似のロゴは絶対に使わないでください。
  • 字幕: 小さく、1行、下部。アクティブな単語はアクセントカラーで表示。fixes で、Whisperのエラー(固有名詞、「人々」→「エージェント」など)を修正します。
  • モーションショット(オプション、リールあたり1~2回): Claudeに何かを依頼したり、自動化の手順を説明するとき → terminal。数字を出すとき → dots。年間の利益や損失を計算するとき → months。「これが全部だよ」と言うとき → orbit。クライアントからメッセージが来るとき → notify。収入や結果の数字を言うとき → chart。これらは望まれています。動画に間(ま)を与えます(ない場合は提案してください)。references/motion.md を参照。発言内容を説明する場合にのみ提案し、迷う場合は尋ねてください。
  • 最終的な呼びかけ: 単語を書くように促したり、ブランド名を出したりする場合、その単語を言った瞬間に "graphic": "logo" と sfx_extra の ding を持つ最後のブロック。
  • 文字通りの効果音(オプション): お金に関することを言ったら cash、携帯を置く → iphone_lock、メッセージを書く → phone_typing など、その単語に sfx_extra で追加。references/sfx.md を参照。10秒あたり最大1~2回。ミームはユーザーが頼んだ場合のみ。

6. 効果音を準備し、コンポジションを生成する

python3 -I $SK/prep_sfx.py ~/Movies/Reels/_sfx ~/Movies/Reels/<n>/proyecto/assets/sfx
python3 -I $SK/build.py ~/Movies/Reels/<n>
cd ~/Movies/Reels/<n>/proyecto && hyperframes lint

prep_sfx は各効果音の最初の無音を除去し(そうしないとアニメーションに対して遅れて聞こえる)、長いものをフェードアウトで短くし、ピークを-3 dBFSに均一化します。Riser は最高潮で終わるようにトリミングされます(現在のファイルの0.2~2.0秒)。ファイルが変更された場合、そのエンベロープを確認し、SPEC を調整します。 lint では、nested_structure_needs_subcomposition と timeline_track_too_dense は予期されるものであり、無視します。その他のエラーや警告は修正します。

7. フレーム品質管理(レンダリング前。必ず実施)

各ブロックの中間、アニメーションが完了した時点で1フレームずつ取得します:

hyperframes snapshot --at <hook≈1.0>,<each block: start+1.3>,... --no-end --describe false -o ../qa

それらを1枚のシートにまとめ(ffmpeg -pattern_type glob -i 'qa/frame-*.png' -vf "scale=360:-1,tile=6x2" ...)、それを確認し、疑わしい領域(カードや字幕の実際のサイズに切り抜いて)を拡大します。以下を探して修正します:

  • テキストがカードからはみ出している、または1行に1語だけある。
  • 顔の上に何かがある(すべてのブロックで。カットの1.08倍ズームでも確認)。
  • コントラストが低い(明るい壁に明るいテキスト → 暗い背景が必要)。
  • 字幕がラベリアマイクやシャツのロゴを隠している。
  • グラフィックが理解できない、または見た目がおかしい(最初の head で発生。修正済み)。 修正のたびにスナップショットを再取得します。字幕の前を手が横切るのは避けられません。エラーではありません。

ゴールドスタンダードと比較する。 references/oro/ には、各スタイルの承認済みリールの12フレームシートがあります(estilo1-whatsapp、estilo1-18k、estilo2-fras、estilo3-reto40)。レンダリング(ステップ8)後、新しいリールのシートを python3 -I $SK/hoja.py <reel>.mp4 work/hoja.png で取得し、該当するスタイルのシートと並べて、「どちらがより空っぽで、平坦で、グラフィックが小さいか」を答えてください。新しい方が該当する場合、それが最初に修正すべき点です。ユーザーが、ゴールドスタンダードよりも見栄えの良いリールを承認した場合は、そのシートを references/oro/ に追加してください。

8. レンダリング、オーディオチェック、マスタリング

hyperframes render --fps 30 -o ../work/render_mix.mp4
~/.venvs/whisper/bin/python -I $SK/measure_sfx.py ~/Movies/Reels/<n> ~/Movies/Reels/<n>/work/render_mix.mp4
python3 -I $SK/master.py ~/Movies/Reels/<n>/work/render_mix.mp4 ~/Movies/Reels/<n>/reel-<n>.mp4
  • measure_sfx は、各効果音が音声に対してどのくらいの大きさかを報告します。目標: ヒット -6 dB、ディング -8、メッセージ ≈-8、ポップ/ウィッシュ/スライド -11~-13、チック -14、時計/カウンター/ライザー -16、タイピング -18~-20。いずれかが2 dB以上ずれている場合(例: _sfx のファイルが変更された場合)、sfx_vol で修正し、再レンダリングします。効果音が音声よりも大きいのは重大な問題です。発言内容が聞こえなくなります。
  • master.py は、ビデオには触れずに、リールを-14 LUFS(ピーク -1.5 dB)にします。HyperFramesのミキサーがミックスを約1.8 dB下げ、約-16 LUFSにしてしまうため、これが必要です。
  • 最終成果物を確認します: 1080×1920、30 fps、予想される長さ、-14 LUFS。

8b. サムネイル

python3 -I $SK/cover.py ~/Movies/Reels/<n>

黄色いボックスにフックが入ったクリーンなフレームを、Instagramのプロフィールグリッド(3:4)で表示される領域に中央揃えで配置します。フィードで各動画の内容が一目でわかるようにします。portada-<n>.jpg と work/portada-feed.png(トリミングされた見え方)を出力します。タイトルは中央に配置します(2026年11月2日決定。顔の一部を覆っても構いません。動画内ではフックは頭の上にあります)。確認してください: フレーム("cover": {"at"})は、良い表情で、何も切れていない必要があります。"cover": {"y"} または python3 -I $SK/cover.py <reel> 560 は、別の高さが指定された場合のみ使用します。ユーザーは公開時に「サムネイルを編集 → カメラロールから追加」でアップロードします。

9. 納品

.mp4 とサムネイルの場所を伝え、数行で要約します: どのくらいカットしたか(X秒からY秒へ。何を削除したか)、フック、見出し(または最も代表的なもの)、どのロゴが登場するか、どのような字幕修正を行ったか、品質管理で何を修正したか。あなたの判断で議論の余地があるもの(例: フックが要約であり、文字通りのフレーズではない場合)は、その旨を伝え、変更を提案します。

10. クリーンアップ(ユーザーがリールを承認した場合のみ)

各リールは約150MBの中間ファイルを残し、ディスク容量が不足しがちです。ユーザーがリールが問題ないと確認した場合(それより前ではない: 修正中は必要です)、すべての再生成可能なファイルをゴミ箱(~/.Trash/reel-<n>-intermedios-<date>/。決して rm しない: 復元可能にするため)に移動します: work/*.mp4、work/*.mov、work/*.png、qa/、破棄されたバージョンのリール、index.html が使用しなくなった assets/*.mp4、および index.html が参照していない assets/sfx/*.wav(prep_sfx はライブラリ全体をコピーします。約15MB。修正で別の効果音が必要になった場合は、再実行されます)。保持するもの: reel.json、work/*.json、proyecto/(assets/cut_norm.mp4 と sfx/ を含む)、および最終的な .mp4。これらがあれば、再カットせずに修正できます。移動したデータのサイズと、ゴミ箱を空にすると解放されることを伝えてください。修正時に cut_norm.mp4 がない場合、cut.py が元のクリップ(CapCutにまだある場合)から再生成します。

音楽

動画に音楽は入れないでください。ユーザーは公開時に音楽を追加します。

...

[翻訳対象外]

関連スキル