with one click
video-edit
// 動画の無音カット・言い直しカット・フィラー除去を自動で行う動画編集スキル。「動画編集して」「この動画をカットして」「無音カットして」で起動。
// 動画の無音カット・言い直しカット・フィラー除去を自動で行う動画編集スキル。「動画編集して」「この動画をカットして」「無音カットして」で起動。
Claude Code関連の海外トレンド・ニュースを収集し、日本語でカジュアルにリライトしてX投稿の下書きを生成するスキル。「X投稿」「ツイート作成」「下書き生成」「今日の投稿」「Claude Codeのネタ」「トレンド収集して投稿」などと言われたら使う。情報収集から下書きファイル出力、scripts/post-tweet.js経由の投稿まで一貫して対応する。
請求書PDFを生成する。「請求書を作って」「invoice作成」「請求書PDFが欲しい」で起動。宛先・品目・金額を伝えるだけでインボイス制度対応の請求書PDFを出力。
指定したトピックの最新トレンド・ネタをWeb検索で収集し、YouTube・SNSコンテンツのネタとしてまとめる。「ネタ探し」「トレンド」「最新情報を探して」で起動。
| name | video-edit |
| description | 動画の無音カット・言い直しカット・フィラー除去を自動で行う動画編集スキル。「動画編集して」「この動画をカットして」「無音カットして」で起動。 |
| user-invocable | true |
| argument-hint | ["動画ファイルパス"] |
| color | blue |
トーキングヘッド動画(カメラに向かって喋る形式)の自動編集スキル。 無音カット・言い直しカット・フィラー除去を一括で行い、編集済みMP4を出力する。
STEP 1: Scribe で文字起こし → 単語タイムスタンプ + ハードカットオフ設定
STEP 2: Claude が文字起こしを読んで判断 → 言い直し・フィラー・冗長はい除去
STEP 3: 単語間 gap クリーニング → 0.43秒以上の gap をカット + 単語内無音検出 + 短gapフィラー処理
STEP 3.5: @video-reviewer → 技術レビュー + コンテンツレビュー
STEP 4: エンコード → +7dB / CRF18 / 200ms プリロール(安全チェック付き) / 30ms フェード
STEP 5: 出力検証 → librosa で無音区間スキャン → 問題あれば報告・再エンコード
<プロジェクトルート>/edit/ フォルダC:/temp/videdit/(日本語パス回避).env に ELEVENLABS_API_KEY が設定済み元動画の音声を ElevenLabs Scribe で文字起こしする。
url = "https://api.elevenlabs.io/v1/speech-to-text"
data = {"model_id": "scribe_v1", "language_code": "ja"}
C:/temp/videdit/transcript.jsonC:/temp/videdit/sentences.jsonC:/temp/videdit/readable.txt最後の単語の end + 0.5秒 をハードカットオフに設定する。
これ以降は音声の有無にかかわらず全カット(OBS操作音等を防止)。
readable.txt を読み、以下を判断して除去対象の文インデックスを決定する。
同じ内容を複数回言い直している場合、最後の方(最も完成度が高い方)を採用し、それ以前を除去する。
文の途中で別の言葉を言いかけて訂正している場合、言いかけ部分を除去して正しい方に直結する。 文脈を理解して判断する。 ルールベースではなく、発言内容の意味を考えて決める。
以下のフィラー語を全単語スキャンで自動検出し除去する:
Scribe が単語を細かく分割する場合があるため、1〜3単語の結合でマッチングする。
文と文の間に挟まる独立した「はい」「うん」は除去する。 ただし文脈上必要なもの(話の切り替え等)は残す。
1文の中で同じフレーズが「はい」「うん」等を挟んで繰り返されている場合、最初のフレーズ + 挟まれた「はい」を除去し、2回目のフレーズに直結する。
見つけ方: 各文を読む際に、同じ単語やフレーズが近い位置で2回出現していないか注意する。特に「はい」「うん」を挟んで同じ出だしが繰り返されるパターン。
例:
同じ内容を異なる表現で繰り返している場合、最後の方を採用する。「同じ単語が繰り返されているか」ではなく「同じ意味のことを言っているか」で判断する。
判断基準: 文の冒頭が似た出だしで、伝えたい内容が同じなら、表現が違っても「言い直し」として扱う。迷ったら「動画の視聴者がこの2つの文を続けて聞いたら、同じ話を2回されていると感じるか?」で判断する。
例:
残った文を gap 0.43秒以上 でグループ分けする。
各セグメント内の単語と単語の間で 0.43秒以上の gap をカットする。
Scribe は単語の end に後続の無音を含めることがある(例:「で」に1.86秒を割り当て、実際の発話は0.3秒で残り1.5秒が無音)。以下のルールで検出する:
librosa.effects.split(y, top_db=30) で発話区間を検出gap が 0.43秒未満のフィラー(えー、えっと等)はハードカットすると音が不自然に飛ぶ。以下のルールで対処する:
セグメント一覧を C:/temp/videdit/segments.json に保存する。
STEP 3 完了後、video-reviewer サブエージェントを起動してレビューを行う。
サブエージェント定義: .claude/agents/video-reviewer.md
@"video-reviewer (agent)" セグメント一覧・文字起こし・音声ファイルを確認して、技術レビューとコンテンツレビューを行ってください。
技術レビュー
コンテンツレビュー
C:/temp/videdit/review_result.json にレビュー結果が保存される。
reviewer の結果を鵜呑みにせず、Claude 自身が以下を最終チェックする。
reviewer が返した全セグメントに対して、Scribe の単語タイムスタンプを再確認する。
reviewer が返したセグメント一覧の時間範囲に含まれる単語を再スキャンし、以下が残っていないか確認する:
検証で問題が見つかった場合、セグメントを直接修正してから STEP 4 に進む。 reviewer への再依頼はしない(無限ループ防止)。
レビュー結果を反映し、ffmpeg の filter_complex で一括処理する。
volume=7dB フィルター)<プロジェクトルート>/edit/final.mp4(連番: final2, final3...)C:/temp/videdit/)は処理後に削除C:/temp/videdit/run.py に書き出して実行する(bash heredoc の文字化け回避)-filter_complex_script で渡すエンコード完了後、出力動画の音声を検証する。
出力動画から音声を抽出し、librosa で無音区間を検出する:
y, sr = librosa.load(output_wav, sr=16000)
intervals = librosa.effects.split(y, top_db=30)
# intervals の gap(前の区間 end ~ 次の区間 start)が 0.43秒以上 → 問題
一時ファイル(C:/temp/videdit/)を削除して完了。
ユーザーに以下を伝える: