ffprobe は、動画や音声ファイルのコーデック、解像度、フレームレート、ビットレートなどを調べるツールです。FFmpeg のツールの 1 つで、ffmpeg(変換)や ffplay(再生)と並ぶ、解析用のコマンドです。
出力を人に見せる前に: 結果には、ファイル名、個人フォルダーのパス、GPS(撮影場所)、撮影者、機種、日時、コメントが入っていることがあります。掲示板や問い合わせには丸ごと貼らず、必要な項目だけを貼ってください(確認と削除の方法は「動画共有前の個人情報チェック」)。
1. ffprobe の基本コマンド
いちばん簡単な使い方は、ファイル名だけを渡す方法です。
ffprobe input.mp4
ファイル形式(コンテナ)、コーデック、解像度、再生時間などの基本情報が表示されます。この表示は標準エラー出力に出るので、grep などに渡すときは 2>&1 を付けます。
2. 主要オプション
-show_streams:ストリーム情報を表示
ffprobe -show_streams input.mp4
映像・音声・字幕などのストリームごとに、詳しい情報が [STREAM] ... [/STREAM] の形で表示されます。
-show_format:コンテナ情報を表示
ffprobe -show_format input.mp4
ファイル全体の情報(形式名、ファイルサイズ、再生時間、全体のビットレートなど)が表示されます。
-of json:JSON形式で出力
ffprobe -v quiet -show_streams -show_format -of json input.mp4
-v quiet:ffprobe 自身のログを出さず、JSON だけを出力します-of json:出力を JSON 形式にします(-output_format jsonの短い書き方です。古い書き方の-print_formatも動きますが、非推奨です)-show_streamsと-show_formatを両方付けると、両方の情報が 1 つの JSON にまとまります
3. JSON出力例
上のコマンドの出力例です(一部だけ抜き出しています)。
{
"streams": [
{
"index": 0,
"codec_name": "h264",
"codec_type": "video",
"width": 1920,
"height": 1080,
"pix_fmt": "yuv420p",
"r_frame_rate": "30/1",
"duration": "120.000000",
"bit_rate": "4499954"
},
{
"index": 1,
"codec_name": "aac",
"codec_type": "audio",
"sample_rate": "48000",
"channels": 2,
"duration": "120.000000",
"bit_rate": "128259"
}
],
"format": {
"filename": "input.mp4",
"format_name": "mov,mp4,m4a,3gp,3g2,mj2",
"duration": "120.000000",
"size": "69551765",
"bit_rate": "4636784",
"tags": {
"encoder": "Lavf62.12.100"
}
}
}
4. 主要な取得情報と見方
| フィールド | 場所 | 意味 |
|---|---|---|
codec_name |
streams | コーデック名(例: h264, aac, hevc) |
codec_type |
streams | ストリーム種別(video / audio / subtitle) |
width / height |
streams(video) | 解像度(ピクセル) |
r_frame_rate |
streams(video) | FFmpeg が推定した基準のフレームレート(分数表示、例: 30/1 = 30fps) |
bit_rate |
streams / format | ビットレート(bps) |
duration |
streams / format | 再生時間(秒) |
pix_fmt |
streams(video) | ピクセルフォーマット(例: yuv420p) |
sample_rate |
streams(audio) | サンプリングレート(Hz) |
channels |
streams(audio) | 音声チャンネル数 |
r_frame_rate の読み方
r_frame_rate は、FFmpeg が推定した基準のフレームレートで、平均ではありません。フレームレートが一定でない動画(可変フレームレート)では、平均を表す avg_frame_rate と値が違うことがあります。どちらも分数で表示されます。
| 値 | 意味 |
|---|---|
30/1 |
30fps |
60000/1001 |
約59.94fps(NTSC) |
25/1 |
25fps(PAL) |
24000/1001 |
約23.976fps(映画用) |
5. jq との組み合わせ
jq(JSON から必要な値を取り出すコマンド)を使うと、特定の情報だけを取り出せます。
解像度だけを取得する
ffprobe -v quiet -select_streams v:0 -show_streams -of json input.mp4 | jq ".streams[] | {width, height}"
再生時間だけを取得する
ffprobe -v quiet -show_format -of json input.mp4 | jq ".format.duration"
コーデック名の一覧を取得する
ffprobe -v quiet -show_streams -of json input.mp4 | jq "[.streams[].codec_name]"
jq は、Linux なら apt install jq、macOS なら brew install jq、Windows なら winget install jqlang.jq でインストールできます。
6. ffmpeg -i との違い
ffmpeg -i ファイル名 でもストリーム情報は見られますが、使いどころが違います。
| コマンド | 目的 | 出力先 | スクリプト対応 |
|---|---|---|---|
ffprobe |
ファイル解析専用 | 標準出力(JSON等) | 適している |
ffmpeg -i |
変換コマンドの情報確認 | 標準エラー出力 | 解析しにくい |
スクリプトや自動処理でファイル情報を取り出すなら、ffprobe を使ってください。ffmpeg -i は変換の前にさっと確認する用途向けで、表示は標準エラー出力に出ます。
よくある使い方まとめ
# 基本情報の確認(手軽)
ffprobe input.mp4
# JSON形式で全情報を取得(スクリプト用)
ffprobe -v quiet -show_streams -show_format -of json input.mp4
# 映像ストリームのみ確認
ffprobe -v quiet -show_streams -select_streams v -of json input.mp4
# 音声ストリームのみ確認
ffprobe -v quiet -show_streams -select_streams a -of json input.mp4
関連記事
よくある質問
動画の duration を数値で取りたい
ffprobe -v quiet -of csv=p=0 -show_entries format=duration in.mp4 を実行すると、秒数が小数付きで 1 行だけ出ます。そのままスクリプトで使えます。
ストリームの bit_rate と format の bit_rate の違いは?
ストリームの bit_rate は、そのストリームだけのビットレートです。format=bit_rate は、音声を含むすべてのストリームと、コンテナの管理データを合わせた、ファイル全体の平均です。ファイルサイズの計算には format=bit_rate を、映像がどれだけ圧縮されているかを見るには映像ストリームの bit_rate を使います。
フォルダ内全ファイルの全ストリームを一覧したい
for f in *.mp4; do ffprobe -v quiet -of json -show_streams "$f" | jq ...; done のようにループで回します。JSON で出しておくと、あとの処理が楽です。
bit_rate が “N/A” になる
MKV や WebM には、ストリームごとのビットレートを記録していないものがあります。その場合、ストリームごとの値は出ません。ファイル全体の平均(ファイルサイズのビット数 ÷ 秒数)なら、format=bit_rate で分かります。
チャプター情報を取れる?
取れます。ffprobe -v quiet -of json -show_chapters input.mp4 で、チャプターごとの時刻とタイトルが出ます。DVD や Blu-ray から取り込んだファイルによく入っています。