リールを編集する
これは、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.py | references/ejemplo-whatsapp.reel.json |
| 2 · フレーズ | 下部に大きな白いフレーズ(内容は半透明)、キーワードをピル型に、インラインとフローティングアイコン、白いカードと全画面グラフィックのショットは少数。 | build_frases.py | references/estilo-frases.md |
| 3 · シネマ | 黒背景の16:9シネマスコープストリップ内の横長クリップ(ストリップはクリア)、暖色、スローズーム、顔の両側に小さな小文字の字幕、最後の単語を大文字で大きく表示。クローズアップや感情的な動画向け。 | cut_cine.py + build_cine.py | references/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にまだある場合)から再生成します。
音楽
動画に音楽は入れないでください。ユーザーは公開時に音楽を追加します。
...
[翻訳対象外]