Clipper は何をしますか?
動画をドロップすると、Claudeが最も印象的な瞬間を見つけ出し、キャプション付きの短いクリップに変換します。すぐに投稿できます。
すべての処理はこのコンピュータ上で実行されます。何もアップロードされません。スキルは ~/.claude/skills/clipper/ に存在し、そのツールは scripts/transcribe.py と scripts/make_clips.py です。これらはスキル専用のPython (~/.claude/skills/clipper/.venv/bin/python) で実行されます。
0. インストールの確認(実行のたびに)
test -x ~/.claude/skills/clipper/.venv/bin/python && command -v ffmpeg
どちらかが不足している場合は、1行でユーザーに伝え、クローンしたリポジトリからインストーラーを実行してください(clipper-skill フォルダ内の bash install.sh)。フォルダが見つからない場合は、再度クローンします: git clone https://github.com/corbinsylk/clipper-skill && cd clipper-skill && bash install.sh。
1. 動画を入手する
ユーザーがファイルをドラッグ&ドロップするか、パスを指定します。どちらもない場合は、1行で入力を求めます。両方のスクリプトは、特別に指定がない限り、動画ファイルと同じ場所に <動画名>-clips/ という作業フォルダを使用します。ユーザーが指定できる設定(デフォルトは以下の通り。決して質問しないこと):
| 設定 | デフォルト |
|---|---|
| クリップ数 | 3~5、真に優れたものだけ |
| クリップ長 | 20~60秒(30~45秒を目標) |
| キャプションの色 | オフホワイト #F5F1EA、発話中の単語はクレイ #B03926 |
| キャプション | オン |
2. 文字起こし
~/.claude/skills/clipper/.venv/bin/python ~/.claude/skills/clipper/scripts/transcribe.py "<動画>"
最初に作業フォルダが出力されます。初回実行時は音声モデル(small で約500MB)をダウンロードします。2分の動画なら約1分、1時間の動画なら数分かかります。約10分を超える場合は、コマンドをバックグラウンドで実行し(Claude CodeではBashツールの run_in_background)、ユーザーに処理中であることを伝えてください。強い訛りや音声が悪い場合は --model medium を追加します。初回実行時のHFトークンに関する警告や速度に関するヒントは問題ありません。
3. 瞬間を選ぶ(これはあなたの仕事であり、スクリプトの仕事ではありません)
<作業フォルダ>/transcript.md をすべて読みます。最も印象的な3~5の瞬間を選びます。優れた瞬間とは:
- 最初の文でフックから始まる。 大胆な主張、驚くべき数字、質問、間違い、物語の始まり。 「それで」「そして」「えーと」「さっき言ったように」や、前後の文脈が必要な行で始めてはいけません。
- 単独で成立する。 元の動画を見たことがない人でも理解できる。「これ」「あの件」「前述の通り」など、クリップ外の内容を指す表現がないこと。
- オチがある。 答え、オチ、結果、教訓で終わる。完全な思考であり、文の途中で終わらないこと。
- エネルギーがある。 意見、具体性、数字、感情、展開。挨拶、スポンサー紹介、事務連絡、ゆっくりとした導入はスキップすること。
- 他の選択と重複しない。 各クリップは異なるポイントを伝え、時間的に重複してはいけません。短い動画ではクリップ数は少なくなります:約5分未満なら1~3クリップが標準です。数を揃えるために引き伸ばしたり重複させたりしないでください。
それぞれを1~10でスコアリングします(フック、単独性、オチ、エネルギーを総合)。7以上のものだけを採用します。3つに満たない場合は、最も優れた3つを採用し、それらが弱いことを伝えます。次に <作業フォルダ>/moments.json を書き込みます:
[
{"title": "ファイル用の短いタイトル", "start": 63.2, "end": 101.8, "score": 9,
"hook": "クリップの最初の文、一字一句正確に",
"why": "一行: この瞬間が機能する理由",
"caption": "投稿用キャプション: 1行のフック、続いて2~3行の短い文、最後に質問や行動喚起"}
]
start と end は動画開始からの秒数です(文字起こしの時間は分:秒形式なので、01:03.2 = 63.2秒)。<作業フォルダ>/words.json には各単語の正確な開始時間(s)と終了時間(e)があります。これを読んで端を設定します。start はフックの最初の単語の s に、end はオチの最後の単語の e に設定します。スクリプトは start から end までの単語を保持し(0.05秒の余裕あり)、前後の単語に決して触れないため、「So」のような単語を削除するには、start を次の単語の s に設定します。
4. クリップを作成する
~/.claude/skills/clipper/.venv/bin/python ~/.claude/skills/clipper/scripts/make_clips.py "<動画>"
他のキャプション色には --text-color "#FFFFFF" --active-color "#FFD400" を、キャプションなしには --no-captions を追加します。クリップ1つにつき約1分かかります。
各クリップ: 単語の境界でカット、1080x1920にリフレーム(横長動画は話者の顔の周りをクロップ。1秒以上顔がない部分(グラフィック、画面、Bロールなど)は、切り取らずにぼかし背景の上に全体表示。縦型動画はそのまま維持)、キャプションは一度に3単語ずつ表示され、発話中の単語がハイライトされます。音声レベルは -14 LUFS に調整されます。
5. 引き渡す前に確認する
すべての clips/NN-*.jpg を開きます。それぞれはクリップ全体の8フレームのストripです。すべてを確認します:
- 顔がフレーム内に収まっており、キャプションが顎の下で読み取れること。すべての会話フレームで確認。
- 動画にすでにキャプションが埋め込まれている場合(2組の文字が見える場合): すべてのクリップを
--no-captionsで再作成します。 - スクリプトはクリップごとに「face in X/Y checks」を出力します。Xが0の場合、フレームに収める顔がありません(画面録画、スライドなど)。その場合はクリップが中央に配置されるので、レポートでその旨を伝えてください。顔がないフレームは編集済み動画では想定内です。それらはカットアウェイとして全体表示されます。
- クリップが単語や思考の途中で始まったり終わったりしている場合、moments.json の
start/endを修正し、--only Nを付けてそのクリップだけを再作成します。
6. レポート
1つの短いリスト: 各クリップのファイル名、長さ、スコア、機能する理由、投稿用キャプション。clips/scores.md(すべて1つのファイル)と clips/ フォルダを案内します。次のステップとして、別の瞬間、他のキャプション色、またはより長い/短いクリップを提案します。