[Top] [Contents] [Index] [ ? ]

ffprobe Documentation


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1. 概要

一般的な構文は次のとおりです:

 
ffprobe [options] [‘input_file’]

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2. 説明

ffprobe はマルチメディアストリームから情報を集めて、 ヒトあるいはマシンが読める形にそれを出力します。

例えば、あるマルチメディアストリームによって使われている コンテナの形式、それに含まれている各メディアストリームの 形式やタイプを確認するために使うことができます。

入力でファイル名を指定すれば、ffprobe はそれを開いて そのファイルの内容を調査しようとします。そのファイルが開けない、 またはマルチメディアファイルとして認識できなかった場合には、 正の終了コードを返します。

ffprobe はスタンドアロンのアプリケーションとしても使えますし、 より洗練された処理、例えば統計処理やプロットを実行する テキストフィルターと組み合わせて使うこともできます。

オプションは ffprobe によってサポートされている形式のいくつかを 並べ上げるため、もしくはどの情報を表示するか指定するため、 どのように ffprobe がそれを表示するのか設定するために使われます。

ffprobe の出力はテキストフィルターによってパースしやすいように 設計されており、次のような形をした1つまたはそれ以上のセクションからなります:

 
[SECTION]
key1=val1
...
keyN=valN
[/SECTION]

コンテナまたはストリーム内に保存されているメタデータタグは認識され、 文字列"TAG:"を前につけた上で、 対応する"FORMAT"もしくは"STREAM"セクションで印字されます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3. オプション

数値のオプションは全て(そうではないと明記していない限り) 1つの数を表す入力文字列を受け取ります。それには国際単位系の接頭辞 (例えば ’K’、’M’、’G’)を1つ含めてもかまいません。 この接頭辞の直後に ’i’ を付け加えると、10の累乗の代わりに2の累乗 が使われます。 ’B’ という接尾辞は値を8倍し、また他の接尾辞に付け加えても単独でも どちらでも使えます。これによって例えば ’KB’、’MiB’、’G’ や ’B’ が接尾辞として許されます。

引数をとらないオプションはブール値のオプションであり、対応する値を true にします。オプション名の前に "no" をつけることで false に できます。例えば、コマンドラインで "-nofoo" とすることで "foo" という 名前のブール値のオプションが false になります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.1 一般的なオプション

これらのオプションは ff* ツールの間で共有されます。

-L

ライセンスを表示します。

-h, -?, -help, --help

ヘルプを表示します。

-version

バージョンを表示します。

-formats

利用可能なフォーマットを表示します。

フォーマット名の前にあるフィールドは次のような意味があります:

D

デコーディングが利用できる

E

エンコーディングが利用できる

-codecs

利用可能なコーデックを表示します。

コーデック名の前にあるフィールドは次のような意味があります:

D

デコーディングが利用できる

E

エンコーディングが利用できる

V/A/S

映像/音声/サブタイトルコーデック

S

コーデックがスライスをサポートしている

D

コーデックが direct rendering をサポートしている

T

コーデックがフレーム境界でだけでなくランダムな場所での切り取られた入力を扱える

-bsfs

利用可能な bitstream フィルターを表示します。

-protocols

利用可能なプロトコルを表示します。

-filters

利用可能な libavfilter フィルターを表示します。

-pix_fmts

利用可能な pixel フォーマットを表示します。

-loglevel loglevel

そのライブラリで使用されるログの冗長さを設定します。 loglevel は以下の値の1つを含んだ数値または文字列:

quiet
panic
fatal
error
warning
info
verbose
debug

既定ではプログラムは標準エラー出力にログを出力し、端末が色付けに 対応していれば、エラーと警告に印をつけるように色が使われます。 ログの色付けは環境変数 FFMPEG_FORCE_NOCOLOR または NO_COLOR をセットすることで無効にでき、 また環境変数 FFMPEG_FORCE_COLOR をセットすることで強制できます。 環境変数 NO_COLOR の利用は非推奨で、今後の Libav のバージョンでは なくなる予定です。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2 主なオプション

-f format

format を使うよう強制します。

-unit

表示される値の単位を表示します。

-prefix

表示される値について SI プレフィックスを用います。 "-byte_binary_prefix"オプションが使われていない限り 全てのプレフィックスは10進数で表されます。

-byte_binary_prefix

バイトの値のために2進数のプレフィックスを使うよう強制します。

-sexagesimal

時刻の値のために sexagesimal 形式 HH:MM:SS.MICROSECONDS を使います。

-pretty

表示される値の形式を見目好くします、これはオプション "-unit -prefix -byte_binary_prefix -sexagesimal"に対応します。

-show_format

入力マルチメディアストリームのコンテナ形式についての情報を 表示します。

全てのコンテナ形式情報は"FORMAT"と名前のついたセクションで 表示されます。

-show_packets

入力マルチメディアストリームに含まれる各パケットについての情報を表示 します。

各単一パケットについての情報は "PACKET" という専用のセクションで 表示されます。

-show_streams

