最新FFmpeg
FFMPEG USAGE
コーデック †
ここではFFmpegのオプションを有効に設定するための下知識として、ポータブルデバイスによく使用されるコーデックのうち、いくつかについて記述します。
H.264 †
- H.264概要
圧縮アルゴリズムの原理は、従来のMPEG-1、MPEG-2、H.263、MPEG-4などと基本的には同様で、空間変換やフレーム間予測、量子化、エントロピー符号化を採用している。H.264ではこれらのツールに対して非常に多数の改良が施されており、算術符号化やフィルタなどのツールも追加されている。さらに、画像特徴に応じて多彩なモードを適応的に使い分けることで、従来方式を遥かに凌ぐ圧縮効率を達成している。
- 整数変換
従来技術であるMPEG-1/-2/-4やH.261, H.263では、8×8画素のブロックを単位として、原画像ないしフレーム間予測の予測誤差画像の離散コサイン変換(DCT)係数を求め、その係数を量子化している。このとき、コサイン関数を用いるため、実数精度の演算が必要となる。これに対し H.264では、16ビット整数精度で演算が可能な整数変換を採用している。
- 複数参照フレーム →-keyint_min, -trellis オプションなど
従来技術では、フレーム間予測において参照フレームとして指定できるフレームは、Pフレームについては直前のI, Pフレーム、Bフレームについては直前および直後のI, Pフレームに固定されている。
H.264では、複数の参照フレームを持つことによって、例えばシーンチェンジや移動物体を考慮してより前のフレームを参照フレームとして指定することが可能となっている。また、Bフレームについては未来方向のフレームを使わずに過去の2フレームを参照フレームとして指定したり、別のBフレームを参照フレームとして指定することが可能となっている。
複数参照フレームの導入に伴いIフレームより前のフレームも参照可能となっている。この場合、Iフレームから再生を開始しようとしても、後続のフレームが、再生を開始しようとするIフレームより前のフレームの情報を必要とすることがある。このため、H.264ではIフレームから再生を開始することができるとは限らない。この問題を解決するため、参照フレームが格納されているバッファのクリアを行うことでそのフレームから再生が可能であることを保証する、IDR(Instantaneous Decoder Refresh)フレームが導入されている。すなわち、P, BフレームはIDRフレームをまたいで参照フレームを指定することができないように定められている。
- 可変ブロックサイズ →-partitionsオプション
従来技術では、動き補償の単位は16×16画素のマクロブロックが基本であり、H.263およびMPEG-4においては8×8画素ブロック単位の動き補償も利用できた。
H.264ではさらに単位ブロックサイズを追加し、16×16, 16×8, 8×16, 8×8の4種類から選択可能となっている。さらに、8×8画素ブロックについては、8×8, 8×4, 4×8, 4×4の4種類のサブブロック分割も指定できる。
このように多数のブロックサイズを利用することで、形状や動きに適したブロックから予測が可能である。これは、原理的には符号化効率が上がることとなる。ただし、サブブロックを指定することは余分なヘッダが付加されることになり、これがオーバーヘッドとなって符号化効率に影響を与える可能性もある。シーンに適した動き補償ブロックサイズを選択することが、エンコーダには求められる。
- 重み付け予測
H.264では、従来方式では画質向上が困難であった、フェードやディゾルブなどの特殊効果が用いられている動画の画質向上のため、参照フレームの予測誤差に重み付け係数を掛けてデコードする、重み付け予測(Weighted Prediction)が採用されている。フェードやディゾルブは、前フレームと現フレームで一定のオフセットがかかったような画像であるため、そのことで予測差分に大きな値が生じることとなり、MPEG4などでは画質劣化の原因として問題となっていた。
- 1/4画素精度動き補償
動き補償の精度としては、MPEG-4 ASPで導入された1/4画素精度(クォーターペル精度)動き補償を使用している。ゆっくり動くパンなどで特に効果的である。 1/2画素精度動き補償では6tapフィルターを用いて高周波まで再現を行っており、MPEG4で使用された線形補間よりも再現性が良くなっている。1/4画素の生成は、再現性の高い1/2画素を用いてその線形補間で作成を行う。
- イントラ予測
H.264では、フレーム間予測を用いないマクロブロックに対して、上や左などに隣接するマクロブロックの隣接画素から補間によって予測画像を生成し、その予測画像との差分を符号化する、イントラ予測(Intra prediction)が採用されている。予測画像の生成単位となるブロックサイズは、輝度(Y)成分については4×4および16×16画素の2種類であり、色差(Cb, Cr)成分の8×8画素については8×8画素単位の1種類である。また、予測画像生成における補間パターンは、輝度成分の4×4単位の場合は9種類、輝度成分の16×16単位および色差成分の場合は4種類が利用できる。
さらに、ハイプロファイル以上のプロファイル(後述)では、8×8画素単位のイントラ予測も利用可能である。補間パターンは4×4の場合と同様の9種類が利用できる。なお、8×8、4×4の場合は、整数変換も同じ行列サイズに固定される。
MPEG-4で導入されているAC/DC予測では、予測する係数がDCT係数の行列のうちの最上列ないし最左行の係数に限られているため、縦方向ないし横方向の画素変化に対してしか予測効率を高めることができない。これに対して、H.264のイントラ予測ではDCT係数ではなく画素レベルでの予測を行い、かつ縦・横方向以外にも斜め方向の画素予測パターンも利用できるため、予測効率が大幅に向上している。
- エントロピー符号化 →-coderオプション
H.264では、ハフマン符号をベースとした可変長符号化(VLC; Variable Length Coding)と、算術符号化のいずれかを選択できる。
前者はBaseline Profileで採用され、従来の3次元VLCに近いCAVLC(Context-based Adaptive VLC)と、指数ゴロム(Exponential-Golomb)符号を用いることによって変換テーブルを用いずに符号化するUVLC(Universal VLC)が用いられる。CAVLCでは隣接MBのDCT係数の状態に依存して現在のMBの符号化に使用する符号化テーブルを切り替える。このように切り替えを行うことで、現在の画像のテクスチャに応じた符号化テーブルが使用でき、より短い符号への圧縮が期待できる。
後者はCABAC(Context-based Adaptive Binary Arithmetic Coding)と呼ばれ、Main Profileで採用されている。
H.264ではこのように複数の符号化方式が用いられている。これは、処理量は少ないが効果もそこそこのCAVLCと、処理量は大きいが効果も高いCABACではその用途が異なるため、そのことによって「符号化」という同じ目的を持ったツールが複数存在することとなった。
- デブロッキングフィルタ →-deblockalpha, -deblockbetaオプション
H.264では、かつてH.261で採用されたループ内フィルタ(In-loop Filter)と似たように、ループ内にデブロッキングフィルタ(Deblocking Filter)が設置されている。このフィルタはH.261のようなブロック全体の平滑化フィルタではなく、整数変換のブロック境界のみを平滑化してブロックノイズの発生を抑制するものである。(H.261のループ内フィルタは、MPEG2以降で採用された半画素精度動き補償が数学上同等の役割を果たすため、その意味を失った。)
デブロッキングフィルタは圧縮率向上のためには効果的であるが処理量が大きいために、そのON/OFFがヘッダによって指定可能とされている。したがって、処理量に懸念がある場合にはデブロッキングフィルタを使用しないといった選択肢も可能である。
- SI, SPフレーム →-i_qfactor, -i_qoffsetオプションなど
例えば番組のチャンネルを切り替えたり、再生の途中でプレビューを見ながら早送りしたりする場合のように、ある動画ストリームから途中で別のストリームに切り替えて再生する場合、次のストリームの再生はフレーム間予測を用いないIフレームを受信するまでできなくなる。そこでH.264では、切替用の中間フレームとして、SI, SP(SはSwitchingの意)フレームが採用されている。特にSPフレームの場合は、切替前の動画のフレームを参照画像として切替後の動画がデコードできるように符号化される。
- NAL構造
H.264のビット列の規則(シンタックス)は、圧縮符号化された画像データをビット列に変換するための規則を定めたVCL(Video Coding Layer)と、VCLやヘッダ情報などのデータを分割および識別するためのNAL(Network Abstraction Layer)の2層構造を持つ。
従来技術では、シンタックスに従って1つの動画を圧縮符号化した場合、1つのビット列(エレメンタリストリーム)となる。これに対し、H.264では複数の種類のNALユニットに分割して符号化される。なお、従来のエレメンタリストリームと同様に1つのビット列として圧縮データを扱うことができるように、バイトストリームフォーマットがAnnex Bで規定されている。
NAL構造によって、MP4などのファイルフォーマットに格納したり、RTPパケットに分割して伝送したりするなど、圧縮データをさまざまな用途に柔軟に適用できるようになっている。
- レベル(Level) →-levelオプション
レベル1 から レベル5.1 まで、16段階が定義されている。それぞれのレベルにおいて、処理の負荷や使用メモリ量等を表すパラメータの上限が定められ、画面解像度やフレームレートの上限を決定している。
#br
Level | Max macroblocks per second | Max frame size (macroblocks) | Max video bit rate (VCL) for Baseline, Extended and Main Profiles | Max video bit rate (VCL) for High Profile | Max video bit rate (VCL) for High 10 Profile | Max video bit rate (VCL) for High 4:2:2 and High 4:4:4 Predictive Profiles | Examples for high resolution @frame rate(max stored frames)in Level |
---|
1 | 1485 | 99 | 64 kbit/s | 80 kbit/s | 192 kbit/s | 256 kbit/s | 128x96@30.9 (8) 176x144@15.0 (4) |
---|
1b | 1485 | 99 | 128 kbit/s | 160 kbit/s | 384 kbit/s | 512 kbit/s | 128x96@30.9 (8) 176x144@15.0 (4) |
---|
1.1 | 3000 | 396 | 192 kbit/s | 240 kbit/s | 576 kbit/s | 768 kbit/s | 176x144@30.3 (9) 320x240@10.0 (3) 352x288@7.5 (2) |
---|
1.2 | 6000 | 396 | 384 kbit/s | 480 kbit/s | 1152 kbit/s | 1536 kbit/s | 320x240@20.0 (7) 352x288@15.2 (6) |
---|
1.3 | 11880 | 396 | 768 kbit/s | 960 kbit/s | 2304 kbit/s | 3072 kbit/s | 320x240@36.0 (7) 352x288@30.0 (6) |
---|
2 | 11880 | 396 | 2 Mbit/s | 2.5 Mbit/s | 6 Mbit/s | 8Mbit/s | 320x240@36.0 (7) 352x288@30.0 (6) |
---|
2.1 | 19800 | 792 | 4 Mbit/s | 5 Mbit/s | 12 Mbit/s | 16 Mbit/s | 352x480@30.0 (7) 352x576@25.0 (6) |
---|
2.2 | 20250 | 1620 | 4 Mbit/s | 5 Mbit/s | 12 Mbit/s | 16 Mbit/s | 352x480@30.7(10) 352x576@25.6 (7) 720x480@15.0 (6) 720x576@12.5 (5) |
---|
3 | 40500 | 1620 | 10 Mbit/s | 12.5 Mbit/s | 30 Mbit/s | 40 Mbit/s | 352x480@61.4 (12) 352x576@51.1 (10) 720x480@30.0 (6) 720x576@25.0 (5) |
---|
3.1 | 108000 | 3600 | 14 Mbit/s | 17.5 Mbit/s | 42 Mbit/s | 56 Mbit/s | 720x480@80.0 (13) 720x576@66.7 (11) 1280x720@30.0 (5) |
---|
3.2 | 216000 | 5120 | 20 Mbit/s | 25 Mbit/s | 60 Mbit/s | 80 Mbit/s | 1280x720@60.0 (5) 1280x1024@42.2 (4) |
---|
4 | 245760 | 8192 | 20 Mbit/s | 25 Mbit/s | 60 Mbit/s | 80 Mbit/s | 1280x720@68.3 (9) 1920x1088@30.1 (4) 2048x1024@30.0 (4) |
---|
4.1 | 245760 | 8192 | 50 Mbit/s | 62.5 Mbit/s | 150 Mbit/s | 200 Mbit/s | 1280x720@68.3 (9) 1920x1088@30.1 (4) 2048x1024@30.0 (4) |
---|
4.2 | 522240 | 8704 | 50 Mbit/s | 62.5 Mbit/s | 150 Mbit/s | 200 Mbit/s | 1920x1088@64.0 (4) 2048x1088@60.0 (4) |
---|
5 | 589824 | 22080 | 135 Mbit/s | 168.75 Mbit/s | 405 Mbit/s | 540 Mbit/s | 1920x1088@72.3 (13) 2048x1024@72.0 (13) 2048x1088@67.8 (12) 2560x1920@30.7 (5) 3680x1536/26.7 (5) |
---|
5.1 | 983040 | 36864 | 240 Mbit/s | 300 Mbit/s | 720 Mbit/s | 960 Mbit/s | 1920x1088@120.5 (16) 4096x2048@30.0 (5) 4096x2304@26.7 (5) |
---|
- プロファイル(Profile) →-profile, -chromaoffsetオプションなど
MPEG-2などと同様、目的用途別に定義された機能の集合を表すプロファイルと、処理の負荷や使用メモリ量 (これらは画面解像度やフレームレートに影響する) を表すレベルが定義がされる。H.264に準拠する機器 (又はビットストリームそのもの) はこのプロファイルとレベルによって性能 (又はビットストリームをデコードするのに必要な性能) を表示することが多い。
- ベースラインプロファイル(Baseline Profile): I, Pフレームのみ、エントロピー符号化はCAVLC+UVLCのみ
- メインプロファイル(Main Profile): ベースラインプロファイルにBフレーム、CABAC、重み付け予測などを追加
- 拡張プロファイル(Extended Profile): ベースラインプロファイルにSI, SPフレームなどを追加
- ハイプロファイル(High Profile): メインプロファイルに 8×8画素整数変換、量子化マトリックス等を加えたもの。また、YCbCr --4:0:0色空間(すなわち白黒画像)にも対応している。
- ハイ 10 プロファイル (High 10 Profile): ハイプロファイルに10ビット画像フォーマットへの対応を追加したもの。
- ハイ 4:2:2 プロファイル (High 4:2:2 Profile): ハイ10プロファイルにYCbCr 4:2:2色空間への対応を追加したもの。
- ハイ 4:4:4 プロファイル (High 4:4:4 Profile): ハイ4:2:2プロファイルにYCbCr 4:4:4色空間や12ビット画像フォーマット、YCbCr以外への色空間への変換、可逆圧縮など多数の機能を追加したもの。
| Baseline | Extended | Main | High | High 10 | High 4:2:2 | High 4:4:4 Predictive |
---|
I and P Slices | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
---|
B Slices | × | ○ | ○ | ○ | ○ | ○ | ○ |
---|
SI and SP Slices | × | ○ | × | × | × | × | × |
---|
Multiple Reference Frames | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
---|
In-Loop Deblocking Filter | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
---|
CAVLC Entropy Coding | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
---|
CABAC Entropy Coding | × | × | ○ | ○ | ○ | ○ | ○ |
---|
Flexible Macroblock Ordering (FMO) | ○ | ○ | × | × | × | × | × |
---|
Arbitrary Slice Ordering (ASO) | ○ | ○ | × | × | × | × | × |
---|
Redundant Slices (RS) | ○ | ○ | × | × | × | × | × |
---|
Data Partitioning | × | ○ | × | × | × | × | × |
---|
Interlaced Coding (PicAFF, MBAFF) | × | ○ | ○ | ○ | ○ | ○ | ○ |
---|
4:2:0 Chroma Format | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
---|
Monochrome Video Format (4:0:0) | × | × | × | ○ | ○ | ○ | ○ |
---|
4:2:2 Chroma Format | × | × | × | × | × | ○ | ○ |
---|
4:4:4 Chroma Format | × | × | × | × | × | × | ○ |
---|
8 Bit Sample Depth | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
---|
9 and 10 Bit Sample Depth | × | × | × | × | ○ | ○ | ○ |
---|
11 to 14 Bit Sample Depth | × | × | × | × | × | × | ○ |
---|
8x8 vs. 4x4 Transform Adaptivity | × | × | × | ○ | ○ | ○ | ○ |
---|
Quantization Scaling Matrices | × | × | × | ○ | ○ | ○ | ○ |
---|
Separate Cb and Cr QP control | × | × | × | ○ | ○ | ○ | ○ |
---|
Separate Color Plane Coding | × | × | × | × | × | × | ○ |
---|
Predictive Lossless Coding | × | × | × | × | × | × | ○ |
---|
Xvid †
DivXNetworks社(現:DivX.Inc)がはじめたOpenDivXプロジェクトで生まれたものだったが、商用製品路線のDivXコーデックとオープンソースのXvidコーデックに分裂した。
- コーデックの入手方法
ソースコードで公開されているため、自分でビルドしなければならない。商用利用する場合はソースコードの公開が要求される。
ビルド済みのバイナリはNic氏によるものとKoepi氏によるものが有名で、FourCC Changer(FourCCタグdivx-xvid間の書き換えなどができる)やStates Reader(エンコードの様子を視覚的なグラフで確認できる)などのオリジナル機能が付いている。
主にAviUtlやVirtulDubで利用する場合が多い。
ffmpegやmencoderはビルド済みのxvidソースを同梱している。
- 一般的なコンテナ例
AVIコンテナの弱点の一つにBフレームが使用できないことが挙げられるが、xvidはPacked-bitstreamというオプションエンコードによりこれを実現できる。Bフレームを使用する場合は相応のプロファイルを選択し、Packed bitstreamオプションと必ず併用する必要がある。(現在プロファイルによる機器の再生制限はないが、相応のプロファイルを指定しないとPacked bitstreamオプションを設定できない)。
なおffmpegではBフレームのオプションを指定するとlibxvidが自働的に処理してくれる。しかし再生はスプリッターに依存する。
優秀なデコーダが多いためPCでの再生はほとんどこれを気にする必要は無いが、競合に注意。(Divx5や古いffdshow、新ffdshowのDX5などが競合する)
- (Xvid+MP3).avi
AVIコンテナに使用する場合はBフレーム(前後参照フレーム)を扱うことが出来ない。GOPをパック処理するなどの工夫が必要となる。
- (Xvid+AAC).mkv
変換君では最新ffmepgで利用できる。この組み合わせでMP4コンテナに収納すると一部のポータブルデバイスで互換がある。この場合はBフレームを使用できる。
※Divx3.1、Xvid、MS-MPEG4(MPEG-4のISOの暫定規格を取り入れてMicrosoft社が独自開発しWMV7に発展)は互換があり、ForCCの書き換えによって再生が可能。
- コーデックによるコンテナ指定
最適なビットレート管理や音声の同期が出来るらしい。変換君ではもちろん手動。
- AVI-Legacy
- AVI-OpenDML
- Matroska
- OGM
- 音声フォーマット
音声ストリームを指定して追加できる。コンテナのプロファイルに最適な設定を自動的に選択できる。変換君では手動。(OGGはコンテナだが、おそらくOGG Vorbis)
- 色深度
MPEG-4のピクセルフォーマットはYUV(YUV420)を採用しているため、12bit以上の色深度を出せない。しかし将来的に利用するためか、エンコーダによって16bitや24bitを指定するようになっている。中身に違いは無い。
なおffmpegでは24bit、mencoderでは12bit、Koepi's Xvidコーデックでは16bitを指定している。真空波動研などの解析ソフトではこれが妙に目立つため、掲示板などで質問が非常に多い。
- 字幕
.sub, .ssa, .txt, .dat, などから字幕ストリームを追加できる。ffmpegの字幕ストリーム関連のオプションも使用可能。
- レベルとプロファイル -profile, -level, -chromaoffsetオプションなど
xvid1.1.0ではプロファイルとレベルの組み合わせを選択する形で指定することが出来る。
ffmpegではこれを無制限に指定できるが、現在はH.264向けに-profileオプションが設定されているようなので効果は期待できない。(そもそも引数の型がintなのが謎)
なお、現在xvidのレベルやプロファイルによってパフォーマンスを変える再生エンジンや機器は存在しないようである。(選択ダイアログに「Level - Xvid will not force you to respect these」と強制しませんよ的な注意書きがある)。
#br
Profile @Level | Max frame size (macroblocks) | Max processing rate (macroblocs/second) | Max buffer size | Max video bit rate | Max bits over one second interval | Suggested VOP scale @frame rate |
---|
Simple @Level 0 | 99 mbs | 1485 mbs/s | 163680 bits | 64 kbps | - | 176x144@15 fps |
---|
Simple @Level 1 | 99 mbs | 1485 mbs/s | 163680 bits | 64 kbps | - | 176x144@15 fps |
---|
Simple @Level 2 | 396 mbs | 5940 mbs/s | 654720 bist | 128 kbps | - | 352x288@15 fps |
---|
Simple @Level 3 | 396 mbs | 11880 mbs/s | 654720 bits | 384 kbps | - | 352x288@15 fps |
---|
Advance Simple @Level 0 | 99 mbs | 2970 mbs/s | 163680 bits | 128 kbps | - | 176x144@30 fps |
---|
Advance Simple @Level 1 | 99 mbs | 2970 mbs/s | 163680 bits | 128 kbps | - | 176x144@30 fps |
---|
Advance Simple @Level 2 | 396 mbs | 5940 mbs/s | 654720 bits | 384 kbps | - | 352x288@15 fps |
---|
Advance Simple @Level 3 | 396 mbs | 11880 mbs/s | 654720 bits | 768 kbps | - | 352x288@30 fps |
---|
Advance Simple @Level 4 | 792 mbs | 23760 mbs/s | 1309440 bits | 3000 kbps | - | 352x288@30 fps |
---|
Advance Simple @Level 5 | 1620 mbs | 48600 mbs/s | 1833216 bits | 8000 kbps | - | 720x576@30 fps |
---|
Mobile | 330 mbs | 36000 mbs/s | 1048576 bits | 1334.850 kbps | 8 Mbits | 352x240@30 fps |
---|
Portable | 1200 mbs | 36000 mbs/s | 3145728 bits | 4854 kbps | 8 Mbits | 640x480@30 fps |
---|
Home | 1620 mbs | 40500 mbs/s | 3145728 bits | 4854 kbps | 8 Mbits | 720x576@25 fps |
---|
Highdef | 3600 mbs | 108000 mbs/s | 6291456 bits | 9708.4 kbps | 16 Mbits | 1280x720@30 fps |
---|
- Max frame size (macroblocks): Video Memory Verifier (VMV)
- Max processing rate (macroblocs/second): Video Complexity Verifier (VCV)
- Max buffer size (bits): Video Buffer Verifier (VBV)
- Max video bit rate (kbps): Max instantaneous bitrate
- Max bits over one second interval (Mbit): Target for AVI bitrate, filesize, or qantizer
- Suggested VOP scale @frame rate (pixels x pixels @ fps): Suggested VOP scale examples
Profile @Level | Adaptive Quantization | Interlaced Encoding | Quarter Pixel | Global Motion Compensation | B-VOPs | Packed bitstream |
---|
Simple @Level 0 | × | × | × | × | × | × |
---|
Simple @Level 1 | ○ | × | × | × | × | × |
---|
Simple @Level 2 | ○ | × | × | × | × | × |
---|
Simple @Level 3 | ○ | × | × | × | × | × |
---|
Advance Simple @Level 0 | ○ | ○ | ○ | ○ | ○ | ○ |
---|
Advance Simple @Level 1 | ○ | ○ | ○ | ○ | ○ | ○ |
---|
Advance Simple @Level 2 | ○ | ○ | ○ | ○ | ○ | ○ |
---|
Advance Simple @Level 3 | ○ | ○ | ○ | ○ | ○ | ○ |
---|
Advance Simple @Level 4 | ○ | ○ | ○ | ○ | ○ | ○ |
---|
Advance Simple @Level 5 | ○ | ○ | ○ | ○ | ○ | ○ |
---|
Mobile | ○ | × | ○ | × | ○ | × |
---|
Portable | ○ | ○ | ○ | × | ○ | × |
---|
Home | ○ | ○ | ○ | × | ○ | × |
---|
Highdef | ○ | ○ | ○ | × | ○ | × |
---|
- Quantization type
圧縮アルゴリズムをH.263方式かMPEG方式を選択できる。MPEGの方が圧縮率が高く再生の互換性が低い。MPEG方式ではマトリックスをカスタマイズすることが出来る。
ffmpegではH.263方式でエンコードされる。
- Adaptive Quantization
自動的に量子化を行う。圧縮率が上がるがシーンチェンジで破綻することがある。
- Interlaced Encoding
インターレース解除を有効にする。デフォルトではボトムフィールドから読み込む。ffmpegのオプションには-deinterlaceオプションがあるが、
狙った効果を出せるかは微妙。特に思うところがなければ使用しないほうがよい。
- Quarter Pixel
1/4動き補償を有効にする。高画質になるが、エンコード時間や再生負荷が増大する。
- Global Motion Compensation
スプライトVOPを有効にする。再生エンジン側がほとんど未対応のため使用しない。エンコード時間や再生負荷が増大するだけでなく、再生がコマ落ちになることがある。
- B-VOPs
B-VOPsを使用する。主に2passエンコードで使用する。圧縮率が上がる。
- Packed bitstream
P-VOPのデコード時にB-VOPの先読みを有効にする。
AAC †
- AACの種類
ISO規格にはMPEG-2 AACと MPEG-4 AACとがあり、ヘッダの一部分が1ビット異なるだけで圧縮アルゴリズムに違いは無い。
AACには拡張機能が使用可能であるかどうかによって幾つかの種類があるが、一般的に利用されているのはAAC-LC (AAC Low Complexity) と呼ばれる基本機能だけを用いるものである。
MPEG-4 AACバージョン3においては、約半分のビットレートで従来のAACと同等の音質を実現するHE-AAC (High-Efficiency AAC) が追加承認されている。 又、可変ビットレート (VBR) にも対応している。
- MDCTによる直交変換
入力は2048点、もしくは256点のMDCTを用いて、周波数領域に変換される。
変換長は、入力信号の性質によって切り替えられる。
- TNS
周波数領域の信号を、時間軸のものと見なした線形予測を行う。
周波数領域でのARモデル化は時間領域でのノイズ特性を持ち、人間の聴覚の持つ継時マスキング特性を再現するのに都合が良い。簡単に言うと音量に合わせて雑音の量を調整する。雑音を、聞こえない領域に集めるように圧縮する。
- ステレオ・コーディング
入力信号がステレオの場合は、ステレオ特有の性質を利用した符号化が行われる。
なおステレオ・コーディングは、サブバンド毎に利用しなかったり、どちらか片方だけを利用したりすることができる。(両方同時に使用することはできない。)
- インテンシティ・ステレオ
左右の信号を、単一の信号と定位情報のみに削減して符号化する。
- MSステレオ
左右の信号を和/差信号とする。
- 量子化
聴覚モデルで決定した許容量子化雑音エネルギーと量子化雑音エネルギーが比例するように量子化を行う。
- ハフマン符号化
量子化された値を固定ハフマン符号化する。符号帳は11種類の中からサブバンド毎に選択される。
- 後方予測
- プロファイル
AAC規格では、デコーダの回線規模やソフト規模を制限しやすいように、3つのプロファイルを規定している。
- Main
ゲイン制御部を除くすべての信号処理ブロックが存在する。必要なRAM容量、計算量とも最大であるが、最も高音質が得られる
圧縮率が良いが、メモリーやCPUパワーを消費する
- LC(Low Complexity)
TNS処理を簡単にし、後方予測を使わない
Mainプロファイルから予測部を削除し、TNSの予測次数にも制限を加えている。これによりRAM容量、計算量の削減を図っている。なおMainと同じくゲイン制御部はもっていない
- SSR(Scalable Sampling Rate)
入力された周波数帯域の1/4〜1/2の帯域のみを符号化できる。低サンプリング低ビットレートの組み合わせに有効
4バンドのサブバンド分析フィルタを含むゲイン制御部をもつ。予測部は存在しない。またTNSの予測次数も制限されている。4分割サブバンドフィルタ出力の内、例えば最低域バンドのみをデコード、低域側2つのバンドのみをデコードというように、スケーラブルな構造をもつデコーダを構成できる
※HE(High Efficiency)-AAC
スウェーデンのCoding Technologiesが開発したSBR(Spectral Band Replication:スペクトル帯域複製)を導入
AAC-LCより圧縮率を40%も効率化する。aacPlusはCoding Technologiesの商標なので通常はHE-AACと呼ぶ。
AAC-LCと区別するためにAAC-LCプロファイル、HE-AACプロファイルと呼ばれることがあるが、語弊のある表現。
性能を表すプロファイル( -profile オプション)とは無関係。
参考:MPEG-4技術 †
MPEG-4(Motion Pictures Experts Group phase 4)は、動画・音声全般をデジタルデータとして扱うための規格のことである。MPEG-1やMPEG-2と同様、システム、ビジュアル、オーディオ、ファイルフォーマットの各技術から構成される。規格が広範囲で多義。
MPEG技術は、各技術毎にパート(Part)と呼ばれる規格が作成され、技術が採用/規格化されるたびにパートが増える。Part2とPart12でビジュアル(動画)技術の規格であるため、詳細を記述する。
Part 1 : システム(各メディアの統合・同期、BIFSなど)
Part 2 : ビジュアル。動画像符号化技術
Part 3 : オーディオ。音声符号化技術
Part 4 : 妥当性テスト
Part 5 : 参照ソフトウェア
Part 6 : Delivery Multimedia Integration Framework (DMIF) などの規定)
Part 7 : 最適化ソフトウェア (処理の高速化やエラー耐性などの応用に関する検証に用いられる)
Part 8 : MPEG-4コンテンツのIPネットワーク上の伝送
Part 9 : 参照ハードウェア記述
Part 10 : Advanced Video Coding (AVC) =H.264
Part 11 : シーン記述とアプリケーションエンジン
Part 12 : ISOメディアフォーマット (QuickTimeによるMP4フォーマット、JPEG 2000のJP2フォーマット)
Part 13 : Intellectual Property Management and Protection (IPMP) (知的財産権の保護技術に関する規定)
Part 14 : MP4ファイルフォーマット
Part 15 : AVCファイルフォーマット (H.264/MPEG-4 AVCに関するMP4ファイルフォーマットの拡張)
Part 16 : Animation Framework eXtension (AFX) (主に3次元グラフィクスに関する規定)
Part 18 : フォントの圧縮とストリーミング
MPEG-4 (Part 2) †
圧縮アルゴリズムの基本原理は、MPEG-1、MPEG-2、H.263などと基本的には同様であり、空間変換やフレーム間予測、量子化、エントロピー符号化を採用している。
ffmpegではmpeg4ビデオコーデックとしてこれを扱い、一般に3GP、3G2コンテナに収納される。これらは規格としてはMP4フォーマットであるが、現在MP4コンテナは既定(Part 14)され、H.264専用で利用されている。
- 空間変換
MPEG4では、空間変換に離散コサイン変換が用いられる。8×8画素のブロックを単位として、原画像もしくはフレーム間予測の予測誤差画像のDCT係数を求め、その係数を量子化している。
- フレーム間予測
フレーム間予測において参照フレームとして指定できるフレームは、Iフレーム, Pフレーム、Bフレームが存在する。Pフレームでは時間軸で前方のフレーム1枚の画像を利用して符号化を行うが、Bフレームでは前方・後方2枚の画像を利用して符号化を行う。
- 1/4画素精度動き補償
動き補償の精度としては1/2画素精度まで基本的に利用可能である。MPEG-4 ASP(Advanced Simple Profile)では、1/4画素精度動き補償も採用している。
- AC/DC予測
空間変換で得られたDCT係数に対して、さらに係数の最上列ないし最左列の係数から予測を行って情報量を削減する技術が導入されている。
- エントロピー符号化
ハフマン符号をベースとした可変長符号化(VLC; Variable Length Coding)が採用されている。
- プロファイル
- Simple Profile(SP)
ワイヤレスネットワークなどを対象とした、制限のあるプロファイル
- Advanced Simple Profile(ASP)、
Xvidコーデックはここに分類される。
- Main Profile (MP)
MPEG-4の音声符号化 (Part 3) †
MPEG-4の音声符号化技術では、CELP符号化(携帯電話の音声符号化方式のベースになっている)やAAC、TwinVQ(NTTヒューマンインターフェース研究所が開発したマイナーな音声符号化技術)などが採用されている。
つまりAACもMPEG-4技術。ffmpegでは、オーディオコーデックとして利用できる。
MPEG-4 AVC (Part 10) †
Part 2では、規格範囲が拡散しすぎてしまったという反省のもと、通常の動画像の圧縮効率を追求するという方針のもと開発が進められた。
ITU-Tと共同で規格化したものでありH.264と同じもの。H.264/AVCとも呼ばれる。つまりH.264コーデックのこと。
コメント †