Communitygithub.com

shaycart/yap-video-skill

トーキングヘッドの「yap」動画を、テンポの良い短尺動画(9:16 Reels/TikTok/Shorts、または16:9)に編集します。トランスクリプト駆動のジャンプカット、フィラーや吃音の除去、顔認識によるズームイン、単語レベルのアニメーションキャプション、サウンドデザイン、ラウドネス調整、QA、公開用コピーの作成を行います。

yap-video-skill とは?

このスキルは、トーキングヘッドの動画(いわゆる「yap」動画)を、短く洗練された短尺コンテンツに編集する強力なAIエージェントスキルです。入力されたトランスクリプトに基づいて、不要な間やフィラー(「えーと」「あのー」など)、吃音、言い間違いを自動的に削除し、視聴者を引きつけるテンポの良い動画に仕上げます。また、顔認識技術を用いて、強調したい箇所で顔部分にズームインする「パンチイン」効果を自動生成します。キャプションは単語レベルでアニメーションし、発話に合わせてハイライト表示されます。サウンドデザイン機能も備えており、効果音やBGMの追加、ラウドネスの調整も行います。このスキルは完全にローカルで動作し、ffmpegとWhisper(音声認識)を使用するため、APIキーは不要です(オプションでElevenLabs Scribeも利用可能)。対応プラットフォームは、Claude Code、Cursor、CodexなどのAIエージェントです。また、このスキルは、YouTubeからの無断動画・音楽の使用など、ライセンス違反を防止するための厳格なルールを実装しています。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shaycart/yap-video-skill/tree/HEAD/skills/yap-video

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

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

ドキュメント

Yap Video Editor

トーキングヘッドの生映像を、タイトでデザインされた短尺動画に変換します。すべてffmpeg + ローカルWhisperでローカル実行されます。APIキーは不要です(ElevenLabs Scribeはオプションの高性能トランスクライバーです)。

セキュリティレビュー済みの以下リソースから合成されました: browser-use/video-use, adukhan98/video-edit, chrislema/videoeditor, zyziyun/video-studio, eyadhussain00-hub/Videoediting (アイデアのみ), AgriciDaniel/claude-shorts, Barty-Bart/motion-graphics, ZiadAbdelkarim/beat-synced-edit, 6missedcalls/video-editing-skill, haidrrrry/claude-remotion-skill, digitalsamba/claude-code-video-toolkit, blixvip/easyedit (アイデアのみ)。

正確な数値は references/params.md にあります。フィルターグラフを構築する前に読んでください。references/pipeline.md は実際の編集から得られた実戦的な実装パターン(カットプランナー、Lカットレンダラー、Pillowタイプオーバーレイ、ステッカー/プロップ、4Kマスター)です。再発明せずにこれに従ってください。

厳格なルール

  1. まず計画し、待機する。 文字起こし後、平易な英語で計画(フック、カットする内容、ズーム/キャプション/SFXのアプローチ、尺、フォーマット)を示し、レンダリング前に承認を得てください。テイストに関する判断(フックの文言、採用する文、キャプションスタイル)は、推奨事項を含む短いメニューとして提示し、黙って選択しないでください。
  2. ソースファイルを上書きしない。 <folder>/edit/ に書き込みます。ユーザーが承認するまで中間ファイルを保持し、その後クリーンアップを提案します(最初にファイルとサイズをリストし、自動削除はしないでください)。
  3. 単語の途中でカットしない。 Whisperの単語タイムではなく、オーディオエンベロープからエッジを見つけてください(Whisperは単語の開始を遅く、終了を早くマークするため、最初と最後の音節が途切れます)。単語開始から最大0.25秒、単語終了から最大0.20秒まで、音声エネルギーがフロア+8 dB以上を維持する範囲で遡り/進み、その後30 msパディング。すべての結合点に15-30 msのオーディオフェードを適用します。
  4. フレーム精度が必要なカットは再エンコードし、-c copy は使用しない (コピーはキーフレームに合わせるため、ずれが生じます)。
  5. キャプションは最後に追加 します。ズームやオーバーレイの後に行うことで、ズームでキャプションが切り取られるのを防ぎます。
  6. 検証する。 レンダリング後、各カット箇所の前後+/-1.5秒のフレーム、コンタクトシート、ebur128 ラウドネス表示を検査します。修正パスは最大3回。その後、残っている問題を報告します。数値で報告します。あなたはオーディオを聞くことはできません。
  7. サードパーティメディア: ユーザー所有、CC0/CC-BY、または生成されたもののみ。YouTubeからの動画/音楽のリッピングは禁止。Claude/Anthropicのログイントークンやその他の認証情報を読み取り、送信、または再利用しないでください。他のリポジトリの .claude/ フック設定をコピーしないでください。
  8. モデル(Whisper ggml-medium は約1.5 GB)のダウンロードやパッケージのインストール前に確認 を取ってください。名前、ソース、サイズを明記します。