入力マルチメディアストリームに含まれる各メディアストリームについての 情報を表示します。

各メディアストリームの情報は"STREAM"と名前のついた専用のセクション で表示されます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4. デミュクサー

デミュクサーは特定の種類のファイルからマルチメディアストリームを 読むことを可能にする Libav での構成される要素です。

Libav のビルドを構成する際、既定では全ての対応されるデミュクサーが 有効になります。全ての利用可能なデミュクサーを configure オプション "–list-demuxers" を使って一覧できます。

configure オプション "–disable-demuxers" を使って全てのデミュクサーを 無効にできます。そしてオプション "–enable-demuxer=DEMUXER" で 1つのデミュクサーを選択的に有効にでき、オプション "–disable-demuxer=DEMUXER" で1つのデミュクサーを選択的に無効にできます。

ff* ツールの "-formats" オプションは有効になっているデミュクサーの 一覧を表示します。

現在利用可能なデミュクサーのいくつかの説明は以下の通りです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.1 image2

画像ファイルデミュクサー。

このデミュクサーはパターンで指定された画像ファイルのリストを読みます。

パターンは文字列 "%d" または "%0Nd" を含めることができ、 これがこのパターンにマッチする各ファイル名の連番を表す文字の位置を 指定します。"%d0Nd" という形が使われた場合、各ファイル名の 番号を表す文字列は0で埋められており、N は番号を表す0で埋められた 桁の総数です。リテラル文字 ’%’ は文字列 "%%" を含むパターンで指定 されます。

このパターンが "%d" または "%0Nd" を含む場合、このパターンによって 指定されたファイル列の最初のファイル名は0から4までの間の番号を含まなければ ならず、後に続く全ての番号は連番でなければなりません。 この制限は取り払われる見込みです。

このパターンにはファイルに含まれる画像の形式によって自動的に決まる 接尾辞を含んでもよいです。

例えばパターン "img-%03d.bmp" は ‘img-001.bmp’, ‘img-002.bmp’, ..., ‘img-010.bmp’, などの形をしたファイル名の列にマッチします; パターン "i%%m%%g-%d.jpg" は ‘i%m%g-1.jpg’, ‘i%m%g-2.jpg’, ..., ‘i%m%g-10.jpg’, などの形をしたファイル名の列にマッチします。

各画像のサイズ、ピクセル形式、および形式は列にある全てのファイルで 同じでなければなりません。

次の例は、秒間10フレームの入力フレームレートとして、ファイル列 ‘img-001.jpeg’, ‘img-002.jpeg’, ..., の画像から映像を作るための ‘ffmpeg’ の使い方です:

 
ffmpeg -r 10 -f image2 -i 'img-%03d.jpeg' out.avi

このパターンは "%d" または "%0Nd" を含む必要はないことに 注意してください。例えば単一の画像ファイル ‘img.jpeg’ を 変換するために次のコマンドが使えます:

 
ffmpeg -f image2 -i img.jpeg img.png

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.2 applehttp

Apple HTTP Live Streaming デミュクサー。

このデミュクサーは全ての種類のストリームから全ての AVStreams を取り出します。 id フィールドはそのビットレートに応じたインデックス番号に設定されます。 AVStreams の discard フラグを設定する(ffplay では ’a’ または ’v’ を押す) ことによって、呼び出し側が実際に受け取るストリームの種類を決定できます。 ストリームが属する種類の全体のビットレートは "variant_bitrate" と名付け られているメタデータキーで取れます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5. ミュクサー

ミュクサーはマルチメディアストリームを特定の種類のファイルに 書き出すことを可能にする Libav での構成される要素です。

Libav のビルドを構成する際、既定ではサポートしているミュクサーが全て 有効になります。全ての利用可能なミュクサーを configure オプション --list-muxers を使って一覧できます。

configure オプション --disable-muxers を使って全てのミュクサーを 無効にできます。そしてオプション --enable-muxer=MUXER / --disable-muxer=MUXER で1つのミュクサーを選択的に有効 / 無効にできます。

ff* ツールの -formats オプションは有効になっているミュクサーの 一覧を表示します。

現在利用可能なミュクサーのいくつかの説明は以下の通りです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1 crc

CRC (Cyclic Redundancy Check) 検査形式。

このミュクサーは全ての入力音声および映像フレームの Adler-32 CRC を計算し表示します。既定では、CRC を計算する前に音声フレームは 符号付き16ビット raw audio に変換され、映像フレームは raw video に変換されます。

ミュクサーの出力は次の形をした単一の行からなります: CRC=0xCRC、ただし CRC は全てのデコードされた入力フレーム についての CRC を含む8桁になるように0埋めされた16進数です。

入力の CRC を計算し、それをファイル ‘out.crc’ に保存する 例として:

 
ffmpeg -i INPUT -f crc out.crc

次のコマンドで CRC を標準出力に書き出すことができます:

 
ffmpeg -i INPUT -f crc -

