Help us understand the problem. What is going on with this article?

ffprobeで動画を解析する

More than 3 years have passed since last update.

ffprobeとはマルチメディアストリーム情報を解析し、人間もしくは機会が理解出来る形式で出力するツールです。

ffprobeのインストール

ffprobeはffmpegに含まれているのでffmpegをインストールします。

% brew install ffmpeg

ffprobeの使い方

コマンド構成

ffprobe [オプション] [入力ファイル]

入力ファイルの解析

ffprobe 入力ファイル
出力例
% ffprobe XXX.ts
ffprobe version 3.1.2 Copyright (c) 2007-2016 the FFmpeg developers
  built with Apple LLVM version 7.3.0 (clang-703.0.31)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.1.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --disable-lzma --enable-vda
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 47.100 /  6. 47.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
[mpegts @ 0x7fc7ba008000] start time for stream 0 is not set in estimate_timings_from_pts
Input #0, mpegts, from 'XXX.ts':
  Duration: 00:00:02.04, start: 2.154811, bitrate: 1963 kb/s
  Program 1
    Stream #0:0[0x102]: Data: timed_id3 (ID3  / 0x20334449)
    Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv), 1024x576 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
    Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 94 kb/s
Unsupported codec with id 100358 for input stream 0

入力ファイルが開けない、もしくはマルチメディアファイルとして認識できない場合は正の値の戻り値を返して終了します。

失敗例
% ffprobe XXX.pdf -hide_banner
XXX.pdf: Invalid data found when processing input
% echo $?
1 <- 正の値の戻り値

オプション

ヘルプ [-h]

マルチメディア形式ごとにオプション異なったりするので、不明点ある時はヘルプオプションを使いましょう。

特定のヘルプを表示 [-h topic]

デコーダで絞る例
% ffprobe -h decoder=h264 -hide_banner

指定できるデコーダ一覧は ffprobe -decoders で取得できます。

エンコーダで絞る例
% ffprobe -h encoder=h264_videotoolbox -hide_banner

指定できるエンコーダ一覧は ffprobe -encoders で取得できます。

デマルチプレクサで絞る例
% ffprobe -h demuxer=hls -hide_banner

指定できるデマルチプレクサ一覧は ffprobe -formats で取得できます。
(先頭にDがついているのがデマルチプレクサです)

マルチプレクサで絞る例
% ffprobe -h muxer=hls -hide_banner

指定できるデマルチプレクサ一覧は ffprobe -formats で取得できます。
(先頭にEがついているのがマルチプレクサです)

バナーを隠す [-hide_banner]

以下のようなバナー(バージョンやライブラリ情報など)を表示したくない時に使いましょう。

バナー部
% ffprobe XXX.ts -hide_banner
ffprobe version 3.1.2 Copyright (c) 2007-2016 the FFmpeg developers
  built with Apple LLVM version 7.3.0 (clang-703.0.31)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.1.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --disable-lzma --enable-vda
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 47.100 /  6. 47.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100

フォーマット/コンテナ情報表示 [-show_format]

フォーマット、サイズ、ビットレート情報を表示します。

% ffprobe XXX.ts -hide_banner -show_format                                                                                                                          [mpegts @ 0x7ff284000400] start time for stream 0 is not set in estimate_timings_from_pts
Input #0, mpegts, from 'XXX.ts':
  Duration: 00:00:02.04, start: 2.154811, bitrate: 1963 kb/s
  Program 1
    Stream #0:0[0x102]: Data: timed_id3 (ID3  / 0x20334449)
    Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv), 1024x576 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
    Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 94 kb/s
Unsupported codec with id 100358 for input stream 0
[FORMAT]
filename=XXX.ts
nb_streams=3
nb_programs=1
format_name=mpegts
format_long_name=MPEG-TS (MPEG-2 Transport Stream)
start_time=2.154811
duration=2.044522
size=501772
bit_rate=1963381
probe_score=50
[/FORMAT]

フレーム情報表示 [-show_frames]

フレーム情報を表示します。

% ffprobe XXX.ts -hide_banner -show_frames
[mpegts @ 0x7fdafa803a00] start time for stream 0 is not set in estimate_timings_from_pts
Input #0, mpegts, from 'XXX.ts':
  Duration: 00:00:02.04, start: 2.154811, bitrate: 1963 kb/s
  Program 1
    Stream #0:0[0x102]: Data: timed_id3 (ID3  / 0x20334449)
    Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv), 1024x576 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
    Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 94 kb/s
