video-editing-skill について
文字起こしをもとにトーキングヘッド動画の編集を計画し、レンダリングするスキルです。編集案を承認してから進めたい制作者向けで、字幕やチャプター、音声調整に加え、WoopSocial での投稿にも対応します。
主な機能
- 01文字起こしに基づく編集計画
- 02レンダリング前の承認
- 03無音とフィラーの削除
- 04パンチインと音声調整
- 05字幕とチャプターの生成
- 06WoopSocial への任意投稿
活用シーン
- 01トーキングヘッド動画の初回編集
- 02字幕を焼き込んだ縦型動画の作成
- 03YouTube 用字幕とチャプターの生成
- 04承認済み編集動画の WoopSocial 投稿
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ social-media-skills/ video-editing-skill --skill video-editing-skillインストール後、Claude Code で/video-editing-skillを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonexamples/nasa-interview/CREDITS.mdedit.jsontranscript.txtexamples/nasa-interview/output/captions.srtchapters.txtedit-report.mdmanifest.jsonfonts/OFL-Poppins.txtreferences/editing-rules.mdwoopsocial.mdscripts/check_setup.pyedit_video.pytranscribe.pyupload_parts.py詳細
動画編集スキル
未編集のトークヘッド録画には通常、無音の時間が20〜40%含まれています。間、えーとという言葉、言い直し、同じ文の繰り返しです。手作業でカットすると、録画するより時間がかかります。このスキルは最初の編集を行います。文字起こしを読み、各カットの理由を付けて計画を立て、その計画を提示し、ジャンプカットにパンチインを加えて音声を整えた状態で編集をレンダリングし、キャプションとチャプターを書き込み、承認を得てから投稿します。必要なものはすべてこのフォルダーにあります。
4つの約束:
- ユーザーの言葉はそのまま残します。 カットするのは、間、フィラー、どもり、撮り直し、およびユーザーが承認した範囲だけです。意味を変える編集はしません。
- レンダリングの前に計画します。 カットリストを先に提示し、承認を得ます。
- 承認なしに投稿することはありません。
- ユーザーが使用できる映像だけを扱います。 ユーザー自身の録画、または許可を得た映像に限ります。
Windowsでは、すべてのコマンドで python3 の代わりに py を使用してください。
Step 0: セットアップと素材
python3 scripts/check_setup.py を実行すると、ffmpeg、Pillow、文字起こしの方法、OpenCVを確認し、ユーザーのシステムに合わせたインストールコマンドが表示されます。必須なのはffmpegとPillowです。
確認できないことだけを、1つのメッセージで尋ねます。
- どのファイルですか。また、ユーザー自身のファイルですか?
- どこに投稿しますか:YouTube(16:9)、SNS(縦型)、または両方。
- どの程度詰めますか:youtube(デフォルト:0.5秒を超える間をカットし、自然な間は残します)、tight(0.3秒。テンポの速いYouTubeとSNS向け)、またはpodcast(穏やかに編集し、パンチインはしません)。
- 安全にカットできる、口癖の言葉はありますか(「like」、「so」、「you know」、「basically」など)。別の文脈では意味を持つため、指定があった場合のみカットします。
- そのまま残す必要があるものはありますか(デモ、間が笑いにつながるジョーク、スポンサーの紹介など)。
Step 1: 文字起こし
python3 scripts/transcribe.py VIDEO --out work/ --terms "Product name, Jargon, Guest name"
--terms には、正しく表記するための名前や専門用語を指定します。それでも聞き間違えられた箇所は、レンダリング前に edit.json の "replace" で修正してください。投稿した動画に焼き込まれたキャプションは修正できません。
いつもの3つの方法と、それぞれのトレードオフを一度説明します。
| 方法 | 使用方法 | 費用と速度 |
|---|---|---|
| 既存の文字起こし | --from captions.srt | 無料ですぐに使えます。単語のタイミングは推定され、多くの「えーと」が抜けているため、フィラーのカット精度は低くなります |
| GroqまたはOpenAI | GROQ_API_KEY または OPENAI_API_KEY | Groqは音声1時間あたり約$0.04。1時間分の処理に1〜2分ほどかかります |
| ローカル | pip install faster-whisper | 無料でプライベートに処理できます。--model small では、動画の長さの約0.5〜1倍の時間がかかります |
文字起こしツールにはフィラーも書き起こすよう指示しています。そうしないとWhisperが省いてしまうためです。それでも拾えない音(誰も書き留めなかった「んー」、息継ぎなど)は、編集ツールが音声そのものから検出します。
ステップ 2:編集を計画する
work/transcript.txtを最初から最後まで一度読みます。その後、scripts/edit_video.pyの冒頭にある形式に従ってedit.jsonを書きます。
- スタイル:
"style": "youtube"、"tight"、または"podcast"を指定します(しきい値はreferences/editing-rules.mdを参照)。上限を超えるポーズは、自然な間になるように短くします。文の途中では短く、文の後では長めに、話題が変わるところでは最も長くします。 - フィラー: デフォルトのリスト("um"、"uh"、"er"、"hmm"、"mm")はそのまま使えます。ユーザーから依頼があった場合に限り、ユーザーの口癖を
extra_fillersに追加します。 - 脱線と不要な部分: 脱線、「聞こえますか?」、要点に入るまでの長い前置きなどは、理由を添えて
cutに追加し、ユーザーに伝えます。 - 保護する内容: 無音の区間も含め、残す必要があるものはすべて
keepで保護します。 - 質問カードやインタビュアーが映るインタビュー: ユーザーから別の指示がない限り、質問を残します(各カードを約3秒間
keepに指定します)。残さないと、すべての回答が「では……」で始まり、文脈がなくなります。 - 聞き取り間違えた名前:
"replace": {"Cyrus Rex": "OSIRIS-REx"}。 - チャプター(YouTube の場合):話題の変わり目を基に3~10個設定します。最初は0:00にし、各チャプターは10秒以上にします。「パート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 s)より短い削除はそのまま残します。ジャンプカットは、得られる効果よりも失うもののほうが大きいためです。 - 音声を聞きながらすべてのカット位置を調整します。単語の端は実際に音が止まる位置、始まる位置に合わせるため、単語の語尾が切れず、書き起こしで聞き逃された音(書き起こされていない「んー」など)も見つけられます。
- 映像も確認します。タイトルカードやショットの切り替わりをきれいにカットし、カードが数フレームだけ残ることがないようにします。
- カット数にかかわらず音声と映像の同期を保てるよう、複数の素材をグループに分けて、それぞれ1回のパスでレンダリングします。
- パンチイン: ジャンプカットを目立たなくする必要がある箇所で、全画面と1.1倍のパンチインを切り替えます。1秒以上を削除したカットでは必ず行い、それ以外では同じフレーミングが4秒続いた後にのみ行います。新しいカメラショットに切り替わるカットでは行いません。
"punch_in": 0で無効になります。 - 音声: 実用的な音量へのゲイン調整、ランブルフィルター、測定した室内ノイズに応じたノイズ低減(室内がすでに静かな場合はスキップ)、緩やかなコンプレッション、ピークリミッター、および-14 LUFSへの2パスラウドネス調整を行います。
- 字幕: YouTubeにアップロードするための
captions.srtを必ず作成します(最大42文字の2行、1~7秒、小さな単語の後や名前の途中では改行しません)。"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の警告(同期、1分あたり190語を超えるペース、ラウドネス)を読みます。撮り直しで誤ったテイクが残った場合、ペースが息苦しく感じられる場合(より穏やかなスタイルにします)、またはカット位置が悪い場合(その箇所をkeepします)は、修正して再レンダリングしてください。
ステップ 4:WoopSocialで投稿する
接続、アップロード、投稿の方法については、references/woopsocial.mdを参照してください。簡単に説明すると、次のとおりです。
social_accounts_listを実行します。未接続の場合は、このエージェントで利用できる唯一の接続方法を使い(無料プランではソーシャルアカウントを2つ利用できます)、プラットフォームごとにoauth_create_authorizationを実行します。- アップロードセッションを使って
edited.mp4をアップロードします(manifest.jsonにあるバイト数でmedia_uploads_create_sessionを実行し、python3 scripts/upload_parts.py session.json edited/edited.mp4を実行してから、media_uploads_complete_sessionを実行します)。 - YouTube:
title(検索で重要な語句を先頭に置き、70文字未満)、privacy、および視聴者が得られる内容を1行で説明した後にchapters.txtのチャプターを記載した説明文を設定します。その後、YouTube Studioでcaptions.srtをアップロードします(WoopSocialでは字幕ファイルを送信しません)。 - 投稿内容(ファイル、タイトル、説明文、アカウント、タイムゾーン付きの投稿時刻)を見せ、明確な承認を得ます。その後、
posts_createとposts_getを実行します。
ステップ 5:結果を確認する
1週間後にsocial_account_posts_listを実行し、閲覧数、いいね数、報告されている場合はコメント数を、データの収集日とともに確認します。値がない場合は「報告なし」を意味します。視聴者維持率と平均視聴時間はYouTube Studioで確認し、ユーザーに尋ねてください。視聴者が序盤で離脱する場合は、次回の編集で冒頭をより引き締めます。チャプターの途中で離脱する場合は、そのセクションが長すぎたということです。
品質基準
プロの編集者が納品できる品質でしょうか? 単語が途中で切れている、息継ぎの途中で音のポップを伴うカットがある、数秒ごとにパンチインが切り替わる、考える余地がないほどペースが速い、または意味が変わっている場合は、納品できません。
エッジケース
- カメラに2人映っている場合:
formatは source のままにします。ワイドショットでもパンチインは機能します。 - 音声付きの画面録画:
"punch_in": 0に設定します。 - 音声の下に音楽がある場合: 無音検出では音楽も音として認識されます。
"voiced_gaps": falseに設定します。 - 非常に長い録画(1時間超): 動作しますが、レンダリング時間は動画の長さと同程度です。まず計画を立ててから、1回でレンダリングしてください。
- 意図的にしばらく無音にする場合(デモなど):そのまま
keepします。
参考資料
references/editing-rules.md:しきい値、フィラー、撮り直しのパターン、パンチイン、音声処理、字幕とチャプターについて、出典とともに説明しています。references/woopsocial.md:接続、アップロード、投稿、結果の読み取りについて説明しています。