ffmpeg’ では、音声および映像コーデックおよび形式を指定することで 各フレームに対する出力形式を選択できます。PCM unsigned 8-bit に変換された 入力音声および MPEG-2 video に変換された入力映像の CRC を計算する 例として、 次のコマンドを使ってください:

 
ffmpeg -i INPUT -acodec pcm_u8 -vcodec mpeg2video -f crc -

framecrc ミュクサー(see framecrc)も参照してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2 framecrc

フレームごとの CRC (Cyclic Redundancy Check) 検査形式。

このミュクサーは各デコードされた音声および映像フレームに対する Adler-32 CRC を計算し表示します。既定では、CRC を計算する前に 音声フレームは符号付き16ビット raw audio に変換され、映像フレームは raw video に変換されます。

ミュクサーの出力は各音声および映像フレームにつき1行からなります: stream_index, frame_dts, frame_size, 0xCRC、 ただし CRC はデコードされたフレームの CRC を含む0埋めされた 8桁の16進数です。

入力のデコードされた各フレームの CRC を計算し、それをファイル ‘out.crc’ に保存する例として:

 
ffmpeg -i INPUT -f framecrc out.crc

次のコマンドで各デコードされたフレームの CRC を標準出力に書き出せます:

 
ffmpeg -i INPUT -f framecrc -

ffmpeg’ では、音声および映像コーデックおよび形式を指定することで 各フレームに対する出力形式を選択できます。PCM unsigned 8-bit に変換された デコードされた入力音声フレームおよび MPEG-2 video に変換されたデコードされた 入力映像フレームの CRC を計算するためには、次のコマンドを使ってください:

 
ffmpeg -i INPUT -acodec pcm_u8 -vcodec mpeg2video -f framecrc -

crc ミュクサー(see crc)も参照してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.3 image2

画像ファイルのミュクサー。

このミュクサーは映像フレームを画像ファイルに書き出します。

出力ファイル名はパターンによって指定されます。このパターンは 順番に番号が振られているファイルの並びを生成するために使えます。 パターンは文字列 "%d" または "%0Nd" を含めることができ、 これがこのパターンにマッチする各ファイル名の連番を表す文字の位置を 指定します。"%0Nd" という形が使われた場合、各ファイル名の 番号を表す文字列は0で埋められており、N は番号を表す0で埋められた 桁の総数です。リテラル文字 ’%’ は文字列 "%%" を含むパターンで指定 されます。

このパターンが "%d" または "%0Nd" を含む場合、このパターンによって 指定されたファイル列の最初のファイル名は1を含み、あとに続く全ての番号は 連続していることになります。

このパターンにはファイルに含まれる画像の形式によって自動的に決まる 接尾辞を含んでもよいです。

例えばパターン "img-%03d.bmp" は ‘img-001.bmp’, ‘img-002.bmp’, ..., ‘img-010.bmp’, などの形をしたファイル名の列にマッチします。 パターン "img%%-%d.jpg" は ‘img%-1.jpg’, ‘img%-2.jpg’, ..., ‘img%-10.jpg’, などの形をしたファイル名の列にマッチします。

次の例は入力映像から各秒につき1つの画像を取得し ファイルの列 ‘img-001.jpeg’, ‘img-002.jpeg’, ...を を作るための ‘ffmpeg’ の使い方を示します;

 
ffmpeg -i in.avi -r 1 -f image2 'img-%03d.jpeg'

ffmpeg’ では、-f オプションで形式が指定されておらず、 かわりに出力ファイル名が画像ファイル形式を指定している場合は、 image2 ミュクサーが自動的に選択されることにに注意してください。 ですので上のコマンドは次のように書けます:

 
ffmpeg -i in.avi -r 1 'img-%03d.jpeg'

また、パターンは "%d" または "%0Nd" を含んでいなくてもよく、 例えば入力映像から単一の画像ファイル ‘img.jpeg’ を作成するには 次のコマンドが使えます:

 
ffmpeg -i in.avi -f image2 -vframes 1 img.jpeg

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.4 mpegts

MPEG トランスポートストリームミュクサー。

このミュクサーは ISO 13818-1 と ETSI EN 300 468 の一部を実装しています。

このミュクサーのオプションは以下のとおりです:

-mpegts_original_network_id number

original_network_id を設定します(既定では 0x0001)。 これは DVB でのネットワークの一意な識別子です。主な利用法は パス Original_Network_ID, Transport_Stream_ID を通じたサービスの 一意な識別にあります。

-mpegts_transport_stream_id number

transport_stream_id を設定します(既定では 0x0001)。これは DVB での transponder を識別します。

-mpegts_service_id number

DVB での program として知られている service_id を設定します(既定では 0x0001)。

-mpegts_pmt_start_pid number

PMT のための最初の PID を設定します(既定では 0x1000, 最大で 0x1f00)。

-mpegts_start_pid number

データパケットのための最初の PID を設定します(既定では 0x0100, 最大で 0x0f00)。