Unsupported codec with id 100358 for input stream 0
[FRAME]
media_type=audio
stream_index=2
key_frame=1
pkt_pts=193933
pkt_pts_time=2.154811
pkt_dts=193933
pkt_dts_time=2.154811
best_effort_timestamp=193933
best_effort_timestamp_time=2.154811
pkt_duration=2089
pkt_duration_time=0.023211
pkt_pos=376
pkt_size=287
sample_fmt=fltp
nb_samples=1024
channels=2
channel_layout=stereo
[/FRAME]
[FRAME]
media_type=video
stream_index=1
key_frame=1
pkt_pts=197910
pkt_pts_time=2.199000
pkt_dts=197910
pkt_dts_time=2.199000
best_effort_timestamp=197910
best_effort_timestamp_time=2.199000
pkt_duration=3000
pkt_duration_time=0.033333
pkt_pos=1316
pkt_size=37483
width=1024
height=576
pix_fmt=yuv420p
sample_aspect_ratio=1:1
pict_type=I
coded_picture_number=0
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
[/FRAME]
.
.
.

指定のエントリーを表示 [-show_entries section_entries]

特定の情報だけを取得できるので便利。

以下の例だとFORMATセクションのビットレート(bit_rate)を表示

% ffprobe XXX.ts -hide_banner -show_entries format=bit_rate                                                                                                         [mpegts @ 0x7fa3c9000000] start time for stream 0 is not set in estimate_timings_from_pts
Input #0, mpegts, from 'XXX.ts':
  Duration: 00:00:02.04, start: 2.154811, bitrate: 1963 kb/s
  Program 1
    Stream #0:0[0x102]: Data: timed_id3 (ID3  / 0x20334449)
    Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv), 1024x576 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
    Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 94 kb/s
Unsupported codec with id 100358 for input stream 0
[FORMAT]
bit_rate=1963381
[/FORMAT]
.
.
.

section_entries は以下の構成になっており、

section_entries
LOCAL_SECTION_ENTRIES ::= SECTION_ENTRY_NAME[,LOCAL_SECTION_ENTRIES]
SECTION_ENTRY         ::= SECTION_NAME[=[LOCAL_SECTION_ENTRIES]]
SECTION_ENTRIES       ::= SECTION_ENTRY[:SECTION_ENTRIES]

以下のように複合的に検索することも可能。
(FORMATセクションのビットレート(bit_rate)エントリーとFRAMEセクションのメディア種別(media_type)、PTS秒数、DTS秒数を表示)

% ffprobe XXX.ts -hide_banner -show_entries format=bit_rate:frame=media_type,pkt_pts_time,pkt_dts_time
[mpegts @ 0x7f949b008400] start time for stream 0 is not set in estimate_timings_from_pts
Input #0, mpegts, from 'XXX.ts':
  Duration: 00:00:02.04, start: 2.154811, bitrate: 1963 kb/s
  Program 1
    Stream #0:0[0x102]: Data: timed_id3 (ID3  / 0x20334449)
    Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv), 1024x576 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
    Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 94 kb/s
Unsupported codec with id 100358 for input stream 0
[FRAME]
media_type=video
pkt_pts_time=4.166000
pkt_dts_time=4.166000
[/FRAME]
[FORMAT]
bit_rate=1963381
[/FORMAT]
.
.
.

パケット情報を表示 [-show_packets]

% ffprobe XXX.ts -hide_banner -show_packets
[mpegts @ 0x7fb084008400] start time for stream 0 is not set in estimate_timings_from_pts
Input #0, mpegts, from 'XXX.ts':
  Duration: 00:00:02.04, start: 2.154811, bitrate: 1963 kb/s
  Program 1
    Stream #0:0[0x102]: Data: timed_id3 (ID3  / 0x20334449)
    Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv), 1024x576 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
    Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 94 kb/s
Unsupported codec with id 100358 for input stream 0
[PACKET]
codec_type=audio
stream_index=2
pts=193933
pts_time=2.154811
dts=193933
dts_time=2.154811
duration=2089
duration_time=0.023211
convergence_duration=N/A
convergence_duration_time=N/A
size=301
pos=376
flags=K
[/PACKET]
.
.
.

プログラム情報を表示 [-show_programs]

プログラム情報(ストリーム情報含む)を表示

% ffprobe XXX.ts -hide_banner -show_programs
[mpegts @ 0x7fe0e4008400] start time for stream 0 is not set in estimate_timings_from_pts
Input #0, mpegts, from 'XXX.ts':
  Duration: 00:00:02.04, start: 2.154811, bitrate: 1963 kb/s
  Program 1
    Stream #0:0[0x102]: Data: timed_id3 (ID3  / 0x20334449)
    Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv), 1024x576 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
    Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 94 kb/s