パイプライン

0. 取り込みと概要

  • ffprobe で各クリップを確認: 解像度、fps、時間、オーディオ。向きを検出します。
  • 重要なことだけを質問します(短いメニューを使用): ターゲットプラットフォーム/アスペクト、ターゲット尺、雰囲気(Vibes参照)、キャプションスタイル、音楽の有無、必須の文言。ユーザーが「とにかくやって」と言った場合のデフォルト: 9:16、30-60秒、「クリエイター」雰囲気、太字キャプション、軽いSFX、音楽なし。

1. 文字起こし(単語レベル、逐語的)

  • 推奨: mlx-whisper(Apple Silicon)または faster-whisper medium.en/distil-large-v3、単語タイムスタンプ有効。smallではなくmediumを使用: smallは言い直しを落とします。オプション: ElevenLabs Scribe(ユーザーがキーを持っている場合。プロジェクトフォルダにキーを書き込まないでください)。
  • フィラーもトランスクリプトに残します(逐語的)。カットできるようにするためです。トランスクリプトをキャッシュします。
  • Whisperの癖: 長いポーズを1つの単語に飲み込む(数秒続く単語は飲み込まれたポーズ。RMSエンベロープで実際の発話区間を特定します)、ポーズ後に単語の開始が0.2-0.4秒遅れる、無音の末尾で幻覚を見る。実際のコンテンツ終了時点でトリミングします。キャプションのタイミング調整のため、最終セグメントごとに再文字起こしします。
  • 名前や用語を校正し、修正リストを適用します(chat gpt -> ChatGPT)。

2. ストーリーを選ぶ(長いyapの場合)

  • 候補セグメントを0-100でスコアリング: hook*0.30 + coherence*0.25 + emotion*0.20 + value*0.15 + payoff*0.10。強いフック: 大胆/逆説的な主張、好奇心のギャップ、具体的な数字、パターンインタラプト。弱いフック: 「それで今日は~について話したいと思います…」。独立テスト: 「さっきも言ったように」がない、ぶら下がり代名詞がない。
  • 各セグメント15-55秒(最適値25-40)、スコア>=60。開始は単語/文の始まりにスナップ(1.5秒ウインドウ)、終了は文の終わりにスナップ(3秒ウインドウ)+300 msパディング。
  • フックは最後に作成/選択します: テキスト、タイプ、尺を含む約5-12の番号付き候補オープニングを提示します。結果ファーストまたは大胆な主張のコールドオープンがスローイントロに勝ります。最初の1-3秒がすべてを決めます。
  • ワンテイクyapの場合: フックが改善される場合のみ並べ替え。それ以外は話し手の順序を保持します。

3. カット(タイトに)

タイトネスプロファイル(ポーズの圧縮。ポーズは削除ではなく短縮されます):

