Communitygithub.com

social-media-skills/video-editing-skill

ビデオ編集スキル:トークヘッド動画(YouTube動画、コースレッスン、製品デモ、カメラ前のポッドキャスト、Vlog)を編集者が行うように編集します。無料のローカルfaster-whisperによる文字起こし、不要な沈黙や「えー」「あー」などの削除、言い直しの除去(最後のテイクを保持)、ジャンプカットパンチインの追加、オーディオのクリーンアップとレベル調整、SRTキャプションファイルとYouTubeチャプターの作成、必要に応じてキャプションの焼き込みや縦型バージョンの作成、レンダリング前のカットリストの確認と承認、WoopSocialを使用したYouTubeやその他のプラットフォームへの投稿を行います。ffmpegとPillowを使用してMac、Windows、Linuxで動作し、有料のAPIは必要ありません。

video-editing-skill とは?

このビデオ編集スキルは、トークヘッド形式の動画(YouTube動画、コースレッスン、製品デモ、ポッドキャスト、Vlog)に対して、プロの編集者のように編集を行います。主な機能は、無料のローカルfaster-whisperまたは独自のGroq/OpenAIキーを使用した文字起こし、不要な沈黙や「えー」「あー」などのフィラーの削除、言い直しや吃音の除去(最後のテイクを保持)、ジャンプカット時のパンチイン効果の追加、オーディオのクリーンアップとレベル調整、SRTキャプションファイルとYouTubeチャプターの作成、必要に応じたキャプションの焼き込みや縦型バージョンの生成、カットリストの事前承認、そしてWoopSocialを使用したYouTubeやその他のプラットフォームへの投稿です。ffmpegとPillowのみに依存し、有料APIは不要で、Mac、Windows、Linuxのすべてのプラットフォームで動作します。ユーザーが「動画を編集して」「沈黙を削除して」「えーとをカットして」「フィラーワードを削除して」「ジャンプカットして」「この録音をクリーンアップして」「このトークヘッド動画を編集して」「Claude Codeで動画編集」と言った場合に使用され、常にユーザーの承認を得てから編集・投稿を行います。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/social-media-skills/video-editing-skill/tree/main/skills/video-editing-skill

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

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

ドキュメント

ビデオ編集スキル

生のトークヘッド録音は、通常20〜40%が無音です。間、"えー"、言い間違い、同じ文章を2回言うなどです。それらを手動でカットするのは、録画時間よりも時間がかかります。このスキルは最初の編集を行います。文字起こしを読み取り、すべてのカットに理由を付けて計画し、計画を表示し、ジャンプカットにパンチインとクリーンなオーディオを加えてレンダリングし、キャプションとチャプターを作成し、承諾後に投稿します。必要なものはすべてこのフォルダに含まれています。

4つのコミットメント:

  1. ユーザーの発言はそのまま残します。 間、フィラー、吃音、言い直し、およびユーザーが承認した範囲のみが削除されます。意味が編集されることはありません。
  2. レンダリング前に計画を立てます。 カットリストは最初に表示され、承認されます。
  3. 承諾なしに投稿されることはありません。
  4. ユーザーが使用を許可された映像のみ。 自分の録画、または許可を得たものに限ります。

Windowsでは、すべてのコマンドでpython3の代わりにpyを使用してください。

ステップ0: セットアップとソース

python3 scripts/check_setup.pyを実行します。ffmpeg、Pillow、文字起こしルート、OpenCVの状態と、不足している場合のインストールコマンドを報告します。必須: ffmpegとPillow。

以下の項目について、見えないものだけを1回のメッセージで質問してください:

  1. どのファイルか、そしてそれはユーザーのものか?
  2. 出力先: YouTube(16:9)、ソーシャル(縦型)、または両方。
  3. 編集のタイトさ: youtube(デフォルト: 0.5秒以上の間をカット、自然なビートを保持)、tight(0.3秒、高速なYouTubeおよびソーシャル用)、またはpodcast(穏やか、パンチインなし)。
  4. 習慣で使用していて安全にカットできる単語(「みたいな」、「だから」、「つまり」、「基本的に」など)。これらは他の文では意味を持つため、オプトイン式です。
  5. そのまま残さなければならないもの(デモ、間を意図したジョーク、スポンサー読みなど)。

