compress-video について
compress-video は FFmpeg で動画を圧縮するスキルです。品質基準の CRF モードと目標サイズを指定する 2 パスエンコードに対応し、入力を調べて設定を提案した後、確認を得てから処理します。
主な機能
- 01ffprobe による入力の検査
- 02CRF または 2 パスエンコード
- 03H.264 と H.265 の選択
- 04目標サイズに応じたビットレート計算
- 05エンコード前の確認
活用シーン
- 01動画ファイルのサイズ縮小
- 02指定サイズに合わせた動画の作成
- 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を削除してください。
コメント
Markdown 対応