ffprobe ノート¶
ffprobe は MP4 ファイルなどから情報を収集し、何らかのテキスト形式で出力する。例えば、使用されているコンテナーの形式や、その中に含まれる各メディアストリームの属性を確認するといった用途に向いている。
ffprobe は、スタンドアロンアプリケーションとして、またはテキストフィルターと組み合わせて、より高度な処理、例えば統計処理やプロットを行うというような用途に便利だ。コマンドの構文は次のように単純なものだ:
bash$ ffprobe [options] input_url
例:フレーム数を得る¶
簡単かつ一般的な例を挙げて、重要なコマンドラインオプションのいくつかを習得する。例えば、ビデオのフレーム数を得るには次のコマンドを実行するのだが、長くて覚えられない:
bash$ ffprobe \
-select_streams v:0
-count_frames \
-show_entries stream=nb_read_frames \
-print_format csv \
input.mp4
オプション -select_streams STREAM_SPEC
を用いると、指定ストリームしか選択しない。ストリームに関連するオプションにしか影響しない(後で述べる)。この例ではストリーム指定が v:0
であるので、映像 0 のみを選択する。忘れぬうちに述べておくと FFmpeg では序数を 0 から開始する。
オプション -count_frames
はストリームごとにフレーム数を勘定し、対応するストリームセクション (nb_read_frames
) に報告するものだ。この例ではストリーム指定が v:0
なので、映像 0 のフレーム数しか報告しない。
オプション -show_entries SECTION_ENTRIES
はエントリーのリストを指定してそれらの情報を出力する。セクション名を指定し、その後に =
を付けない場合、含まれるすべてのセクションとともにエントリーすべてが出力される。この例では
stream=nb_read_frames
なので、対応ストリーム v:0
全体ではなく、その
nb_read_frames
だけが出力される。このオプションについては後ほど詳述する。
オプション -print_format WRITER
については後述。この例では csv
なので
CSV 形式のテキストが出力される。
ファイルの構成を把握する¶
ffprobe の出力するセクションの構造および情報を出力する。実行結果を一度は見ておくことを強く勧める。後ほど述べる -show
系オプション各種の意味を把握しやすくなる。
ffprobe -show_sections input.mp4
セクションエントリーを出力する¶
先述のように、オプション -show_entries SECTION_ENTRIES
を指定する。
SECTION_ENTRIES
はセクションエントリーの一覧をコロンで区切った文字列を指定する。セクションエントリーそれぞれは、セクション名と、オプションでそのセクションにローカルなエントリーのリストがカンマ ,
で区切られた形で続く。例えば
width,height
など。セクション名を指定し、その後に =
を付けない場合、含まれるすべてのセクションとともにエントリーすべてが出力される。
例コマンドをいくつか挙げる:
bash$ ffprobe -of flat -select_streams v:0 -show_entries stream=width,height input.mp4
bash$ ffprobe -of default=nw=1 -select_streams v:0 -show_entries packet=pts_time input.mp4 | head
bash$ ffprobe -show_entries stream=duration input.mp4
bash$ ffprobe -select_streams v:0 -show_entries frame=pict_type input.mp4 | head
bash$ ffprobe -select_streams v:0 -show_entries stream=bit_rate input.mp4
bash$ ffprobe -select_streams v:0 -show_entries stream=codec_name,codec_long_name,profile,codec_tag_string input.mp4
bash$ ffprobe -select_streams v:0 -show_entries stream=pix_fmt input.mp4
ファイル要素の情報を得る¶
次の四オプションについて記す:
-show_streams
-show_format
-show_packets
-show_frames
bash$ ffprobe -show_streams input.mp4
bash$ ffprobe -show_format input.mp4
bash$ ffprobe -show_packets input.mp4
bash$ ffprobe -show_frames input.mp4
ストリーム情報を得る¶
オプション -show_streams
は入力に含まれるストリームの情報を出力する。オプション -print_format
の値にもよるが、ストリーム情報は出力の STREAMS
というセクションに含まれる。例えば JSON 形式で出力すると、次のような構造のテキストが出力される(キー名は小文字になる):
{
"streams": [
{
...
},
...
]
}
映像ストリームと音声ストリームとで構成が異なるので、詳しくは手許の適当なビデオファイルで確認するといい。
コンテナー形式を得る¶
オプション -show_format
は入力のコンテナー形式に関する情報を表示する。各属性はセクション FORMAT
に先のオプションと同様に含まれる。この出力で確認できる有用そうな属性を挙げておく:
filename
nb_streams
format_name
format_long_name
start_time
duration
size
bit_rate
パケット情報を得る¶
オプション -show_packets
は入力が含むパケットに関する情報を表示する。例によって各パケットの情報は PACKET
という名前を持つ専用のセクションにある。
パケットというのは、音声や映像のデータの送受信単位だと考えられる。各パケットにはファイルの小さな断片が含まれている。プレイヤーはこのパケットの流れを受け取り、映像や音声に変換して再生する。
フレームまたは字幕情報を得る¶
オプション -show_frames
は入力が含む各フレームおよび字幕の情報を表示する。例によって各フレームの情報は FRAME
または SUBTITLE`` という名称の専用セクションにある。
フレームには media_type
という属性があり、この値によって構成が異なる。例:video
には width
, height
があるが、audio
にはない。
出力書式を指定する¶
ffprobe のオプション -print_format
a.k.a. -of
の引数
WRITER
について記す。
WRITER
には ffprobe が対応する出力書式を与える。さらに、WRITER
は採用するオプションを指定する一つ以上の引数を受け取ることができる。オプションはコロンで区切られた key=value
のペアのリストとして与えるものとする。
また、各書式オプションにはさらにオプションが用意されているものがある。有効な WRITER
のうち、よく用いられるものを次に挙げる:
Writer |
Format |
---|---|
|
既定の書式 |
|
CSV |
|
プレーンテキスト |
|
XML |
|
JSON |
default
¶
書式 default
は次のような出力をする:
[SECTION]
key1=val1
...
keyN=valN
[/SECTION]
次のオプションがあり、どれも利用価値がある。既定値は 0
なので出力が長くなる。
nokey
,nk
1
を指定すると、フィールドのキー部分を出力しないようになる。[SECTION] val1 ... valN [/SECTION]
noprint_wrappers
,nw
1
を指定すると、セクションタグを出力しないようになる。key1=val1 ... keyN=valN
csv
¶
既定では、書式 csv
は次のような出力を生じる:
section,val1, ... ,valN
次のオプションがある:
item_sep
,s
カンマ以外の文字で区切りたい場合にはこのオプションでそれを指示する。
nokey
,nk
書式 default と意味は同じ。ただし書式
csv
では既定値が1
であることが異なる。escape
,e
エスケープ方法を
c
,csv
,none
から指定する。今はこのオプションの存在を知ってさえいればいい。print_section
,p
各行の先頭にセクション名を出力する (
1
) かどうか。
flat
¶
平坦な出力をする。
各行が streams.stream.3.tags.foo=bar
のような明示的な key=value
を含む自由形式の出力だ。出力はシェルエスケープされており、区切り文字が英数字かアンダースコアである限り、シェルスクリプトに直接埋め込める。
json
¶
各セクションを JSON 記法で出力する。改行文字を調整するオプションがある。
compact
,c
1
に設定すると各セクションが一行で出力される。
xml
¶
XML 形式で出力する。FFmpeg の datadir
に XML スキーマ記述ファイル
ffprobe.xsd
がインストールされている。このスキーマの最新版は
<http://www.ffmpeg.org/schema/ffprobe.xsd> にある(実際は開発版にリダイレクト)。