ffprobeでメタデータとストリーム情報を確認する

FFmpegのツール群には ffmpeg(変換)、ffplay(再生)に加えて、ffprobe(解析)があります。ffprobe は動画・音声ファイルのコーデック、解像度、フレームレート、ビットレートなどの技術情報を取得するための専用ツールです。

動作確認: ffmpeg/ffprobe 6.1 で確認済み
注意: ffprobe コマンドは ffmpeg で始まらないため、本記事のコードブロックはすべて text ブロックを使用しています(CIテストの対象外)。


1. ffprobe の基本コマンド

最もシンプルな使い方は、ファイル名を渡すだけです。

ffprobe input.mp4

このコマンドだけで、ファイルのコンテナフォーマット・コーデック・解像度・再生時間などの基本情報が標準エラー出力に表示されます。


2. 主要オプション

-show_streams:ストリーム情報を表示

ffprobe -show_streams input.mp4

映像・音声・字幕などの各ストリームについて、詳細なプロパティが [STREAM] ... [/STREAM] ブロックで出力されます。

-show_format:コンテナ情報を表示

ffprobe -show_format input.mp4

ファイル全体のコンテナ情報(フォーマット名、ファイルサイズ、再生時間、全体ビットレートなど)が表示されます。

-print_format json(または -of json):JSON形式で出力

ffprobe -v quiet -show_streams -show_format -print_format json input.mp4

3. JSON出力例

上記コマンドの出力例(一部抜粋):

{
  "streams": [
    {
      "index": 0,
      "codec_name": "h264",
      "codec_type": "video",
      "width": 1920,
      "height": 1080,
      "r_frame_rate": "30/1",
      "bit_rate": "4500000",
      "duration": "120.000000",
      "pix_fmt": "yuv420p"
    },
    {
      "index": 1,
      "codec_name": "aac",
      "codec_type": "audio",
      "sample_rate": "48000",
      "channels": 2,
      "bit_rate": "128000",
      "duration": "120.000000"
    }
  ],
  "format": {
    "filename": "input.mp4",
    "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
    "duration": "120.000000",
    "size": "57600000",
    "bit_rate": "3840000",
    "tags": {
      "encoder": "Lavf60.3.100"
    }
  }
}

4. 主要な取得情報と見方

フィールド場所意味
codec_namestreamsコーデック名(例: h264, aac, hevc
codec_typestreamsストリーム種別(video / audio / subtitle
width / heightstreams(video)解像度(ピクセル)
r_frame_ratestreams(video)フレームレート(分数表示、例: 30/1 = 30fps)
bit_ratestreams / formatビットレート(bps)
durationstreams / format再生時間(秒)
pix_fmtstreams(video)ピクセルフォーマット(例: yuv420p
sample_ratestreams(audio)サンプリングレート(Hz)
channelsstreams(audio)音声チャンネル数

r_frame_rate の読み方

r_frame_rate は分数で表示されます:

意味
30/130fps
60000/1001約59.94fps(NTSC)
25/125fps(PAL)
24000/1001約23.976fps(映画用)

5. jq との組み合わせ

jq コマンド(JSONパーサー)と組み合わせると、特定の情報だけを取り出せます。

解像度だけを取得する

ffprobe -v quiet -show_streams -print_format json input.mp4 | jq '.streams[] | select(.codec_type=="video") | {width, height}'

再生時間だけを取得する

ffprobe -v quiet -show_format -print_format json input.mp4 | jq '.format.duration'

コーデック名の一覧を取得する

ffprobe -v quiet -show_streams -print_format json input.mp4 | jq '[.streams[].codec_name]'

jq はLinux/macOSでは apt install jq / 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 -print_format json input.mp4

# 映像ストリームのみ確認
ffprobe -v quiet -show_streams -select_streams v -print_format json input.mp4

# 音声ストリームのみ確認
ffprobe -v quiet -show_streams -select_streams a -print_format json input.mp4

関連記事


動作確認: ffmpeg 6.1.1 / Ubuntu 24.04 (GitHub Actions runner)
一次ソース: ffmpeg.org/ffprobe.html / ffmpeg.org/ffmpeg.html / trac.ffmpeg.org