1 ミュクサー

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

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

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

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

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

1.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’ に保存する 例として:

avconv -i INPUT -f crc out.crc

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

avconv -i INPUT -f crc -

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

avconv -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -

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

1.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’ に保存する例として:

avconv -i INPUT -f framecrc out.crc

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

avconv -i INPUT -f framecrc -

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

avconv -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -

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

1.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’, ...を を作るための avconv の使い方を示します;

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

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

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

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

avconv -i in.avi -f image2 -frames:v 1 img.jpeg

1.4 MOV/MP4/ISMV

mov/mp4/ismv ミュクサーはフラグメンテーションをサポートします。通常、 MOV/MP4 ファイルは1つのロケーションに保存されている全てのパケットに ついてのあらゆるメタデータを持っています(ファイルの末尾に書かれており、 より良い再生のために qt-faststart ツールを使って先頭に動か せます)。フラグメント化したファイルは多くのフラグメントからなり、 パケットとこれらのパケットについてのメタデータは一緒に保存されます。 フラグメント化されたファイルを書き出すと、書き出しが割り込まれたとして もデコードできる(通常の MOV/MP4 ファイルでは適切に終了しないとデコード できません)上、とても長いファイルを書き出すときにより少ないメモリしか 要さない(なぜなら通常の MOV/MP4 ファイルでは、ファイルを閉じるまでに メモリ上で1つ1つのパケットについての情報を保存するからです)という 利点があります。欠点は他のアプリケーションとの互換性がより低い点です。

フラグメンテーションは、どのようにファイルをフラグメントに分けるかを 定義した AVOptions の1つを設定することで有効になります。

-movflags frag_keyframe

各映像キーフレームで新しいフラグメントを開始する

-frag_duration duration

durationマイクロ秒の長さのフラグメントを作成する

-frag_size size

sizeバイトまでのペイロードデータを含むフラグメントを作成する

-movflags frag_custom

いつフラグメントに分けるかをマニュアルで選択する caller を許可する、 av_write_frame(ctx, NULL) を呼ぶことでそれまでに書き出された パケットとともにフラグメントを出力する。(これは avconv からではなく、libavformat と統合された他のアプリケーションでのみ 有用)

-min_frag_duration duration

durationマイクロ秒より短い時間のフラグメントを作成しない。

複数の条件を指定した場合、指定された条件のうちの1つが満たされたときに フラグメントが切り出されます。これについての例外は -min_frag_duration で、その他の適用条件が満たされていなければ なりません。

加えて、出力ファイルを書き出すやり方はその他の少数のオプションを 通じて調節できます:

-movflags empty_moov

サンプルの記述することなしに、先頭の moov アトムを直接ファイルの 最初に書き出す。一般に、通常の MOV/MP4 ファイルとして、mdat/moov ペアはファイルの最初に書き出され、ファイルのごく一部のみを占める。 このオプションを設定した場合、先頭の mdat アトムはなくなり、moov アトムはトラックだけを記述しその持続時間は0となる。

このオプションを設定して書き出したファイルは QuickTime では動作しない。 ismv (Smooth Streaming) ファイルを書き出す際、このオプションが暗黙に設定される。

-movflags separate_moof

各トラックごとに別々の moof (movie fragment)アトムを書き出す。通常、 全てのトラックについてのパケットが1つの moof アトムに書き出される(これは若干 効率的になる)が、このオプションが設定されると、ミュクサーは各トラックについて 1つの moof/mdat ペアを書き出し、トラックを分離しやすくする。

ismv (Smooth Streaming)ファイルを書き出す際、このオプションが暗黙に設定される。

このミュクサーで、IIS 上のパブリッシングポイントに Smooth Streaming コンテントを 実時間でプッシュすることができます。例:

avconv -re <normal input/transcoding options> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)

1.5 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" です。

avconv -i file.mpg -c 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

1.6 null

Null ミュクサー。

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

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

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

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

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

avconv -benchmark -i INPUT -f null -

1.7 matroska

Matroska コンテナーミュクサー。

このミュクサーは matroska および webm コンテナー仕様を実装しています。

このミュクサーが理解できるメタデータ設定は以下のものです:

title=title name

シングルトラックに与える名前

language=language name

