はじめに
コンピュータで扱う動画は、静止画を毎秒何枚とコマ送りのように表示するものですが、容量を節約するために通常はMPEGなどの圧縮技術を使います。
このページでは、MPEGを例にあげて簡単な圧縮の原理と、MPEGの設定項目等で目にする『I』、『P』、『B』などのフレームの種類についてお話ししようと思います。
圧縮とフレーム
MPEG1を例にとってちょっと細かく動画圧縮の原理を説明します。
例
○ | ○ | ○ | × | × | × | :1フレーム目 |
○ | × | ○ | × | × | × | :2フレーム目 |
○ | × | × | ○ | × | × | :3フレーム目 |
○ | × | × | ○ | × | × | :4フレーム目 |
○ | × | × | ○ | ○ | × | :5フレーム目 |
× | × | × | ○ | ○ | ○ | :6フレーム目 |
という動画があったとします。
これを前の画像から変化した分だけを記録すると
○ | ○ | ○ | × | × | × | :1フレーム目(キーフレーム) |
× | :2フレーム目 | |||||
× | ○ | :3フレーム目 | ||||
○ | × | × | ○ | × | × | :4フレーム目(キーフレーム) |
○ | ○ | :5フレーム目 | ||||
× | ○ | :6フレーム目 |
となって各フレームの記録するデータが大幅に減るワケです。実際にはさらに後ろの画像との差も考慮されるものもあります。
MPEG1のフレームには次の3種類のフレームがあります。
- すべてを記録したフレーム(キーフレームと呼ばれる)
- 前のフレームとの差を記録したフレーム
- 前と後ろのフレームの差で記録したフレーム
上から順にI-フレーム、P-フレーム、B-フレームと呼ばれています。 一般的なMPEG1のインターバルは I Frame 15 P Flame3でIBBPBBPBBPBBPBBIBBPBBPBB …のようになっているようです。ちなみに、Iから次のIまで IBBPBBPBBPBBPBBをGOP(Group of Pictureの略)と呼びます。
GOP単位の編集
編集ソフトによってはこのGOP単位での編集のみサポートしたソフトがあります。これはこの塊づつならば編集しても影響がでないためです。 ただし、そうとも言い切れないということは少し考えればわかります。というのはIBBPBBPBBPBBPBB の最後のBは次のIフレームとの差も考えてつくられています。ここで、次のIフレームが無くなったらこのBフレームは表示できなくなるのです。
そこで、より編集を楽にできるように、GOP内部で完全に完結するように最後のBをPのようにする方法があってClosed GOPと呼ばれます。この設定でMPEG1をエンコードすれば本当にGOP単位での編集が正しく可能となるのです。
フレーム単位の編集
日本の放送方式がNTSCで29.97であることを考えるとGOPは15フレームで約0.5秒となることになります。この0.5秒という時間は短いですが、人間の目に余裕で認識できる時間です。よって保存するものをしっかり編集したい場合はGOP単位ではなくフレーム単位で編集する必要があります。
ただし、上記のとおりGOPの途中のコマで切った場合にそのGOPは不良となってしまうので一旦デコードして再度エンコードすることになります。しかし再エンコードすることは著しい画質劣化を生むだけでなく、無駄に時間がかかるので避けたいものです。
そこで考えられたのは壊れてしまったGOPのみを展開して再エンコードする方法でスマートレンダリングと呼ばれる方法です。フリーソフトなどで対応したものはすくないですが、ちゃんとした編集ソフトであれば対応しているものが多く、きちんと編集するにはこの方法がベストでしょう。
ちなみに、理論的にはスマートレンダリングはたかだか一つのGOPを展開して再エンコードしているだけのはずなのに妙に時間がかかったりします。やはり下準備などがいろいろあるのでしょうか?