動画メタデータ分析ガイド:FFprobeでコンテナ、コーデック、フレームレート、ビットレートを読み解く
ビデオの情報を確認したい:どのコーデックを使用しているか?ビットレートはどれくらいか?フレームレートは?解像度は?FFprobeを使えばこれらすべての情報を取得できます。このガイドでは、動画メタデータの分析からFFprobeの実践までをカバーします。
メタデータの基礎
動画ファイルのメタデータは、ファイル自体に関する情報です:
コンテナレベルのメタデータ
- フォーマット:MP4、MKV、WebM、TSなど
- 全体ビットレート:1秒あたりのデータ量
- 再生時間:ビデオの長さ
- ファイルサイズ
ストリームレベルのメタデータ
- ビデオストリーム:コーデック、解像度、フレームレート、ビットレート
- オーディオストリーム:コーデック、サンプリングレート、チャンネル数、ビットレート
- 字幕ストリーム:言語、フォーマット
FFprobe基本コマンド
インストール
FFprobeはFFmpegに含まれています:
bash
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt install ffmpeg基本的な情報表示
bash
# 基本情報
ffprobe input.mp4
# 詳細情報
ffprobe -v error -show_format -show_streams input.mp4
# JSON形式
ffprobe -v error -show_format -show_streams -of json input.mp4主要なメタデータフィールド
コンテナ情報
bash
# フォーマット名
ffprobe -v error -show_entries format=format_name -of default=noprint_wrappers=1 input.mp4
# 全体ビットレート
ffprobe -v error -show_entries format=bit_rate -of default=noprint_wrappers=1 input.mp4
# 再生時間(秒)
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1 input.mp4
# ファイルサイズ(バイト)
ffprobe -v error -show_entries format=size -of default=noprint_wrappers=1 input.mp4ビデオストリーム情報
bash
# コーデック
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1 input.mp4
# 解像度
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of default=noprint_wrappers=1 input.mp4
# フレームレート
ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1 input.mp4
# ビットレート
ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1 input.mp4
# ピクセルフォーマット
ffprobe -v error -select_streams v:0 -show_entries stream=pix_fmt -of default=noprint_wrappers=1 input.mp4オーディオストリーム情報
bash
# コーデック
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=noprint_wrappers=1 input.mp4
# サンプリングレート
ffprobe -v error -select_streams a:0 -show_entries stream=sample_rate -of default=noprint_wrappers=1 input.mp4
# チャンネル数
ffprobe -v error -select_streams a:0 -show_entries stream=channels -of default=noprint_wrappers=1 input.mp4
# ビットレート
ffprobe -v error -select_streams a:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1 input.mp4実用的なスクリプト
全情報を一度に取得
bash
#!/bin/bash
# video_info.sh
video="$1"
echo "=== コンテナ情報 ==="
ffprobe -v error -show_entries format=format_name,duration,bit_rate,size -of default=noprint_wrappers=1 "$video"
echo ""
echo "=== ビデオストリーム ==="
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,width,height,r_frame_rate,bit_rate,pix_fmt -of default=noprint_wrappers=1 "$video"
echo ""
echo "=== オーディオストリーム ==="
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name,sample_rate,channels,bit_rate -of default=noprint_wrappers=1 "$video"JSON形式で全情報
bash
ffprobe -v error -show_format -show_streams -of json input.mp4 > metadata.jsonバッチ処理
bash
#!/bin/bash
# batch_info.sh
for file in *.mp4; do
echo "=== $file ==="
duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1 "$file")
bitrate=$(ffprobe -v error -show_entries format=bit_rate -of default=noprint_wrappers=1 "$file")
resolution=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 "$file")
echo "長さ: $duration 秒"
echo "ビットレート: $bitrate bps"
echo "解像度: $resolution"
echo ""
doneよくあるメタデータ問題
1. ビットレートがN/Aと表示される
一部のコンテナ(MP4など)はストリームビットレートを記録しません。解決策:
bash
# ファイルサイズと再生時間から計算
size=$(ffprobe -v error -show_entries format=size -of default=noprint_wrappers=1 input.mp4)
duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1 input.mp4)
bitrate=$(echo "scale=0; $size * 8 / $duration" | bc)
echo "推定ビットレート: $bitrate bps"2. フレームレートが分数で表示される
bash
# r_frame_rateは分数形式(例:30000/1001 = 29.97fps)
ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1 input.mp4
# 小数形式に変換
ffprobe -v error -select_streams v:0 -show_entries stream=avg_frame_rate -of default=noprint_wrappers=1 input.mp4 | awk -F'/' '{print $1/$2}'3. 複数のオーディオトラック
bash
# すべてのオーディオストリーム情報
ffprobe -v error -select_streams a -show_entries stream=index,codec_name,language,channels -of default=noprint_wrappers=1 input.mp4メタデータの修正
メタデータの追加
bash
# タイトルと作成者を追加
ffmpeg -i input.mp4 -metadata title="My Video" -metadata author="John Doe" -c copy output.mp4メタデータの削除
bash
# すべてのメタデータを削除
ffmpeg -i input.mp4 -map_metadata -1 -c copy output.mp4まとめ
FFprobeは動画メタデータ分析の強力なツールです:
- 基本情報:
ffprobe input.mp4 - 詳細情報:
ffprobe -show_format -show_streams input.mp4 - JSON形式:
ffprobe -of json input.mp4 - 特定フィールド:
-show_entriesを使用
クイックリファレンス:
- 全体ビットレート:
-show_entries format=bit_rate - ビデオ情報:
-select_streams v:0 -show_entries stream=... - オーディオ情報:
-select_streams a:0 -show_entries stream=... - JSON出力:
-of json