Matroska 言語フォームでトラックの言語を指定します

STEREO_MODE=mode

シングル映像トラックでの2つのビューのステレオ 3D レイアウト

mono

映像はステレオでない

left_right

Both views are arranged side by side, Left-eye view is on the left

bottom_top

Both views are arranged in top-bottom orientation, Left-eye view is at bottom

top_bottom

Both views are arranged in top-bottom orientation, Left-eye view is on top

checkerboard_rl

Each view is arranged in a checkerboard interleaved pattern, Left-eye view being first

checkerboard_lr

Each view is arranged in a checkerboard interleaved pattern, Right-eye view being first

row_interleaved_rl

Each view is constituted by a row based interleaving, Right-eye view is first row

row_interleaved_lr

Each view is constituted by a row based interleaving, Left-eye view is first row

col_interleaved_rl

Both views are arranged in a column based interleaving manner, Right-eye view is first column

col_interleaved_lr

Both views are arranged in a column based interleaving manner, Left-eye view is first column

anaglyph_cyan_red

All frames are in anaglyph format viewable through red-cyan filters

right_left

Both views are arranged side by side, Right-eye view is on the left

anaglyph_green_magenta

All frames are in anaglyph format viewable through green-magenta filters

block_lr

Both eyes laced in one Block, Left-eye view is first

block_rl

Both eyes laced in one Block, Right-eye view is first

例えば、以下のコマンドラインを使って 3D WebM クリップを作成できます:

avconv -i sample_left_right_clip.mpg -an -c:v libvpx -metadata STEREO_MODE=left_right -y stereo_clip.webm

1.8 segment

基本的なストリームセグメンター。

セグメンターミュクサーはほぼ固定の期間にいくつかの分かれたファイルにストリームを 出力します。出力ファイルのパターンは image2 と同様のやり方で設定すること ができます。

各セグメントは、映像ストリームがあれば、映像のキーフレームから始まります。 このセグメントミュクサーは単一の定数フレームレートの映像で一番うまく働きます。

オプションで、作成されたセグメントの箇条書きリスト(セグメントごとに1行)を 生成することができます。

segment_format format

内部のコンテナフォーマットを上書きします、既定ではファイル名の拡張子から 推測されます。

segment_time t

セグメントの期間を t 秒間と設定します。

segment_list name

name という名前でリストファイルを生成します。

segment_list_size size

size 個のエントリーに逹したらリストファイルを上書きします。

segment_wrap limit

limit に達したらセグメントインデックスを折り返します。

avconv -i in.mkv -c copy -map 0 -f segment -list out.list out%03d.nut

1.9 mp3

MP3 ミュクサーは先頭に ID3v2 ヘッダーをつけて(そしてオプションで ID3v1 タグを末尾 につけて)生の MP3 ストリームを書き出します。IDv2.3 と ID3v2.4 に対応しており、 id3v2_version オプションでどちらを使うのか制御します。レガシーの ID3v1 タグは既定では書き出されませんが、write_id3v1 オプションで有効にできます。

シーク可能な出力のために、このミュクサーは Xing フレームも先頭に書き出します。 これはファイル内のフレームの数を含みます。これは VBR ファイルの時間幅を計算する ために便利です。

このミュクサーは画像(APIC フレーム)を添付した ID3v2 を書き出すことに対応しています。 この画像は単一のパケットをもつ映像ストリームの形でミュクサーに渡されます。そういった ストリームはいくらあってもよく、それぞれ単一の APIC フレームに対応します。 ストリームメタデータタグである titlecomment は APIC での descriptionpicture type にそれぞれ対応づけられます。許されている 画像の種類については http://id3.org/id3v2.4.0-frames を見てください。

これらの APIC フレームは先頭に書き出されなくてはならず、ミュクサーがこれらの画像 全てを取得するまで音声フレームをバッファすることに注意してください。したがって、 過度のバッファリングを避けるために可能な限り早めに画像を提供するようにしてください。

例:

ID3v2.3 ヘッダーと ID3v1 フッターをつけて mp3 を書き出す:

avconv -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3

mp3 に画像を添付する:

avconv -i input.mp3 -i cover.png -c copy -metadata:s:v title="Album cover"
-metadata:s:v comment="Cover (Front)" out.mp3