1 Bitstream フィルター

Libav のビルドを構成する際、既定では全てのサポートされている bitstream フィルターが有効になります。configure オプション --list-bsfs を 使うと全ての利用可能な bitstream フィルターを一覧できます。

configure オプション --disable-bsfs を使うと全ての bitstream フィルターを無効にでき、オプション --enable-bsf=BSF を使うと 任意の bitstream フィルターを選択的に有効にできます。またオプション --disable-bsf=BSF を使うと特定の bitstream フィルターを無効に できます。

ff* ツールのオプション -bsfs で、ビルドに含まれる全てのサポート される bitstream フィルターが表示されます。

以下は現在利用できる bitstream フィルターの説明です。

1.1 aac_adtstoasc

1.2 chomp

1.3 dump_extradata

1.4 h264_mp4toannexb

1.5 imx_dump_header

1.6 mjpeg2jpeg

MJPEG/AVI1 パケットを完全な JPEG/JFIF パケットに変換します。

MJPEG はその中で各映像フレームが本質的には JPEG 画像であるような 映像コーデックです。その個別のフレームをロスなしに抽出できます、 例えば

avconv -i ../some_mjpeg.avi -c:v copy frames_%d.jpg

あいにく、デコーディングのために必要となる DHT セグメントがないため、 これらのチャンクは不完全な JPEG 画像です。 http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml からの引用です:

Avery Lee が2001年に rec.video.desktop ニュースグループで以下のように コメントしています。"MJPEG、あるいは少なくとも MJPG fourcc を持つ AVI での MJPEG は、固定の – かつ*省略された* – ハフマンテーブルを持つ 制限つきの JPEG です。この JPEG では YCbCr 色空間でなくてはならず、 4:2:2 である必要があり、算術的でもプログレッシブでもない基本ハフマン エンコーディングを使わなくてはいけません. . . . 実際は MJPEG フレームを 抽出して通常の JPEG デコーダでデコードすることができますが、それらに DHT セグメントを前置しなくてはならず、さもないとそのデコーダがデータを どのように展開すればよいか分かりません。必要とされる正確なテーブルは OpenDML 仕様で与えられています。"

この bitstream フィルターは、完全に適切になった JPEG 画像を作るために、 (AVI1 ヘッダ ID を伝え、かつ DHT セグメントを欠いている)MJPEG ストリームから 抽出されたフレームのヘッダを手当てします。

avconv -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
exiftran -i -9 frame*.jpg
avconv -i frame_%d.jpg -c:v copy rotated.avi

1.7 mjpega_dump_header

1.8 movsub

1.9 mp3_header_compress

1.10 mp3_header_decompress

1.11 noise

1.12 remove_extradata