ステップ1: 文字起こし

python3 scripts/transcribe.py VIDEO --out work/ --terms "製品名、専門用語、ゲスト名"

--termsで名前や専門用語を指定して正しく綴られるようにします。それでも聞き間違いがある場合は、レンダリング前にedit.jsonの"replace"で修正します。投稿済みの動画に焼き込まれたキャプションは修正できません。

同じ3つのルートがあり、トレードオフは一度説明します:

ルート方法コストと速度
既存の文字起こし--from captions.srt無料、即時。単語のタイミングは推定され、ほとんどの「えー」が欠落しているため、フィラー除去は弱い
Groq または OpenAIGROQ_API_KEY または OPENAI_API_KEYGroqはオーディオ1時間あたり約0.04ドル、処理時間は1〜2分
ローカルpip install faster-whisper無料でプライベート。--model smallで動画時間の約半分から1倍の処理時間

文字起こしエンジンはフィラーを書き留めるように指示されます。Whisperはデフォルトでそれらを落とします。それでも見逃された音(誰も書き留めなかった「んー」、息遣いなど)は、エディターによってオーディオ自体から見つけ出されます。

ステップ2: 編集計画

work/transcript.txtを一度すべて読んでください。次にedit.jsonを記述します(フォーマットはscripts/edit_video.pyの先頭にあります):

  • スタイル: "style": "youtube"、"tight"、または"podcast"(閾値はreferences/editing-rules.mdにあります)。制限を超える間は自然なビートに短縮されます。文の途中では短く、文の後では長く、話題の変更では最も長くなります。
  • フィラー: デフォルトリスト(「えー」、「あー」、「えっと」、「うーん」、「んー」)は安全です。ユーザーが依頼した場合にのみ、習慣単語をextra_fillersに追加します。
  • 脱線と無駄なセクション: 脱線、「聞こえますか?」、本題に入る前の長い前置きなど。理由を付けてcutに追加し、ユーザーに伝えます。
  • 保護: 残さなければならないものはkeepに追加します。無音部分も含みます。
  • 質問カードや目に見えるインタビュアーがいるインタビュー: ユーザーが特に指示しない限り、質問(各カードの約3秒間をkeepに)を保持します。これがないと、すべての回答が「だから…」で始まり、文脈が失われます。
  • 聞き間違えた名前: "replace": {"Cyrus Rex": "OSIRIS-REx"} のように指定します。
  • チャプター(YouTube用): 話題の変更点から3〜10のチャプターを作成します。最初は0:00、それぞれ最低10秒、視聴者が得られるものに基づいて名前を付けます(「Part 2」ではなく「カメラが故障した理由」)。時間は元の動画のものを基準にし、スクリプトが調整します。

次に計画を作成します:

python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/ --plan

edited/edit-plan.mdには、新しい長さ、トーク部分内部からの削除量と長い間やカードからの削除量の内訳、1分あたりの単語数ペース、および1秒を超える各削除の理由と単語が記載されます。すべての言い直しと吃音行を読み、「可能性のある言い直し」リストも確認します。同じように始まる2つの完成した文は自動的にはカットされません。それぞれを判断し、本当に言い直しであればcutに追加します。ユーザーにサマリー、言い直し、選択した脱線、チャプターを表示し、承諾を得ます。

ステップ3: レンダリング

python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/