Unsupported codec with id 100358 for input stream 0
[PROGRAM]
program_id=1
program_num=1
nb_streams=3
pmt_pid=4095
pcr_pid=256
start_pts=2154811
start_time=2.154811
end_pts=4199333
end_time=4.199333
[STREAM]
...
[/STREAM]
[/PROGRAM]

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

% ffprobe XXX.ts -hide_banner -show_streams
[mpegts @ 0x7ffc9b000000] start time for stream 0 is not set in estimate_timings_from_pts
Input #0, mpegts, from 'XXX.ts':
  Duration: 00:00:02.04, start: 2.154811, bitrate: 1963 kb/s
  Program 1
    Stream #0:0[0x102]: Data: timed_id3 (ID3  / 0x20334449)
    Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv), 1024x576 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
    Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 94 kb/s
Unsupported codec with id 100358 for input stream 0
[STREAM]
index=0
codec_name=timed_id3
codec_long_name=timed ID3 metadata
profile=unknown
codec_type=data
codec_tag_string=ID3
codec_tag=0x20334449
id=0x102
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/90000
start_pts=193933
start_time=2.154811
duration_ts=184007
duration=2.044522
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
[/STREAM]
[STREAM]
index=1
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=Main
codec_type=video
codec_time_base=1/60
codec_tag_string=[27][0][0][0]
codec_tag=0x001b
width=1024
height=576
coded_width=1024
coded_height=576
has_b_frames=0
sample_aspect_ratio=1:1
display_aspect_ratio=16:9
pix_fmt=yuv420p
level=41
color_range=tv
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
timecode=N/A
refs=1
is_avc=false
nal_length_size=0
id=0x100
r_frame_rate=30/1
avg_frame_rate=30/1
time_base=1/90000
start_pts=197910
start_time=2.199000
duration_ts=180030
duration=2.000333
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
[/STREAM]
[STREAM]
index=2
codec_name=aac
codec_long_name=AAC (Advanced Audio Coding)
profile=LC
codec_type=audio
codec_time_base=1/44100
codec_tag_string=[15][0][0][0]
codec_tag=0x000f
sample_fmt=fltp
sample_rate=44100
channels=2
channel_layout=stereo
bits_per_sample=0
id=0x101
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/90000
start_pts=193933
start_time=2.154811
duration_ts=177632
duration=1.973689
bit_rate=94057
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
[/STREAM]

チャプター情報を表示 [-show_chapters]

フォーマットに保存されたチャプターに関する情報を表示します。

% ffprobe XXX.mp4 -hide_banner -show_chapters
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'XXX.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2014-10-02 00:22:55
  Duration: 00:02:21.80, start: 0.000000, bitrate: 1120 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 926 kb/s, 30 fps, 30 tbr, 30 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 191 kb/s (default)
    Metadata:
      creation_time   : 2014-10-02 00:22:56
      handler_name    : IsoMedia File Produced by Google, 5-11-2011

ログレベルの設定 [-v ログレベル]

ログレベル に指定できるのは下記の通りで、下にいくほど情報が増えていきます。

  • quiet - ログを出力しない
  • panic - クラッシュを引き起こす致命的なエラーのみ表示(現在未使用)
  • fatal - 致命的なエラーのみ表示
  • error - すべてのエラーを表示
  • warning - すべての警告、エラーを表示
  • info - 警告、エラーを含む実行中の有益な情報を表示
  • verbose - infoと同等のレベルの情報をより詳細に表示する
  • debug - デバッグ用情報を含むすべての情報を表示
  • trace - トレース情報を表示

ちなみにログはstderrに出力されるので、下記のように実行すればffprobeの実行結果とログを分離してファイル出力できます。

% ffprobe XXX.ts -show_streams -v error >result.txt  2>log.txt

出力形式の設定 [-of, -print_format 形式名[=形式オプション] ]

形式名には下記の通りです。

  • default - 文字通りデフォルトです。出力形式を指定しなかった時はこれになります。
  • compact - 項目を キー=値 の形式で表し、各項目間は | で分割する。
  • csv - CSV形式
  • flat - 項目を streams.stream.0.index=0 の形式で表し、各項目間は改行コードで分割する。
  • ini - INI形式
  • json - JSON形式
  • xml - XML形式

人間の見やすい形で表示 [-pretty]

単位をつけたり、時間をHH:MM:SS.MICROSECONDS形式にしたりして、人間の見やすい形にする。
-unit -prefix -byte_binary_prefix -sexagesimal のオプションを指定した時と同じ挙動。

デフォルト -pretty
start_time 100.154811 0:01:40.154811
bit_rate 94057 94.057000 Kbit/s
sample_rate 44100 44.100000 KHz

オプションの説明だけで結構な量になってしまったので、この記事は一旦これくらいで。
別記事で続ける予定です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした