ffmpeg について
ffmpegは、ローカルの音声・動画ファイルを確認、変換するコマンドラインスキルです。事前チェックとメディア解析、定められたレシピを用い、既定では新しいファイルに出力します。
主な機能
- 01音声・動画メタデータの確認
- 02クリップのトリミングとトランスコード
- 03メディアセグメントの連結
- 04音声トラックの抽出
- 05サムネイルと GIF プレビューの作成
活用シーン
- 01ローカル動画の長さとコーデックの確認
- 02動画の指定時間範囲の切り出し
- 03互換性のある動画セグメントの結合
- 04動画から音声やプレビュー画像を出力
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ wyattowalsh/ agents --skill ffmpegインストール後、Claude Code で/ffmpegを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonreferences/probe-fields.mdrecipes-thumbnail-gif.mdrecipes-trim-transcode.mdsafety.mdscripts/check.pydoctor.pyprobe_media.pyscripts/asset_toolkit/validate_hooks.py詳細
FFmpeg
ffmpeg と ffprobe を使って、ローカルの音声/動画を調査・変換する CLI スキルです。/ffmpeg として呼び出します。
対象範囲: ディスク上のファイルのメタデータ調査、クリップのトリミング、コンテナ/コーデックのトランスコード、セグメントの連結、音声の抽出、サムネイルのキャプチャ、GIF プレビューの作成。AI による画像や動画の生成(draw-thing)、UI やレイアウトのデザイン(design)、ネットワーク経由のダウンロード(yt-dlp)、放送/ストリーミングのパイプラインには対応しません。
標準用語
| 用語 | 意味 | そうではないもの |
|---|---|---|
| probe | 読み取り専用の ffprobe 調査 | トランスコード |
| trim | 時間範囲を指定して短縮すること | UI モックアップのクロップ |
| transcode | 新しいコンテナ/コーデックに再多重化または再エンコードすること | 新しい画像の生成 |
| concat | 複数の入力を順番に連結すること | Git ブランチのマージ |
| extract-audio | 動画を取り除き、音声トラックを保持すること | 音声からテキストへの変換 |
| thumbnail | 動画から切り出す単一の静止フレーム | ポスターのレイアウトデザイン |
| gif | 動画クリップから作成するアニメーション GIF プレビュー | CSS アニメーション |
| stream copy | 再エンコードなしの -c copy | すべてのトリミングで常に安全な方法 |
| recipe | references/ の承認済みコマンドテンプレート | 場当たり的なフィルターグラフ |
ディスパッチ
$ARGUMENTS | モード | アクション |
|---|---|---|
doctor / check / preflight | Doctor | PATH の診断を実行し、ffmpeg/ffprobe が見つからない場合は停止します |
probe <path> / info <path> / metadata <path> | Probe | プローブヘルパーを実行し、ストリームと再生時間を要約します |
trim <path> <start> <end> / clip <path> ... | Trim | プローブし、コピーと再エンコードのレシピを選び、新しい出力パスを指定します |
transcode <path> / convert <path> to mp4 | Transcode | コーデックをプローブし、H.264/AAC またはコピーのレシピを適用します |
concat <file1> <file2> [...] / join ... | Concat | プローブを検証し、concat デマルチプレクサーのレシピと新しい出力パスを使用します |
extract-audio <path> / audio <path> | Extract audio | 音声ストリームをプローブし、MP3/M4A/コピーのレシピを使用します |
thumbnail <path> / thumb <path> [timestamp] | Thumbnail | フレームをシークし、新しいパスに JPG/PNG を書き込みます |
gif <path> / animate <path> [start] [duration] | GIF | 再生時間の上限を設けたパレット GIF のレシピを使用します |
| メディアのパス + 自然言語による編集意図 | Auto | 意図からトリミング/トランスコード/サムネイル/GIF を分類します |
| (空) | Help | モード、重要なルール、スクリプトコマンド、リファレンスを表示します |
自動検出のヒューリスティック
- インストール/ツールについて不明な点がある → Doctor。
- 「metadata」「codec」「duration」「how long」「what format」→ Probe。
- 「cut」「clip」「from ... to ...」、時間範囲 → Trim。
- 「mp4」「webm」「h264」「aac」「smaller」「compress」→ Transcode。
- 「join」「merge clips」「append videos」→ Concat。
- 「mp3」「wav」「m4a」「strip video」「audio only」→ Extract audio。
- 「poster frame」「screenshot」「still」「thumbnail」→ Thumbnail。
- 「gif」「animated preview」→ GIF。
- 画像/動画の生成に関する依頼 → 断り、
draw-thingを案内します。 - UI/ページ/レイアウトのデザインに関する依頼 → 断り、
designを案内します。 - 曖昧な場合 → どのモードかを尋ね、コピーと再エンコードのトレードオフを伝えます。
重要なルール
- 変更前にプローブする — トリミング、トランスコード、連結、音声抽出、サムネイル作成、GIF 作成の前に、すべてのソースファイルに対して
probe_media.pyを実行します。プローブのフィールドを使って、マップ、コーデック、再生時間の範囲を選択します。references/probe-fields.mdを参照してください。 - デフォルトでは上書きしない — 常に新しい出力パスに書き込みます。明示的なユーザーの承認とバックアップ/一時ファイルを使った置き換えがある場合に限り、同じ場所での置き換えが可能です。
references/safety.mdを参照してください。 - 変更にはレシピのみを使用する — ffmpeg コマンドは
references/recipes-trim-transcode.mdとreferences/recipes-thumbnail-gif.mdのみから作成します。承認なしに、独自のフィルターチェーンや破壊的な一括処理を行ってはいけません。
前提条件のプロトコル
変更を行う前に実行します。
uv run python scripts/doctor.py --format json
JSON の ok が false の場合は停止します。インストール方法:
brew install ffmpeg
入力ファイルごとに実行します。
uv run python scripts/probe_media.py /absolute/path/to/input.mp4
レシピを選択する前に、summary.duration_seconds、summary.stream_counts、およびコーデックのフィールドを解析します。
モードのプロトコル
Doctor
uv run python scripts/doctor.py --format jsonを実行します。checksのステータスと、failがある場合はその対処方法を報告します。ffmpeg-binaryまたはffprobe-binaryが失敗した場合は、ffmpeg による変更処理を実行しません。
Probe
- 読み取り可能なローカルファイルのパスが必要です。
uv run python scripts/probe_media.py <path>を実行します。- コンテナー、再生時間、映像/音声コーデック、解像度、ストリーム数を要約します。
- 回転、複数音声トラック、字幕ストリームを解釈する際は、
references/probe-fields.mdを読み込みます。
Trim
- ソースを調べ、
start/endがduration_secondsの範囲内か検証します。 - キーフレームとの位置合わせに問題がなければストリームコピーを優先し、問題がある場合は再エンコードによるトリミングのレシピを使用します。
basename.trim.extまたはユーザー指定の新しいパスに出力します。references/recipes-trim-transcode.mdを読み込みます。
Transcode
- ソースを調べ、コピーするか、H.264/AAC に再エンコードするかを判断します。
- 複数のトラックがある場合は、明示的にストリームをマッピングします。
- ユーザーから禁止されていない限り、MP4 をウェブ配信用にする際は
-movflags +faststartを含めます。 references/recipes-trim-transcode.mdを読み込みます。
Concat
- すべてのセグメントを調べ、ストリームコピーによる結合に対応するコーデック/解像度か確認します。
- 絶対パスを含む concat リストファイルを作成します。警告なしに、コーデックが異なる無関係な素材をコピーで結合してはいけません。
- 新しい
*.concat.mp4パスに出力します。 references/recipes-trim-transcode.mdを読み込みます。
Extract audio
- ソースを調べます。
stream_counts.audioが 0 の場合は、適切にエラーを処理します。 - 出力形式に応じて、MP3、M4A、またはコピーのレシピを選びます。
- 新しいファイルとして
basename.audio.extに書き出します。 references/recipes-trim-transcode.mdを読み込みます。
Thumbnail
- ソースを調べ、映像ストリームが少なくとも 1 つあることを確認します。
- タイムスタンプを決めます(ユーザー指定の値、または再生時間の 10%を 1~10 秒の範囲に収めた値)。
- JPG/PNG を
OUTPUT/または同じフォルダー内のパスに書き出します。ソースを上書きしてはいけません。 references/recipes-thumbnail-gif.mdを読み込みます。
GIF
- ソースを調べ、再生時間を制限します(ユーザーが延長しない限り、デフォルトの最大値は 5 秒です)。
- 品質を優先する場合は 2 パスのパレットレシピを使用します。クイックプレビューの場合に限り、1 パスを使用します。
- 新しいファイルとして
clip.gifと、必要に応じてpalette.pngを書き出します。 references/recipes-thumbnail-gif.mdを読み込みます。
Help (empty)
ディスパッチテーブル、重要なルール、doctor/probe コマンド、リファレンスの一覧、および以下のギャラリーを表示します。
Gallery (Empty Arguments)
$ARGUMENTS が空の場合は、一般的なローカルメディアのタスクを提示します。
| # | タスク | 例 |
|---|---|---|
| 1 | ツールの事前チェック | /ffmpeg doctor |
| 2 | メタデータを調べる | /ffmpeg probe ~/Movies/clip.mp4 |
| 3 | クリップをトリミングする | /ffmpeg trim ~/Movies/clip.mp4 00:00:05 00:00:15 |
| 4 | コンテナーをトランスコードする | /ffmpeg transcode ~/Movies/clip.mov |
| 5 | セグメントを結合する | /ffmpeg concat part1.mp4 part2.mp4 |
| 6 | 音声を抽出する | /ffmpeg extract-audio ~/Movies/clip.mp4 |
| 7 | ポスターフレーム | /ffmpeg thumbnail ~/Movies/clip.mp4 00:00:03 |
| 8 | GIF プレビュー | /ffmpeg gif ~/Movies/clip.mp4 00:00:02 4 |
番号、ディスパッチテーブルのモード、またはファイルパスを貼り付けて編集内容を説明してください。
スキルの判別
| シグナル | リダイレクト先 |
|---|---|
| 「画像を生成」「txt2img」「AI 動画」、ローカルの Draw Things | draw-thing |
| 「ランディングページをデザイン」「Figma」「React のレイアウト」 | design |
| 「YouTube/URL からダウンロード」 | yt-dlp |
| ライブストリーミング、RTMP、OBS の接続設定 | 対象範囲外 — ストリーミングのドキュメントを案内します |
リファレンスファイル
| ファイル | 読み込むタイミング |
|---|---|
references/safety.md | 変更処理、または上書きに関する質問がある場合 |
references/probe-fields.md | probe JSON を解釈する場合 |
references/recipes-trim-transcode.md | trim、transcode、concat、extract-audio の場合 |
references/recipes-thumbnail-gif.md | thumbnail、gif の場合 |
スクリプト
| スクリプト | 用途 |
|---|---|
scripts/doctor.py | PATH 上の ffmpeg/ffprobe を検証します(--format json) |
scripts/probe_media.py | 要約付きの ffprobe ラッパーです(ペイロード全体には --raw を指定) |
scripts/check.py | SKILL.md、evals、パッケージのドライラン、監査を検証します |
検証:
uv run python scripts/check.py
報告テンプレート
変更を加えた後は、以下を報告してください。
- Doctor のステータス(このセッションで実行した場合)
- プローブの概要(再生時間、コーデック、ストリーム)
- レシピ名(コピーまたは再エンコード)
- 実行した ffmpeg コマンドの正確な内容
- 出力先のパスとサイズの変化
- 注意点(キーフレームによるトリミング、音声の欠落、GIF の再生時間の上限)