mpegts ミュクサーで認識できるメタデータの設定は service_providerservice_name です。これらが設定されていなければ、 service_provider の既定値は "Libav" であり、 service_name の既定値は "Service01" です。

 
ffmpeg -i file.mpg -acodec copy -vcodec copy \
     -mpegts_original_network_id 0x1122 \
     -mpegts_transport_stream_id 0x3344 \
     -mpegts_service_id 0x5566 \
     -mpegts_pmt_start_pid 0x1500 \
     -mpegts_start_pid 0x150 \
     -metadata service_provider="Some provider" \
     -metadata service_name="Some Channel" \
     -y out.ts

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.5 null

Null ミュクサー。

このミュクサーは出力ファイルを全く生成しません。主にテストや ベンチマークの目的で有用です。

例えば、‘ffmpeg’ でのデコーディングのベンチマークを取るには、 次のコマンドが使えます:

 
ffmpeg -benchmark -i INPUT -f null out.null

上のコマンドは ‘out.null’ ファイルを読み書きしませんが、 しかし ‘ffmpeg’ の構文で必要とされている出力ファイルを指定している ことに注意してください。

あるいはこのコマンドを次のようなに書くこともできます:

 
ffmpeg -benchmark -i INPUT -f null -

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6. プロトコル

プロトコルは、特定のプロトコルを使用するために必要になるリソースへの アクセスを可能にする Libav 上の構成される要素です。

Libav のビルドを構成(configure)する際は、既定ではサポートされている全ての プロトコルが有効になっています。configure オプション "–list-protocols" を使うと 全ての利用可能なプロトコルがリストアップされます。

configure オプション "–disable-protocols" を使えば全てのプロトコルを無効にする ことができ、 "–enable-protocol=PROTOCOL" で特定のプロトコルを選択して有効にでき、 または "–disable-protocol=PROTOCOL" で特定のプロトコルを無効にできます。

ff* ツールのオプション "-protocols" はサポートされているプロトコル のリストを表示します。

現在利用可能なプロトコルの説明は以下の通りです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.1 applehttp

定型的なものとして、Apple HTTP Live Streaming 準拠のセグメント化 ストリーム。セグメントを表す M3U8 プレイリストとしては、標準ファイル プロトコルによってアクセスされるリモートの HTTP リソースや ローカルファイルになります。 既定では HTTP ですが、applehttp URI スキーム名の後に "+proto" のように指定することで、別の特定のプロトコルを宣言することもできます。 ただし proto は "file" もしくは "http" です。

 
applehttp://host/path/to/remote/resource.m3u8
applehttp+http://host/path/to/remote/resource.m3u8
applehttp+file://path/to/local/resource.m3u8

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.2 concat

物理的な連結プロトコル。

多くのリソースから順に、1つの独自のリソースであるかのように 読んだりシークしたりできます。

このプロトコルが受け取る URL は次の構文を持ちます:

 
concat:URL1|URL2|...|URLN

ただし URL1URL2、...、URLN は連結されるリソースの URL で、それぞれは異なるプロトコルを指定していてもかまいません。

例えばファイル列 ‘split1.mpeg’、‘split2.mpeg’、‘split3.mpeg’ を ‘ffplay’ で読むには、次のコマンドを使ってください:

 
ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg

多くのシェルで特別扱いされる文字 "|" をエスケープしなけばならないかもしれない ことに注意してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.3 file

ファイルアクセスプロトコル。

1つのファイルから、または1つのファイルに向けて読むことができます。

例えば ‘ffmpeg’ でファイル ‘input.mpeg’ から読むには、次のコマンドを 使ってください:

 
ffmpeg -i file:input.mpeg output.mpeg

ff* ツールは既定ではこのファイルプロトコルを使います。 すなわち "FILE.mpeg" という名前で指定されたリソースは URL "file:FILE.mpeg" であるかのように解釈されます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.4 gopher

Gopher プロトコル。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.5 http

HTTP (ハイパーテキストトランスファープロトコル)。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.6 mmst

TCP 越しの MMS (マイクロソフトメディアサーバー)プロトコル。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.7 mmsh

HTTP 越しの MMS (マイクロソフトメディアサーバー)プロトコル。

要求される構文は:

 
mmsh://server[:port][/app][/playpath]

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.8 md5

MD5 出力プロトコル。

書き出されるデータの MD5 ハッシュを計算し、クローズ時にそれを指示された 出力もしくは(指定されていなければ)標準出力に書き出します。実際のファイルに 書き出すことなく muxer をテストするために使えます。

いくつかの例を以下に挙げます。

 
# エンコードされる AVI ファイルの MD5 ハッシュをファイル output.avi.md5 に書き出します。
ffmpeg -i input.flv -f avi -y md5:output.avi.md5

# エンコードされる AVI ファイルの MD5 ハッシュを標準出力に書き出します。
ffmpeg -i input.flv -f avi -y md5:

フォーマットによっては(典型的には MOV)出力プロトコルがシーク可能である必要が あり、したがって MD5 出力プロトコルが一緒だと失敗することに注意してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.9 pipe

UNIX パイプアクセスプロトコル。

UNIX パイプに書き出したり読み込んだりすることができます。

受け取る構文は:

 
pipe:[number]

