Libav のビルドを構成する際、既定では全てのサポートされている bitstream
フィルターが有効になります。configure オプション --list-bsfs
を
使うと全ての利用可能な bitstream フィルターを一覧できます。
configure オプション --disable-bsfs
を使うと全ての bitstream
フィルターを無効にでき、オプション --enable-bsf=BSF
を使うと
任意の bitstream フィルターを選択的に有効にできます。またオプション
--disable-bsf=BSF
を使うと特定の bitstream フィルターを無効に
できます。
ff* ツールのオプション -bsfs
で、ビルドに含まれる全てのサポート
される bitstream フィルターが表示されます。
以下は現在利用できる bitstream フィルターの説明です。
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