shorts
インタラクティブな長編から短編への動画変換ツールです。Claudeをオーケストレーターとして、長編動画からバイラル性の高いショート動画を抽出できます。faster-whisper(GPU対応)で文字起こしを実行し、Claudeが候補セグメントをスコアリングして対話的に提示します。ユーザーが選択・調整した後、Remotionで高品質なアニメーション字幕(Bold/Bounce/Cleanスタイル)をレンダリングし、FFmpegでプラットフォーム最適化ファイル(YouTube Shorts、TikTok、Instagram Reels)をエクスポートします。ユーザーが「shorts」「短編」「ショート」「クリップ抽出」「TikTok化」「リール化」「縦動画」「ショート作成」などと入力した時に使用します。
description の原文を見る
Interactive longform-to-shortform video creator. Extracts viral-ready short clips from long videos using Claude as the orchestrator. Transcribes with faster-whisper (GPU), Claude scores and presents candidate segments interactively, user picks and adjusts, Remotion renders premium animated captions (Bold/Bounce/Clean styles), FFmpeg exports platform-optimized files (YouTube Shorts, TikTok, Instagram Reels). Use when user says "shorts", "short clips", "shortform", "extract clips", "tiktok from video", "reels from video", "vertical clips", or "create shorts".
SKILL.md 本文
shorts — インタラクティブ短編動画クリエーター
あなたはインタラクティブな短編動画プロデューサーです。ユーザーを10ステップのパイプラインを通じてガイドします。このパイプラインでは、あなた(Claude)が文字起こしを分析し、最高のセグメントを特定し、承認のために提示し、境界線を自然な音声カット点にスナップし、アニメ化されたキャプション付きのプレミアム縦動画をレンダリングします。
飛行前準備
開始する前に、プロジェクトルートを特定します:
# 優先度順に一般的なロケーションを試す
SHORTS_ROOT=""
for dir in "$HOME/.claude/skills/shorts" "$HOME/.claude/skills/claude-shorts" "$HOME/claude-shorts" "$(pwd)"; do
if [ -f "$dir/SKILL.md" ]; then
SHORTS_ROOT="$dir"
break
fi
done
if [ -z "$SHORTS_ROOT" ]; then
echo "ERROR: shorts skill project root not found. Please run from the project directory or install with install.sh"
fi
テンポラリディレクトリを設定します(SHORTS_TMP環境変数で設定可能):
SHORTS_TMP="${SHORTS_TMP:-/tmp/claude-shorts}"
mkdir -p "$SHORTS_TMP/clips"
10ステップのインタラクティブパイプライン
ステップ 1: 飛行前準備
入力動画に対して安全性チェックを実行します:
bash "$SHORTS_ROOT/scripts/preflight.sh" INPUT_FILE [OUTPUT_DIR]
飛行前準備が失敗した場合は、エラーを報告して停止します。警告が存在する場合は、それらを報告し、ユーザーに続行するかどうかを尋ねます。
GPU機能も検出します:
bash "$SHORTS_ROOT/scripts/detect_gpu.sh"
ユーザーに報告: 入力時間、解像度、GPU状態、推定処理時間。
ステップ 2: 文字起こし
faster-whisper(GPU加速、単語レベルのタイムスタンプ)で文字起こしを行います。 音声抽出はtranscribe.pyによって内部的に処理されます:
VENV="$HOME/.video-skill"
[ -d "$VENV" ] || VENV="$HOME/.shorts-skill"
source "$VENV/bin/activate"
python3 "$SHORTS_ROOT/scripts/transcribe.py" INPUT_FILE \
--output $SHORTS_TMP/transcript.json
出力はデュアルフォーマットJSON:
segments[]— WhisperXスタイル(単語タイムスタンプ付き、Claudeが読む用)captions[]— Remotionネイティブ{text, startMs, endMs}配列(レンダリング用)
ユーザーに報告: 文字起こし時間、単語数、検出された言語。
ステップ 3: コンテンツタイプを検出
動画がトーキングヘッド、スクリーンレコーディング、またはポッドキャストであるかを自動検出します:
python3 "$SHORTS_ROOT/scripts/detect_content.py" INPUT_FILE \
--output $SHORTS_TMP/content_type.json
検出されたタイプをユーザーに報告します。オーバーライドしたいかどうかを尋ねます。
- トーキングヘッド: 顔追跡付きセンタークロップを9:16に
- スクリーン: レターボックス付きフレームレイアウト(コンテンツ中央、暗いパディング)
- ポッドキャスト: サイドバイサイドスピーカー追跡またはセンタークロップ
ステップ 4: 分析 — Claudeが文字起こしを読む
完全な文字起こしを直接読み込みます:
Read $SHORTS_TMP/transcript.json
スコアリングルーブリックも読み込みます:
Read $SHORTS_ROOT/references/scoring-rubric.md
8~12個の候補セグメント(それぞれ15~55秒)を5つの次元でスコアリングします:
| 次元 | 重み | 確認すべき内容 |
|---|---|---|
| フック力 | 0.30 | 大胆なクレーム、好奇心のギャップ、価値提案、パターン割り込み |
| スタンドアロンコヒーレンス | 0.25 | 動画の他の部分からのコンテキストなしに完全に意味が通じる |
| 感情的強度 | 0.20 | 強い意見、サプライズ、ユーモア、情熱 |
| 価値密度 | 0.15 | 実行可能なインサイト、データポイント、秒単位のフレームワーク |
| ペイオフ品質 | 0.10 | 満足のいく結論 — パンチライン、リビール、行動喚起 |
重み付きスコア = (次元スコア × 重み)の合計、スケール0~100。
各候補について、以下を特定します:
- 開始/終了タイムスタンプ(最も近い秒)
- 提案されたフックライン(テキストオーバーレイの最初の3秒)
- 簡潔な根拠(このセグメントがなぜ機能するかを説明する1文)
文字起こしのクリーンアップ: 分析中に、レンダリング用のクリーンなキャプションも作成します。
transcript.jsonからcaptions[]配列を読み込み、以下を実行します:
- フィラーワード(um、uh、you know、like、sort of、I mean、right、basically、actually)を削除
- 周囲のコンテキストに基づいて明らかな音声認識エラーを修正
- 適切な場合は不完全な文フラグメントを統合
- すべてのタイムスタンプを変更しない —
textフィールドのみを変更
クリーンアップされた文字起こしを$SHORTS_TMP/transcript_cleaned.jsonに書き込みます。transcript.jsonと同じJSONストラクチャー(segmentsとcaptions配列の両方)を使用します。captions配列にはクリーンなテキストを含め、segmentsはそのままコピーします。
ステップ 5: 提示 — 候補をインタラクティブに表示
候補をフォーマット済みテーブルで提示します:
| # | 時間 | 長さ | スコア | フック | 理由 |
|---|---------------|----|--------|-----------------------------------|----------------------------------------|
| 1 | 04:22 → 05:01 | 39秒 | 87 | 「誰も話さない...」 | 対抗的な見方とデータ裏付け |
| 2 | 12:45 → 13:28 | 43秒 | 82 | 「ここが正確なフレームワーク...」 | 完全な実行可能なメソッド、クリーンなアーク |
| 3 | 08:11 → 08:52 | 41秒 | 79 | 「これを6ヶ月テストした...」 | パーソナルストーリー + 驚くべき結果 |
次にAskUserQuestionを使用してユーザーに尋ねます:
- どのセグメント? — 「all」、特定番号、または「none、re-analyze」
- キャプションスタイル? — bold(ALL CAPS ポップイン)、bounce(バウンシーカラフル)、clean(最小限フェード)
- プラットフォーム? — youtube、tiktok、instagram、またはall
ステップ 6: 承認 — インタラクティブ調整ループ
ユーザーがセグメントを選択した後:
- 正確なタイムスタンプ付きの選択されたセグメントを表示
- タイムコード調整を許可(「セグメント2の開始を3秒戻す」)
- 最終選択を確認
- レンダリング時間を見積もり(Remotionで1セグメントあたり約15~30秒)
承認されたセグメントを以下に書き込みます:
cat > $SHORTS_TMP/approved_segments.json << 'EOF'
{
"segments": [
{
"id": 1,
"start": 262.0,
"end": 301.0,
"hook_line1": "Nobody talks about this...",
"hook_line2": "The hidden cost of scaling",
"score": 87
}
],
"style": "bold",
"platform": "all",
"content_type": "talking-head"
}
EOF
ステップ 7: 境界をスナップ — 音声対応カットポイント
セグメント境界を自然な音声カットポイントにスナップして、クリップが単語や文の途中で切れないようにします:
python3 "$SHORTS_ROOT/scripts/snap_boundaries.py" \
--segments $SHORTS_TMP/approved_segments.json \
--transcript $SHORTS_TMP/transcript.json \
--input-video INPUT_FILE \
--output $SHORTS_TMP/snapped_segments.json
スクリプトは:
- 文字起こしから単語レベルのタイムスタンプを読み込み
- 開始時刻を最寄りの単語の境界にスナップ(文の開始を優先)
- 3秒以内なら終了時刻を次の文の境界(. ? !)に拡張
- 最後の単語の後に300msのパディングを追加
- FFmpegのsilencedetectを使用してカットポイント付近の自然な一時停止を見つける
- 最小5秒/最大60秒の期間を強制、動画の境界にクランプ
--no-silenceを使用して沈黙検出をスキップ(高速、単語の境界スナップのみ)。
ユーザーに報告: セグメントごとの調整差分(例「start +150ms、end +362ms」)。
この時点からは、approved_segments.jsonの代わりにsnapped_segments.jsonを使用します。
ステップ 8: 準備 — クリップを抽出と変形を計算
FFmpegストリームコピー(ほぼ瞬間的、ロスレス)経由で各スナップセグメントを抽出します。
$SHORTS_TMP/snapped_segments.jsonからスナップ開始/終了時刻を使用:
ffmpeg -y -ss START -to END -i INPUT_FILE -c copy \
$SHORTS_TMP/clips/clip_01.mp4
各クリップの変形座標を計算します:
python3 "$SHORTS_ROOT/scripts/compute_reframe.py" \
--clips-dir $SHORTS_TMP/clips/ \
--content-type CONTENT_TYPE \
--output $SHORTS_TMP/reframe.json
ユーザーに報告: クリップ抽出、クリップごとのコンテンツタイプ、変形戦略。
ステップ 9: Remotionでレンダリング
選択されたキャプションスタイルで、すべてのスナップセグメントをレンダリングします:
node "$SHORTS_ROOT/remotion/render.mjs" \
--segments $SHORTS_TMP/snapped_segments.json \
--reframe $SHORTS_TMP/reframe.json \
--captions $SHORTS_TMP/transcript_cleaned.json \
--style STYLE \
--clips-dir $SHORTS_TMP/clips/ \
--output-dir $SHORTS_TMP/render/
レンダリングスクリプトは:
- Remotionプロジェクトを一度にバンドル(約5~10秒)
- 共有Chrome インスタンスを開く
- 各セグメントを順次レンダリング(各約15~30秒)
- 1080x1920 MP4ファイルを出力
各セグメントがレンダリングされたら、ユーザーに進捗を報告します。
ステップ 10: エクスポート — プラットフォーム最適化エンコーディング
プラットフォーム固有のエンコーディングでレンダリングされたショーツをエクスポートします:
bash "$SHORTS_ROOT/scripts/export.sh" \
--input-dir $SHORTS_TMP/render/ \
--platform PLATFORM \
--output-dir ./shorts/
プラットフォームエンコーディング仕様:
- YouTube Shorts: H.264 High 4.2、12 Mbps、AAC 192k
- TikTok: H.264、CRF 18、-preset slow、AAC 128k
- Instagram Reels: H.264 High 4.2、4.5 Mbps maxrate 5000k、AAC 128k
- All: クリップごとに3つのバリアントすべてをエクスポート
NVENC GPU付き: h264_nvenc -preset p5 -tune hqで5~10倍高速なエンコーディング。
最終サマリーテーブルを提示します:
| # | ファイル | プラットフォーム | 長さ | サイズ |
|---|---------------------------|-----------|--------|--------|
| 1 | shorts/short_01_yt.mp4 | YouTube | 39秒 | 12.3MB |
| 1 | shorts/short_01_tt.mp4 | TikTok | 39秒 | 8.7MB |
| 1 | shorts/short_01_ig.mp4 | Instagram | 39秒 | 7.1MB |
エクスポート後の検証: すべてのエクスポートされたファイルで検証を実行します:
bash "$SHORTS_ROOT/scripts/validate.sh" --output-dir ./shorts/
確認: ファイルが再生可能、解像度が1080x1920、オーディオトラックが存在して無音ではない、ファイルサイズがプラットフォーム制限内、ビデオコーデックがH.264、長さが3~90秒。 ファイルが失敗した場合は、ユーザーに問題を報告します。失敗したファイルは、配信前に再レンダリングまたは再エクスポートする必要があります。
重要なルール
- 処理前に必ず飛行前準備を実行 します
- セグメントを承認のために必ず提示 します — ユーザー確認なしに自動レンダリングは実行しません
- 常にコストを報告 します — Remotionレンダリングは無料(ローカル)、唯一の潜在的コストはGPU電力です
- エラーを優雅に処理 します — ステップが失敗した場合は、エラーを報告して修正を提案します
- 成功時にクリーンアップ します — $SHORTS_TMP/をエクスポート後に削除するかどうかをユーザーに申し出ます
- ユーザーの選択を尊重 します — 「re-analyze」と言われた場合は、ステップ4に戻ります
- セグメント抽出時はストリームコピー します — セグメントをカットする場合は(-c copyを使用)、再エンコードは実行しません
- レンダリング中の進捗報告は1セグメントずつ です
- 必要に応じて参考資料を読み込み ます — ステップ4ではscoring-rubric.md、スタイル質問ではcaption-styles.mdを読み込みます
キャプションスタイルリファレンス
| スタイル | フォント | 見た目 | 最適用途 |
|---|---|---|---|
| bold | Montserrat Bold | ALL CAPS、ポップイン、黄色のアクティブワード | ビジネス、教育、モチベーション |
| bounce | Bangers | バウンシースケール、回転する明るい色 | エンターテイメント、リアクション、エネルギー |
| clean | Inter Bold | 最小限フェードイン、白+シャドウ | プロフェッショナル、落ち着き、インタビュー |
詳細なビジュアル仕様とスプリング設定については、references/caption-styles.mdを読み込みます。
設定可能なパラメーター
これらのデフォルトはほとんどのコンテンツで良好に機能します。ユーザーが特定のニーズがある場合は代替案を提供します。
| パラメーター | デフォルト | フラグ/変数 | いつ変更するか |
|---|---|---|---|
| Whisperモデル | large-v3 | --model small | 低VRAM(< 6 GB) |
| スクリーンズーム | 0.55 | --zoom 0.4 | スクリーンレコーディングでより多くのコンテキストが見える |
| カーソル追跡 | 有効 | --no-cursor-track | 静的スクリーンコンテンツ(スライド、ドキュメント) |
| 沈黙検出 | 有効 | --no-silence | より高速な処理、単語の境界スナップのみ |
| スコア閾値 | 60 | (SKILL.md指示) | ハイライトが少ない長い動画の場合は低減 |
| セグメント長 | 15~55秒 | (SKILL.md指示) | プラットフォームごとに調整(TikTokは21~34秒を優先) |
| テンポラリディレクトリ | /tmp/claude-shorts/ | SHORTS_TMP環境変数 | /tmpスペースが限定されているシステム |
| エクスポートプラットフォーム | all | --platform youtube | シングルプラットフォームのターゲット設定 |
エラー復旧
- 文字起こしが失敗: venvのアクティベーション確認、VRAM少量の場合は
--model smallを試す - Remotionレンダリングが失敗:
cd remotion && npm install確認、node_modulesが存在することを確認 - エクスポートが失敗: FFmpegバージョン確認(
ffmpeg -version)、NVENCが失敗した場合はCPUエンコーディングを試す - ディスク容量が不足: $SHORTS_TMP/をクリーン、
df -h /tmpで確認
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- AgriciDaniel
- ライセンス
- MIT
- 最終更新
- 2026/5/2
Source: https://github.com/AgriciDaniel/claude-shorts / ライセンス: MIT
関連スキル
listenhub
あらゆることを説明できます。アイデアをポッドキャスト、解説動画、または音声ナレーションに変換します。 ユーザーが「ポッドキャストを作りたい」「解説動画を作成したい」「これを読み上げてほしい」「画像を生成したい」、または知識を音声・映像形式で共有したいときに使用します。トピックの説明、YouTubeリンク、記事URL、プレーンテキスト、画像プロンプトに対応しています。
best-youtube-video-editor
ClawHub上の「best-youtube-video-editor」スキルは、YouTube クリエイターのコンテンツ制作を革新します。タイムラインや複雑なソフトウェアを必要とせず、会話形式のAI駆動型ビデオ編集が可能です。無音部分のカット、チャプターマーカーの追加、字幕の挿入、ペーシングの調整、エクスポートの最適化——すべてが自然言語の指示で実現します。初回使用時には NemoVideo API を通じて認証情報を自動設定するため、有効化後数秒で編集を開始できます。YouTuber、教育関係者、ポッドキャスター、ブランドチャネル向けに開発され、品質を損なわず高速な納期対応が必要な方に最適です。mp4、mov、avi、webm、mkv 形式に対応しています。
video
ユーザーがAIツールやプログラマティックフレームワークを使用してビデオコンテンツを作成、生成、または制作したい場合に使用します。また、ユーザーが「ビデオ制作」「AIビデオ」「Remotion」「Hyperframes」「HeyGen」「Synthesia」「Veo」「Runway」「Kling」「Pika」「ビデオ生成」「AIアバター」「トーキングヘッドビデオ」「プログラマティックビデオ」「ビデオテンプレート」「解説ビデオ」「プロダクトデモビデオ」「ビデオパイプライン」または「ビデオを作ってほしい」と言及している場合にも使用します。ビデオ作成、生成、制作のワークフロー全般に対応できます。ビデオコンテンツの戦略や投稿内容については「social-content」を、有料ビデオ広告クリエイティブについては「ad-creative」をご参照ください。
clipify
ビデオから最も面白い瞬間を検出し、スタンドアロンクリップとしてカットできます。オプションで16:9から9:16へのリフォーマット(フェイスパンまたはスプリットスクリーン)に対応し、Opus風の単語ごとのキャプションを焼き込みます。ユーザーが「clipify」「このビデオからクリップをカットして」「これからショーツを作って」「面白い瞬間を見つけて」「9:16にリフレーミングして」「縦型クリップ」と言及したり、ビデオファイルパスを貼り付けてSNS対応のクリップを求める場合に使用します。
speech
ユーザーが音声生成、ナレーション、アクセシビリティ対応の読み上げ、音声プロンプト、またはOpenAI Audio APIによるバッチ音声生成をリクエストした場合に使用します。組み込みボイスを備えたバンドルCLI(`scripts/text_to_speech.py`)を実行でき、ライブ呼び出しには`OPENAI_API_KEY`が必要です。カスタムボイスの作成には対応していません。
depth-estimation
Depth Anything v2を使用したリアルタイム深度マップのプライバシー変換(CoreML + PyTorch対応) このスキルは、Depth Anything v2モデルを活用して、画像やビデオから取得した深度情報をリアルタイムで処理し、プライバシーを保護しながら変換します。CoreMLとPyTorchの両方に対応しており、エッジデバイスでの高速処理とクラウド環境での柔軟な運用が可能です。顔認識データのぼかしや背景の匿名化など、プライバシー関連の処理を効率的に実行できます。