プロファイル圧縮対象のポーズ保持する間隔
軽め0.80 s0.35-0.70 s
標準0.45 s0.18-0.40 s (文末は0.30)
タイト(yapのデフォルト)0.25 s0.08-0.20 s
  • 検出: 10 msホップのRMSエンベロープ、音声=ノイズフロア+8 dB。フォールバック: silencedetect=noise=-30dB:d=0.5。
  • 削除: えー/あー、吃音と再スタート、繰り返し単語、言い間違い、撮り直し(前のテイクを優先)、スレート/テール、喉ならし(「それで」「要するに」)。意味上のフィラー(「みたいな」「知ってる?」)はオーディオがそれを分離できる場合のみ削除。強調のための意図的な繰り返しは保持します。
  • 信頼度が低い、または曖昧なカット(撮り直し、統合されたフィラー、ASRノイズ)は、自動適用せずにユーザーに確認します。
  • すべての結合を検証 : 各結合箇所をまたぐウインドウを再文字起こしし、意図した単語として読めることを確認します。2-3ラウンドを想定。フルカット後、コンテンツワードを計画と比較。失われたものがあれば失敗とします。
  • 視覚的チェック: 話し手がメモを見下ろす、まばたきの途中、頭の動きの途中などのカットエッジを避ける。頭の動きのエッジではタイトに(<=30 ms)終了。
  • フレーム正確なピース: すべてのピースを全体フレームに量子化(n = round(dur*fps))、それらから出力タイムラインを計画しないと、キャプションがずれます(40カットで約1秒)。
  • Lカット: 映像と音声を別々にレンダリング。新しい行(内部のポーズ圧縮ではない)では、映像カットが音声カットより2フレーム遅れて配置されます。内部の圧縮はハードカットのまま。これにより、視覚的なリップシンクエラーなしにジャンプカットがスムーズになります。
  • 下向き/メモを見る: 話し手がフレーズ間で下を向く部分では、より強く圧縮(0.10秒以上のポーズ、両側0.03秒保持)。発声中の下向きはカットできません。パンチインやステッカー/b-rollで隠します。
  • ユーザーが求める人間らしい瞬間(笑い、反応など)は、生のエッジを持つ保護範囲として保持。正確な秒数が指定された場合のみトリミング(「0:09-0:11をカット」)。
  • ペーシング: 少なくとも1.5-4秒ごとに新しい視覚的イベント(ズーム、キャプション強調、グラフィック、b-roll)が必要。約8秒以上静止フレームを続けない。オプションで本文を1.1-1.25倍速に。約1.3倍以上は不自然に聞こえるため不可。フックは最大1.5倍まで。

4. ズーム(顔認識)

  • 顔を追跡: OpenCV Haar(opencv-python-headless<5)またはMediaPipe。セクションごとに0.5秒サンプリング、中央値を取得。中央値幅の0.6倍未満の検出は棄却。フレーム幅の2%の不感帯。セクション内でパンしない。セクションのヒット数が2未満の場合、隣接セクションから借用。
  • セクションごとのズームラダー(各3-6秒): 通常1.0x、強調約1.15-1.25x、最重要約1.3-1.6x(ランドスケープ)。16:9から9:16への変換では、固定高さの分数1.0/0.92/0.85を使用(よりタイトに見えると不快)。
  • 時間による配分: 約60%通常/30%強調/10%最重要。最初のセクションは通常。同じレベルを連続して2セクション以上配置しない。強調ズームは最大4文に1回。
  • スタイルの選択(質問するか、雰囲気から推測):
    • ハードカットパンチイン(ジャンプカットyapのデフォルト): ジャンプカットセグメント間で1.0xと1.15xを交互に。フックでズーム開始。強調文は約1.3x。
    • イーズドプッシュイン(ビルドアップ時): scale=w='iw*z(t)':h='ih*z(t)':eval=frame 後、固定サイズ crop、キュービックイーズアウト(1-(1-t)^3)、0.4-0.5秒かけてイン。最初に2秒クリップでテスト。zoompanはジッターが発生します。
    • パンチアンドステイ(1.16x、0.5秒): 動画あたり1-2回、パンチラインで使用。
  • 垂直フレーミング: 顔をクロップ上部から約30%の位置に。cy = min(face_cy - 0.3*ch, head_top - 0.03*ch)。
  • オプション: ピーク時のみ、シェイク、2フレームの白フラッシュ、RGB分割、スピードランプ(パラメータ参照)。