実行内容:

  • 制限を超える間を自然なビートに短縮し、フィラー、吃音、言い直し、およびすべてのcut範囲を削除します。スタイルの最小値(youtubeでは0.4秒)より短い削除はそのままにします。ジャンプカットのコストが節約効果を上回るためです。
  • 音を聞いて各カットを配置します。単語の端は実際に音が止まり始める場所に移動するため、単語の終わりが切られることはなく、文字起こしで見逃された音(書き留められていない「んー」)も見つけ出されます。
  • 画像も確認します。タイトルカードやショットチェンジはきれいにカットされ、カードの数フレームが残ることはありません。
  • パーツのグループを1パスでレンダリングするため、カット数がいくつでも音と画像の同期が保たれます。
  • パンチイン: ジャンプカットを隠す必要がある場合に、フルフレームと1.1倍のパンチインを切り替えます。常に1秒以上を削除したカットで発生し、それ以外では同じフレーミングが4秒続いた後でのみ発生し、新しいカメラショットへのカットでは発生しません。"punch_in": 0でオフにできます。
  • オーディオ: 作業レベルへのゲイン調整、ランブルフィルター、測定された室内ノイズに基づくノイズリダクション(室内がすでに静かな場合はスキップ)、穏やかなコンプレッション、ピークリミッター、および-14 LUFSへの2パスラウドネス処理。
  • キャプション: 常にcaptions.srt(最大42文字の2行、各1〜7秒、小さな単語の後や名前の中での改行なし)を書き出し、YouTubeにアップロードします。"captions": {"burn": true}でソーシャル用に動画に焼き込みます(ソーシャルではミュートで視聴されることが多いため)。縦型バージョンではデフォルトで焼き付けられます。SRTもアップロードするYouTube動画にはキャプションを焼き込まないでください。視聴者が両方を見ることになります。
  • 縦型: "format": "vertical"でfocus_xに基づいてクロップされた1080x1920バージョンを作成します。

edited/edited.mp4、captions.srt、chapters.txt、edit-report.md、manifest.jsonを書き出します。

ユーザーに表示する前に確認: cuts.jpg(最大のカットの直前と直後のフレーム。カードのフラッシュ、異なるショットへのジャンプ、固まった表情がないか確認)を開き、manifest.jsonの警告(同期、190語/分を超えるペース、ラウドネス)を読みます。言い直しで間違ったテイクが保持された場合、ペースが息苦しい場合(より穏やかなスタイルに変更)、またはカットのランディングが悪い場合(その箇所をkeep)は修正して再レンダリングします。

ステップ4: WoopSocialで投稿

接続、アップロード、投稿方法: references/woopsocial.md。簡略版:

  1. social_accounts_list。接続されていない場合: このエージェントのための1つの接続パス(無料プラン: 2つのソーシャルアカウント)、次にプラットフォームごとにoauth_create_authorizationを実行。
  2. アップロードセッションでedited.mp4をアップロード(media_uploads_create_sessionをmanifest.jsonのバイトサイズと共に実行、python3 scripts/upload_parts.py session.json edited/edited.mp4、media_uploads_complete_session)。
  3. YouTube: title(主要な検索ワードを先頭に、70文字未満)、privacy、および視聴者が得られるものについての1行で始まり、chapters.txtのチャプターが続く説明。captions.srtは後でYouTube Studioでアップロードします(WoopSocialはキャプションファイルを送信しません)。
  4. 投稿内容(ファイル、タイトル、説明、アカウント、タイムゾーン付き時間)を表示し、明確な承諾を得ます。次にposts_createとposts_getを実行します。

ステップ5: 結果を読む

1週間後、social_account_posts_listを実行します。収集日とともに、視聴回数、いいね、コメント(報告されている場合)が表示されます。未報告は「報告なし」を意味します。再生維持率と平均視聴時間はYouTube Studioにあります。ユーザーに確認してください。視聴者が早期に離脱する場合、次の編集では冒頭をよりタイトにします。特定のチャプターで離脱する場合、そのセクションが長すぎたことになります。

品質基準

プロの編集者がこれを納品するでしょうか?単語が切れている、カットが息継ぎの途中でポップノイズを伴う、パンチインが数秒ごとに変わる、ペースが考え込む余地を残さない、または意味が変わっている場合は、リジェクトします。

エッジケース

  • カメラに2人いる場合: formatは元のままにします。パンチインはワイドショットでも機能します。
  • 音声付き画面録画: "punch_in": 0を設定します。
  • 音声の下に音楽がある場合: 無音検出が音楽を音として認識します。"voiced_gaps": falseを設定します。
  • 非常に長い録音(1時間以上): 動作しますが、レンダリング時間は動画の長さとほぼ同じです。最初に計画を立て、一度だけレンダリングします。
  • 意図的に発話がない部分がある場合(デモなど): keepします。

リファレンス

  • references/editing-rules.md: 閾値、フィラー、言い直しパターン、パンチイン、オーディオチェーン、キャプションとチャプター(出典付き)。
  • references/woopsocial.md: 接続、アップロード、投稿、結果の読み取り。

関連スキル