number はパイプのファイル記述子に対応する番号 (例えば標準入力なら0、標準出力なら1、標準エラー出力なら2)です。 number が指定されていなければ、既定ではこのプロトコルが 書き出しに用いられるときには標準出力が利用され、このプロトコルが 読み込みに用いられるときには標準入力が利用されます。

例えば ‘ffmpeg’ で標準入力から読むには:

 
cat test.wav | ffmpeg -i pipe:0
# ...これは次と同じです...
cat test.wav | ffmpeg -i pipe:

ffmpeg’ で標準出力に書くには:

 
ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi
# ...これは次と同じです...
ffmpeg -i test.wav -f avi pipe: | cat > test.avi

フォーマットによっては(典型的には MOV)出力プロトコルがシーク可能である必要が あり、したがってパイプ出力プロトコルが一緒だと失敗することに注意してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.10 rtmp

リアルタイムメッセージングプロトコル。

リアルタイムメッセージングプロトコル(RTMP)は TCP/IP ネットワーク越しの マルチメディアコンテントのストリーミングに用いられます。

必要となる構文は:

 
rtmp://server[:port][/app][/playpath]

受け取るパラメータは以下の通りです:

server

RTMP サーバーのアドレスです。

port

利用される TCP ポートの番号です(既定では1935です)。

app

アクセスするアプリケーションの名前です。たいていの場合 RTMP サーバー にそのアプリケーションがインストールされているパスになります。 (例えば ‘/ondemand/’、‘/flash/live/’、など)。

playpath

app で指定されうアプリケーションから参照され再生される リソースのパスまたは名前です。"mp4:"が先頭につくかもしれません。

例えば ‘ffplay’ で RTMP サーバー "myserver" からアプリケーション "vod" で "sample" という名前のマルチメディアリソースを読むには:

 
ffplay rtmp://myserver/vod/sample

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.11 rtmp、rtmpe、rtmps、rtmpt、rtmpte

librtmp を通じてサポートされるリアルタイムメッセージングプロトコルとその バリエーションです。

構成(configure)の際に librtmp のヘッダとライブラリが存在しなければなりません。 "–enable-librtmp" で明示的にビルドを configure する必要があります。 有効にされるとネイティブの RTMP プロトコルは置き替えられます。

このプロトコルは、RTMP、HTTP トンネルによる RTMP (RTMPT)、暗号化 RTMP (RTMPE)、SSL/TLS オーバー RTMP (RTMPS)、そしてこれら暗号化タイプの トンネル版(RTMPTE、RTMPTS)をサポートするために必要ななるほとんどの クライアント機能と少数のサーバー機能を提供します。

必要となる構文は:

 
rtmp_proto://server[:port][/app][/playpath] options

ただし rtmp_proto は各 RTMP バリエーションに対応する文字列 "rtmp"、"rtmpt"、"rtmpe"、"rtmps"、"rtmpte"、"rtmpts" の1つで、 serverportapp および playpath は RTMP ネイティブプロトコルで指定されるものと同じ意味を持ちます。 options は空白で区切られた key=val の形のオプション のリストを含みます。

さらなる情報については librtmp のマニュアルページ(man 3 librtmp)を見てください。

例えば、‘ffmpeg’ を使ってリアルタイムに RTMP サーバーに向けてファイルをストリームするには:

 
ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream

ffplay’ を使って同じストリーミングを行なうには:

 
ffplay "rtmp://myserver/live/mystream live=1"

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.12 rtp

リアルタイムプロトコル。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.13 rtsp

RTSP は技術的には libavformat でのプロトコルハンドラではなく、demuxer であり かつ muxer です。この demuxer は通常の RTSP (RTP 越しにデータが転送される; これは例えば Apple や Microsoft で用いられています)も Real-RTSP (RDT 越しに データが転送される)もどちらにも対応しています。