5. キャプション(アニメーション、単語レベル)

  • 単語タイムスタンプからlibass .ass ファイルを生成(静的なフォントインスタンスのみ使用。可変フォントはlibassでハングします)。セグメントごとに再文字起こしし、正確なタイミングを得ます。
  • デフォルト: 1キューの単語数は1-3(<=18文字)。句読点と0.3秒以上のポーズで分割。最小キュー時間は0.35秒(必要な場合は3単語まで拡大し、点滅は避ける)。最後の単語終了後0.12秒保持。フォントサイズは1920キャンバス高の約4.6%(約88 px)、ExtraBold、太いアウトラインまたはソフトシャドウ。
  • 見た目(実際のフレーム上で3つをグリッド表示し、ユーザーに選択させる):
    • Bold: Montserrat 800、大文字、白、アクティブ単語は黄色 #FFD700、3 px黒アウトライン、スプリングポップイン。
    • Bounce: ディスプレイフォント、1-2単語、回転するアクセントカラー、オーバーシュート0.7 -> 1.2 -> 1.0。
    • Clean: Inter 700、自然な大文字小文字、3-5単語、ソフトフェード。
    • Hormozi-lite(フォールバック): 白に黒アウトライン、中央揃え。
  • 強調: 約4単語に1つ、キーワードに色/スケール112%を適用。数字/金額は自動着色(例: #3CE07A)。「デザイン」雰囲気の場合、キャプショングループあたり1つのキーワードが2-4倍サイズに。発話中の単語にポップ: 約110ミリ秒かけてスケール108-112%にイーズバック。
  • 配置: プラットフォームのセーフゾーンを尊重(ユニバーサル9:16セーフエリア x60-940、y285-1480)。Reelsのキャプションy約1360、TikTok約1400、Shorts約1440。口/あごの上には絶対に配置しない。行は最大4単語、バランスよく積み重ねます。
  • 本文キャプションのデフォルトとして凝縮されたディスプレイフェイスは使用しない(窮屈に見えます)。

クリエイタータイプシステム(実際の編集で実証済み。「リアルなコンテンツクリエイターの感じだけどクリーン」とユーザーに言われました):

  • 本文: Gotham Narrow Black(またはMontserrat 800)、大文字、白、1080幅で約70 px、濃いストローク + ソフトぼかしドロップシャドウ。単語が発話されると同時に表示され、最新の単語のみがアクティブ(黄色 + 112%ポップ、3フレームかけてイーズバック)。2つの単語が同時にハイライトされることはありません。
  • キャプション内に句読点は入れない(アポストロフィとマスクされた罵り言葉(sh*t、f***ing など)は保持)。
  • キーワード(製品、名前、数字、トピック): 凝縮Ultra(Gotham XNarrow Ultra)、1.5x、黄色、ベースライン上にインライン。
  • スクリプトアクセント(SignPainter / 筆記体フォント)、クリーム色、約6度傾ける。動画あたり最大4-6語の感情的な単語に使用。
  • ビッグビート(パンチライン、主張文、製品公開): 凝縮Ultraスラム 1.28 -> 1.0(4フレーム)、単語ごとに、200-250 px、口の下(パンチインズームで顔が下に移動することを確認)。
  • モーメントカード: 話し手が言っていないが、その瞬間に値するテキスト(例: 笑い声の上にスクリプトで「金持ち笑い」)。
  • シリーズ/タイトルビルド: 各タイトル行が発話された単語とともに表示(凝縮ディスプレイ行/スクリプト行/ブランドカラー行/トラッキングスモールキャップス)。あごの下に配置し、口の上には決して置かない。
  • 要請があった場合のみキャプション内の罵り言葉をマスク。オーディオは録音されたまま。
  • 永続的なラベル(日数カウンター、シリーズタグ)を追加する前に確認。クリエイターは多くの場合オフを好みます。

5b. プロップ、ステッカー、カットアウト(オプション、高インパクト)

  • 実在の人物/ブランドの参照(例: 「ブルース・ウェイン」、「アルフレッド」、車): 最初の言及時に1回だけ、白いアウトラインのステッカーカットアウトとして表示(カットアウトの下にアルファMaxFilter約19 px)。オーバーシュートでポップイン(0 -> 1.12 -> 1.0 in 0.22 s)、穏やかな揺れ(+/-2.5度)、約1.9秒表示、ポップアウト。頭の横、左上/右上に配置。顔の上には決して配置しない。1つのSFX(ウーッという音、またはテーマに合ったもの: バトラーならサービスベル)とペアにします。
  • オブジェクトは移動可能: 例: 車のカットアウトが、発話単語に合わせて画面下部を横切って走る(約2秒でスムーズステップ、小さなバウンス、アルファ18%/32%の2つのスピードゴーストコピー)、エンジンパスバイSFXと共に。
  • ソーシング: まずユーザーのアセット。実在の人物には、オープンライセンスの写真(Wikimedia Commons CC BY/CC BY-SA/PD)を使用し、クレジット行をユーザーに伝えます。背景の除去は、利用可能なツール(背景除去APIやrembgなど)を使用し、事前に確認を取ります。ユーザーが権利をクリアしない限り、個人/ソーシャル使用のみ。

6. サウンドデザイン

作業順序: 音楽(あれば)最初、次に映像、最後にSFX。

  • キュー: レイアウト/シーンチェンジや大きなカメラ移動時のウーッ(コンタクトフレームの2フレーム前から開始。アタックタイム分先行)。グラフィック/ワードポップエントリー時のポップ。フックまたは公開時のインパクト/サブドロップ(1回のみ)。次のヒットで終了するライザー。ハイライト時のみ控えめにティック/フリック。タイピング音はキー。
  • 抑制(最も重要): SFXは変化をマークし、すべての単語に付けない。フィラーには何も付けない。18秒で約8個がデザインされたと読め、約20個は一般的と読める。密度制限: トーキングヘッドの場合、2秒ウインドウあたり最大2回。同じSFXを1.5秒以内に使用する場合は、バリアントを交互に使い、繰り返すごとに1.5 dBずつ下げる。強度ラダー: カジュアルなyap = まばら、ハイプリール = ほとんどのビートに音、コーポレート = ほぼなし。
  • ソース: ユーザーのライブラリ、または生成(ElevenLabsサウンドエフェクト/生成パック)、または合成キットアプローチ(numpy/ffmpegでビルドされたウーッ/ポップ/ティック/インパクト/ライザー。ダウンロード不要)。トランジェントピークで配置、+/-1フレーム。
  • 音楽: オプション。ボーカルの下で10-15 dBダッキング(sidechaincompress=threshold=0.02:ratio=8:attack=20:release=350)。ダッキング時の音楽ゲイン約-18 dB。ビートカット雰囲気の場合: ビートを検出(librosa)、各ビート/2ビート/小節でカット。カットが3フレーム以内に収まることを確認。
  • ボイスチェーン、ミックス、リミッター、ラウドネス目標は references/params.md にあります。

7. 見た目

  • 軽いグレーディングのみ: ウォームパンチプリセット、またはオートグレードで+/-8%に制限。静止画のトーキングヘッドをぼかさない(偽物に見える)。「デザイン」雰囲気には、オプションで粒状感3-6%と微妙なビネット。
  • ログ映像(DJI Osmo Pocket 3 D-Log M、10-bit HEVC。カメラはbt709とタグ付けしますが、実際はログです): 最初にDJI D-Log M -> Rec.709 LUTで変換し、その上にグレーディング。16ビットで作業: format=rgb48le,lut3d=file='<lut>.cube':interp=tetrahedral。LUTは中間域を暗くします。低照度屋内撮影で肌色が濃い場合、中間域を押しつぶさずに持ち上げます。テスト済みの開始点(見た目: リッチな黒、ややクールな部屋、自然な肌): curves=master='0/0 0.04/0.025 0.25/0.31 0.6/0.70 0.9/0.92 1/0.98',colorbalance=rs=-0.025:bs=0.04:rm=0.03:bm=-0.015,eq=saturation=1.06,unsharp=5:5:0.3。常に生/LUT/グレーディングを2フレームで横に並べてレンダリングし、バッチレンダリング前に確認します。照明が変わる場合はショットごとにグレーディング。ソースのフレームレートを維持(24000/1001)。
  • Pocket 3の垂直クリップは1728x3072(または2160x3840)です。1.15-1.3xのパンチインに十分なヘッドルームがあります。

…

[翻訳のため一部省略]

関連スキル