Bitstream フィルター
***************

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

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

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

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

aac_adtstoasc
=============

chomp
=====

dump_extradata
==============

h264_mp4toannexb
================

imx_dump_header
===============

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

mjpega_dump_header
==================

movsub
======

mp3_header_compress
===================

mp3_header_decompress
=====================

noise
=====

remove_extradata
================