muxer はストリームを RTSP ANNOUNCE を用いて、それに対応しているサーバー (現時点では Darwin Streaming Server と Mischa Spiegelmock の RTSP server http://github.com/revmischa/rtsp-server) に向けて送信するために利用できます。

RTSP のために必要となる構文は:

 
rtsp://hostname[:port]/path[?options]

options& で区切られたリストです。以下のオプションが サポートされています:

udp

下位トランスポートプロトコルに UDP を使います。

tcp

下位トランスポートプロトコルに(RTSP コントロールチャンネル内で交互にした) TCP を使います。

multicast

下位トランスポートプロトコルに UDP マルチキャストを使います。

http

下位トランスポートプロトコルに http トンネリングを使います。これは 受動的なプロキシに対して便利です。

filter_src

ネゴシエーションしたピアのアドレスとポートのみからパケットを受け取ります。

複数の下位トランスポートプロトコルを指定することが許されており、その場合 一度に1つだけ試されます(1つの設定に失敗したら、次のものが試されます)。 muxer については、tcpudp のみがサポートされています。

UDP 越しにデータを受け取る際に、demuxer は受け取ったパケットを並べ直そうと します(これらが順番になっていない、もしくは全体的にパケットが失われている かもしれないからです)。これを有効にするためには、 AVFormatContext の max_delay フィールドで最大の遅延を指定しなければなりません。

ffplay’ でマルチビットレート Real-RTSP ストリームを観る際、 表示するストリームとして -vst n および -ast n で 映像と音声それぞれを選択できます。そして作動中に va を押すことで切り替えることが可能です。

コマンドラインの例:

UDP 越しのストリームを観る、並べ直しの最大遅延は0.5秒:

 
ffplay -max_delay 500000 rtsp://server/video.mp4?udp

HTTP トンネル経由のストリームを観る:

 
ffplay rtsp://server/video.mp4?http

他人に観せるために、RTSP サーバーにストリームをリアルタイムで送信する:

 
ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.14 sap

セッションアナウンスメントプロトコル(RFC 2974)。これは技術的には libavformat のプロトコルハンドラではなく、muxer および demuxer です。 分離されたポート上で定期的にストリームに対して SDP を通知することによって、 RTP ストリームのシグナリングのために使用されます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.14.1 Muxer

muxer に渡される SAP url のための構文は次の通りです:

 
sap://destination[:port][?options]

RTP パケットはポート portdestination に対して送信され、 ポートが指定されていない場合にはポート 5004 に対して送信されます。 options& で区切られたリストです。以下のオプションを サポートしています:

announce_addr=address

通知を送りつける送信先の IP アドレスを指定する。 省略されていれば、通知は共通して利用されている SAP アナウンスメント マルチキャストアドレス 224.2.127.254 (sap.mcast.net)に、もしくは destination が IPv6 アドレスならば ff0e::2:7ffe に送信される。

announce_port=port

通知を送りつけるポートを指定する、指定されなければ 既定で 9875。

ttl=ttl

通知と RTP パケットのための time to live 値を指定する、 既定では 255。

same_port=0|1

1が設定されれば、全ての RTP ストリームを同じポート対で送る。0(既定) ならば、全てのストリームは独自のポートに送られ、各ストリームは先のものより 2つ数字の大きいポート番号になる。 VLC/Live555 では、ストリームを受け取れるように、これを1に設定することが求められる。 libavformat で受信するための RTP スタックは各ストリームが一意なポートで送られる 必要がある。

コマンドラインの例は以下の通り。

VLC で観るために、ローカルサブネットにストリームをブロードキャストするためには:

 
ffmpeg -re -i input -f sap sap://224.0.0.255?same_port=1

同様に、ffplay で観るには:

 
ffmpeg -re -i input -f sap sap://224.0.0.255

そして IPv6 越しに ffplay で観るには:

 
ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4]

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.14.2 Demuxer

demuxer に与える SAP url のための構文は:

 
sap://[address][:port]

address は通知のために待ち受けるマルチキャストアドレスであり、 省略されれば、既定の 224.2.127.254 (sap.mcast.net)が用いられる。 port は待ち受けるポートであり、省略された場合9875である。

demuxer は与えられたアドレスとポートで通知を待ち受ける。 いったん通知を受け取るとすぐに、特定のストリームを受信しようとする。

コマンドラインの例は以下の通り。

通常の SAP マルチキャストアドレスで通知される最初のストリームを再生するには:

 
ffplay sap://

既定の IPv6 SAP マルチキャストアドレスで通知される最初のストリームを再生するには:

 
ffplay sap://[ff0e::2:7ffe]

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.15 tcp

トランスミッションコントロールプロトコル。

TCP url のために要求される構文は以下のとおり:

 
tcp://hostname:port[?options]
listen

外から入ってくる接続を待ち受ける

 
ffmpeg -i input -f format tcp://hostname:port?listen
ffplay tcp://hostname:port

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.16 udp

ユーザーデータグラムプロトコル。

UDP url に要する構文は:

 
udp://hostname:port[?options]

options は & で区切られた key=val の形のオプションのリストを含む。 サポートされているオプションのリストは以下の通り:

buffer_size=size

UDP バッファサイズをバイト数で設定する

localport=port

バインドするローカル UDP ポートを上書きする

pkt_size=size

UDP パケットのバイトサイズを設定する

reuse=1|0

UDP ソケットの再利用を明示的に有効または無効にする

ttl=ttl

time to live 値を設定する(マルチキャストについてのみ)

connect=1|0

UDP ソケットを connect() で初期化する。 この場合、送り先アドレスは後から ff_udp_set_remote_url で変えることができない。 送り先のアドレスが開始時に分からない場合、このオプションを ff_udp_set_remote_url で指定することもできる。 これによって getsockname でパケットの送り元アドレスを見つけることができ、 書き出しの際 "destination unreachable" を受け取った場合には AVERROR(ECONNREFUSED) を返す。 受信にlについては、これによって指定されているピアのアドレス/ポートからのパケット のみを受け取るという効用がある。

udp プロトコルの ‘ffmpeg’ での利用例は以下の通り。

UDP 越しにリモートエンドポイントへストリームするには:

 
ffmpeg -i input -f format udp://hostname:port

