mcpField
C
compress-video

compress-video

github.com/gupsammyクリエイティブ・メディア27637 回インストール5 日前に更新
リポジトリ

compress-video について

compress-video は FFmpeg で動画を圧縮するスキルです。品質基準の CRF モードと目標サイズを指定する 2 パスエンコードに対応し、入力を調べて設定を提案した後、確認を得てから処理します。

主な機能

  1. 01ffprobe による入力の検査
  2. 02CRF または 2 パスエンコード
  3. 03H.264 と H.265 の選択
  4. 04目標サイズに応じたビットレート計算
  5. 05エンコード前の確認

活用シーン

  1. 01動画ファイルのサイズ縮小
  2. 02指定サイズに合わせた動画の作成
  3. 03画質重視の圧縮設定の選択

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gupsammy/claudest --skill compress-video

インストール後、Claude Code で/compress-videoを入力して読み込まれたか確認します。

同梱ファイルscripts/calc_bitrate.py

詳細

動画の圧縮

品質ベース(CRF)またはサイズベース(2 パス)エンコードを使用して動画を圧縮します。

プロセス

1. 入力ファイルを取得する

ユーザーがファイルパスを指定していない場合は、続行する前に AskUserQuestion で確認してください。

2. ソースを調べる
ffprobe -v quiet -print_format json -show_streams -show_format "$INPUT"

以下を抽出します:再生時間(秒)、ファイルサイズ(バイト)、既存の動画コーデック、音声ビットレート。ffprobe に失敗した場合(ファイルが見つからない、有効な動画ではないなど)は、エラーを報告して停止してください。エンコードを試みてはいけません。

3. ユーザーの意図からモードを判断する
  • CRF モード(品質ベース):ユーザーが「品質を落とさずに」「高画質で」「サイズを小さくして」と言った場合、またはサイズの目標を指定していない場合
  • 2 パスモード(サイズベース):ユーザーが目標を指定した場合(「50 MB 未満」「20 MB 前後」「X に収まるように」など)
4. コーデックを選択する

H.264 は安全なデフォルトです。あらゆるデバイスと互換性があり、エンコードも高速です。サイズ削減の効果がエンコード時間の長さと対応デバイスの少なさに見合う場合にのみ、H.265 を使用してください。

  • H.265 / libx265:目標サイズが元のサイズの 50% 以下の場合、またはユーザーが「最大限に圧縮」/「HEVC」と指定した場合
  • H.264 / libx264:それ以外の場合。エンコードが高速で、幅広いデバイスに対応する安全なデフォルトです
5. コマンドを構成する

CRF モード:

ffmpeg -i "$INPUT" -c:v libx264 -crf 23 -c:a copy -movflags +faststart "$OUTPUT"
# CRF scale: 18=near-lossless, 23=default quality, 28=aggressive (visible loss)
# -movflags +faststart moves moov atom to front — enables progressive web playback

2 パスモード — まず動画ビットレートを計算します:

python3 ${CLAUDE_PLUGIN_ROOT}/skills/compress-video/scripts/calc_bitrate.py "$INPUT" --target-mb "$TARGET_MB"
# Outputs: VIDEO_BITRATE_KBPS (integer)
# Formula: (target_mb * 8192 / duration_s) - audio_bitrate_kbps
# Typical audio budget: 128 kbps
# Exit 1 = target too small (bitrate would go negative); report the error and ask for a larger target before retrying.

# Pass 1 — video analysis only, no output file:
ffmpeg -y -i "$INPUT" -c:v libx264 -b:v ${VIDEO_BITRATE_KBPS}k -pass 1 -an -f null /dev/null

# Pass 2 — final encode with audio:
ffmpeg -i "$INPUT" -c:v libx264 -b:v ${VIDEO_BITRATE_KBPS}k -pass 2 \
  -c:a aac -b:a 128k -movflags +faststart "$OUTPUT"
6. ユーザーに確認する

入力ファイルのサイズ、選択したコーデック、モード(CRF 値または計算したビットレート)、出力パスを提示します。実行前に承認を待ってください。

7. 実行して報告する

完了後、入力サイズから出力サイズへの変化と圧縮率を報告します(例:「73.2 MB → 18.4 MB、75% 削減」)。

主な判断事項

  • CRF モードでは、音声をロスレスで保持するために -c:a copy を使用します。2 パスモードでは、1 パス目は動画のみを処理して音声ストリームを扱わないため、音声を再エンコードする必要があります(AAC 128k)。
  • 入力がすでに H.264 で、ユーザーがトリミングまたはリマックスだけを希望している場合は、代わりに -c copy を指定した convert-video を推奨してください。処理は即座に完了し、ロスレスです。
  • H.265 で出力する場合は、libx265 に置き換え、Apple デバイスとの互換性のために -tag:v hvc1 を追加してください。
  • 2 パスエンコードの完了後に ffmpeg2pass-0.log と ffmpeg2pass-0.log.mbtree を削除してください。

コメント