Agent Skills by ALSEL
Anthropic Claude音声・動画・メディア⭐ リポ 91品質スコア 89/100

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[]配列を読み込み、以下を実行します:

  1. フィラーワード(um、uh、you know、like、sort of、I mean、right、basically、actually)を削除
  2. 周囲のコンテキストに基づいて明らかな音声認識エラーを修正
  3. 適切な場合は不完全な文フラグメントを統合
  4. すべてのタイムスタンプを変更しないtextフィールドのみを変更

クリーンアップされた文字起こしを$SHORTS_TMP/transcript_cleaned.jsonに書き込みます。transcript.jsonと同じJSONストラクチャー(segmentscaptions配列の両方)を使用します。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を使用してユーザーに尋ねます:

  1. どのセグメント? — 「all」、特定番号、または「none、re-analyze」
  2. キャプションスタイル? — bold(ALL CAPS ポップイン)、bounce(バウンシーカラフル)、clean(最小限フェード)
  3. プラットフォーム? — 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

スクリプトは:

  1. 文字起こしから単語レベルのタイムスタンプを読み込み
  2. 開始時刻を最寄りの単語の境界にスナップ(文の開始を優先)
  3. 3秒以内なら終了時刻を次の文の境界(. ? !)に拡張
  4. 最後の単語の後に300msのパディングを追加
  5. FFmpegのsilencedetectを使用してカットポイント付近の自然な一時停止を見つける
  6. 最小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/

レンダリングスクリプトは:

  1. Remotionプロジェクトを一度にバンドル(約5~10秒)
  2. 共有Chrome インスタンスを開く
  3. 各セグメントを順次レンダリング(各約15~30秒)
  4. 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秒。 ファイルが失敗した場合は、ユーザーに問題を報告します。失敗したファイルは、配信前に再レンダリングまたは再エクスポートする必要があります。

重要なルール

  1. 処理前に必ず飛行前準備を実行 します
  2. セグメントを承認のために必ず提示 します — ユーザー確認なしに自動レンダリングは実行しません
  3. 常にコストを報告 します — Remotionレンダリングは無料(ローカル)、唯一の潜在的コストはGPU電力です
  4. エラーを優雅に処理 します — ステップが失敗した場合は、エラーを報告して修正を提案します
  5. 成功時にクリーンアップ します — $SHORTS_TMP/をエクスポート後に削除するかどうかをユーザーに申し出ます
  6. ユーザーの選択を尊重 します — 「re-analyze」と言われた場合は、ステップ4に戻ります
  7. セグメント抽出時はストリームコピー します — セグメントをカットする場合は(-c copyを使用)、再エンコードは実行しません
  8. レンダリング中の進捗報告は1セグメントずつ です
  9. 必要に応じて参考資料を読み込み ます — ステップ4ではscoring-rubric.md、スタイル質問ではcaption-styles.mdを読み込みます

キャプションスタイルリファレンス

スタイルフォント見た目最適用途
boldMontserrat BoldALL CAPS、ポップイン、黄色のアクティブワードビジネス、教育、モチベーション
bounceBangersバウンシースケール、回転する明るい色エンターテイメント、リアクション、エネルギー
cleanInter 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
リポジトリ
AgriciDaniel/claude-shorts
ライセンス
MIT
最終更新
2026/5/2

Source: https://github.com/AgriciDaniel/claude-shorts / ライセンス: MIT

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: AgriciDaniel · AgriciDaniel/claude-shorts · ライセンス: MIT