188 サイズの UDP パケットを使い、大きい入力バッファで UDP 越しに mpegts 形式でストリームするには:

 
ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535

UDP 越しにリモートエンドポイントから受け取るには:

 
ffmpeg -i udp://[multicast-address]:port

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7. Input Devices

入力デバイスは、Libav 上でシステムに取り付けられたマルチメディアデバイスから やって来るデータにアクセスすることを許す構成された要素です。

Libav のビルドを構成(configure)する際は、既定ではサポートされている全ての 入力デバイスが有効になっています。configure オプション "–list-indevs" を使うと 全ての利用可能な入力デバイスがリストアップされます。

configure オプション "–disable-indevs" を使えば全ての入力デバイスを無効にする ことができ、 "–enable-indev=INDEV" で特定の入力デバイスを選択して有効にでき、 または "–disable-indev=INDEV" で特定の入力デバイスを無効にできます。

ff* ツールのオプション "-formats" は(demuxer と一緒に)サポートされている入力デバイス のリストを表示します。

現在利用可能な入力デバイスの説明は以下の通りです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.1 alsa

ALSA (Advanced Linux Sound Architecture) 入力デバイス。

configure でこの入力デバイスを有効にするには、システムに libasound がインストールされて いる必要があります。

このデバイスによって ALSA デバイスからキャプチャすることができます。キャプチャする デバイスの名前は ALSA カード識別子でなくてはなりません。

ALSA 識別は次の構文をもちます:

 
hw:CARD[,DEV[,SUBDEV]]

ただし DEVSUBDEV という成分は省略できます。

この3つの引数(順に: CARD,DEV,SUBDEV)は カード番号もしくは識別子、デバイス番号、そしてサブデバイス番号を 特定します。(-1 はいずれかを意味します)。

現時点でシステムによって認識されるカードのリストを見るには、ファイル ‘/proc/asound/cards’ および ‘/proc/asound/devices’ を確認してください。

例えば ‘ffmpeg’ によってある card id 0 の ALSA デバイスから キャプチャするためには、次のコマンドを実行します:

 
ffmpeg -f alsa -i hw:0 alsaout.wav

さらなる情報については、次を見てください: http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.2 bktr

BSD 映像入力デバイス。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.3 dv1394

Linux DV 1394 入力デバイス。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.4 fbdev

Linux フレームバッファ入力デバイス。

Linux フレームバッファはコンピュータモニター上に、典型的にはコンソール上に グラフィックスを表示するためのハードウェアに依存しないグラフィック抽象 レイヤーです。フレームバッファはファイルデバイスノードを通じてアクセス され、たいていの場合は ‘/dev/fb0’ です。

より詳細な情報については、Linux ソースツリー内に含まれるファイル Documentation/fb/framebuffer.txt を読んでください。

ffmpeg’ でフレームバッファデバイス ‘/dev/fb0’ から記録する には:

 
ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi

以下のコマンドで単一のスクリーンショットイメージを撮ることができます:

 
ffmpeg -f fbdev -vframes 1 -r 1 -i /dev/fb0 screenshot.jpeg

http://linux-fbdev.sourceforge.net/ および fbset(1) も参照してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.5 jack

JACK 入力デバイス。

configure でこの入力デバイスを有効にするには、システムに libjack がインストールされて いる必要があります。

JACK 入力デバイスは1つまたはそれ以上の JACK 書き込み可能クライアントを 各音声チャンネルごとに1つ、client_name:input_N という名前で 作成します。ただし client_name はアプリケーションによって提供される 名前で、N はそのチャンネルを識別する番号です。 各書き込み可能なクライアントは Libav 入力デバイスに対して取得したデータ を送信します。

一旦1つまたはそれ以上の JACK 読み取り可能クライアントを作成すると、 1つまたはそれ以上の JACK 書き込み可能クライアントにそれらを接続する必要 があります。

JACK クライアントに接続をつないだり切ったりするためには、 ‘jack_connect’ や ‘jack_disconnect’ プログラムが使えます。 または、例えば ‘qjackctl’ のようなグラフィカルインターフェイスを 通じて行えます。

JACK クライアントやそのプロパティをリストアップするには、コマンド ‘jack_lsp’ を実行します。

以下は ‘ffmpeg’ で JACK 読み取り可能クライアントをキャプチャする やり方を示す例です。

 
# "ffmpeg" という名前のついた JACK 書き込み可能クライアントを作成します。
$ ffmpeg -f jack -i ffmpeg -y out.wav

# サンプルの jack_metro 読み取りクライアントを開始します。
$ jack_metro -b 120 -d 0.2 -f 4000

# 現在の JACK クライアントをリストアップします。
$ jack_lsp -c
system:capture_1
system:capture_2
system:playback_1
system:playback_2
ffmpeg:input_1
metro:120_bpm

# ffmpeg 書き込み可能クライアントに metro を接続します。
$ jack_connect metro:120_bpm ffmpeg:input_1

