ミュクサー
*****

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

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

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

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

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

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 ミュクサーも参照してください。

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 ミュクサーも参照してください。

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

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)

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_provider と service_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

null
====

Null ミュクサー。

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

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

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

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

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

     avconv -benchmark -i INPUT -f null -

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

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

mp3
===

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

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

このミュクサーは画像(APIC フレーム)を添付した ID3v2 を書き出すことに対応しています。この画像は単一のパケットをもつ映像ストリームの形でミュクサーに渡されます。そういったストリームはいくらあってもよく、それぞれ単一の APIC フレームに対応します。ストリームメタデータタグである TITLE と COMMENT は APIC での DESCRIPTION と PICTURE 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