さらなる情報については、次を読んでください: http://jackaudio.org/


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.6 libdc1394

IIDC1394 入力デバイス、libdc1394 および libraw1394 に基づいています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.7 oss

Open Sound System 入力デバイス。

入力デバイスに充てられるファイル名はその OSS 入力 を表すデバイスノードで、 それはたいていの場合 ‘/dev/dsp’ になります。

例えば ‘ffmpeg’ から ‘/dev/dsp’ をグラブするためには、 次のコマンドを使います。

 
ffmpeg -f oss -i /dev/dsp /tmp/oss.wav

OSS についてのさらなる情報には、次を見てください: http://manuals.opensound.com/usersguide/dsp.html


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.8 sndio

sndio 入力デバイス。

この入力デバイスを configure を通じて有効にするには、システムに libsndio がインストールされていなければなりません。

入力デバイスに与えるファイル名は sndio 入力デバイスを表すデバイス ノードであり、たいていの場合 ‘/dev/audio0’ に設定されます。

例えば、‘ffmpeg’ を使って ‘/dev/audio0’ からグラブするには 次のコマンドを使ってください:

 
ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.9 video4linux および video4linux2

Video4Linux および Video4Linux2 入力映像デバイス。

グラブするデバイスの名前はファイルデバイスノードです。たいていの Linux システムは、デバイス(例えば USB ウェブカム)をシステムに差し込んだ際、 そういったノードを自動的に作成するようになっています。そして ‘/dev/videoN’ のような名前を持ちます。ただし N は そのデバイスに結びつけられた番号です。

Video4Linux と Video4Linux2 デバイスは限られた種類の widthxheight サイズとフレームレートのみに対応しています。いずれに対応しているかを確認するために、 例えば Video4Linux デバイスならコマンド ‘dov4l’、そして Video4Linux2 デバイスならコマンド ‘v4l-info’ が使えます。

デバイスのサイズが 0x0 に設定されている場合、入力デバイスは使用するサイズを 自動検出しようとします。 video4linux2 デバイスに限っては、フレームレートが0/0に設定されている場合、 入力デバイスはドライバーで既に設定されているフレームレートの値を使います。

Video4Linux 対応は Linux 2.6.30 から非推奨になっており、今後のバージョンで 無くなるでしょう。

以下が ff* ツールで video4linux デバイスを使う例です。

 
# Video4linux デバイスの入力をグラブし表示します。
# フレームレートは既定の25/1です。
ffplay -s 320x240 -f video4linux /dev/video0

# Video4linux2 デバイスの入力をグラブし表示します。サイズは自動調整です。
ffplay -f video4linux2 /dev/video0

# Video4linux2 デバイスの入力をグラブし録画します。サイズは自動調整です。
# フレームレートは既定で0/0なので、video4linux2 ドライバーから読み取ります。
ffmpeg -f video4linux2 -i /dev/video0 out.mpeg

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.10 vfwcap

VfW (Video For Windows) キャプチャ入力デバイス。

入力として渡すファイル名はキャプチャドライバー番号で、0から9の範囲です。 ドライバーの一覧を表示するために "list" をファイル名に使えます。 それ以外のファイル名はデバイス番号0として解釈されます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.11 x11grab

X11 映像入力デバイス。

このデバイスで X11 ディスプレイの領域をキャプチャすることができます。

入力として渡すファイル名は次の構文を持ちます:

 
[hostname]:display_number.screen_number[+x_offset,y_offset]

hostname:display_number.screen_number でグラブする スクリーンlの X11 ディスプレイ名を指定します。hostname は省略 されてもよく、既定では "localhost" です。環境変数 DISPLAY が既定のディスプレイ名を含みます。

x_offset および y_offset でグラブされる領域の X11 スクリーン イメージの左上端からオフセットを指定します。これらは既定では0です。

さらなる細かい情報については X11 ドキュメンテーション(例えば man X)を 参照してください。

X11 ディスプレイのプロパティについての基本情報(例えば "name" または "dimensions" を grep する)を得るためには、‘dpyinfo’ プログラムを使ってください。

例えば ‘ffmpeg’ を使って ‘:0.0’ からグラブするには

 
ffmpeg -f x11grab -r 25 -s cif -i :0.0 out.mpg

# 位置 10,20 でグラブします。
ffmpeg -f x11grab -25 -s cif -i :0.0+10,20 out.mpg

[Top] [Contents] [Index] [ ? ]

Table of Contents


[Top] [Contents] [Index] [ ? ]

About This Document

This document was generated by Takeshi Abe on April 24, 2011 using texi2html 1.82.

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ < ] Back Previous section in reading order 1.2.2
[ > ] Forward Next section in reading order 1.2.4
[ << ] FastBack Beginning of this chapter or previous chapter 1
[ Up ] Up Up section 1.2
[ >> ] FastForward Next chapter 2
[Top] Top Cover (top) of document  
[Contents] Contents Table of contents  
[Index] Index Index  
[ ? ] About About (help)  

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:


This document was generated by Takeshi Abe on April 24, 2011 using texi2html 1.82.