キーフレームと GOP とは?動画のシークが遅い理由
動画はどうやって圧縮されているか
動画をそのまま記録すると、フル HD の 1 コマだけで約 6MB になり、1 秒 30 コマなら 1 秒で約 190MB にもなります。そこで H.264・HEVC(H.265)・VP9・AV1 などの形式では、前後のフレームとの違い(差分)だけを記録して、データを大幅に小さくしています(フレーム間予測)。
動いていない背景は前のフレームのものを使い回し、動いた部分だけを記録する、というイメージです。
キーフレーム(I フレーム)と P / B フレーム
| フレームの種類 | 記録のしかた | 表示するために必要なもの |
|---|---|---|
| I フレーム(キーフレーム) | そのフレームだけで完結した画像として記録 | そのフレームだけ |
| P フレーム | 前のフレームとの差分を記録 | 前のフレーム(さかのぼるとキーフレームまで) |
| B フレーム | 前と後ろのフレームとの差分を記録 | 前と後ろのフレーム |
P / B フレームは、単独では画像になりません。表示するには、直前のキーフレームから順に復元(デコード)していく必要があります。
GOP(キーフレームの間隔)
キーフレームから次のキーフレームの手前までのまとまりを GOP(Group of Pictures)と呼びます。キーフレームを置く間隔は、動画を作った機器やソフトの設定で決まり、数十フレームおきから数秒おきまでさまざまです。
キーフレームの間隔が長いほどファイルは小さくなりますが、途中からの再生や移動(シーク)には時間がかかるようになります。Video Inspector Pro に動画を読み込むと、フレームの数とキーフレームの数を表示します。キーフレームのコマでは「キーフレーム」と表示され、「キーフレーム ▶▶」ボタンで前後のキーフレームへ移動できます。
シークやコマ戻しが遅くなる理由
キーフレームでない位置へ移動するとき、プレイヤーは直前のキーフレームまで戻り、そこから目的のフレームまでを順にデコードします。キーフレームの間隔が 2 秒の 60 fps の動画なら、最悪で 100 コマ以上をデコードしてから、やっと 1 コマを表示できることになります。
1 コマ戻る操作は特に大変です。1 つ前のフレームを表示するためにも、キーフレームからデコードし直す必要があるからです。Video Inspector Pro では、前へ戻るときに直前のキーフレームから目的のコマまでをまとめてデコードして覚えておき、続けて戻る操作を速くしています(WebCodecs に対応したブラウザの場合)。
編集しやすい動画の書き出し設定
コマ送りや編集を快適にしたい場合は、次のような書き出し方があります。
- キーフレームの間隔を短くする: 書き出しソフトの「キーフレーム間隔」「GOP 長」を短く(たとえば 1 秒以下に)します。ファイルは大きくなります。
- すべてキーフレームの形式にする: ProRes や DNxHR などの編集用の形式は、基本的に全フレームがキーフレームです。ファイルはとても大きくなり、ブラウザでは再生できないものが多い点に注意してください。
なお、Video Inspector Pro の「劣化なしで切り出す」は再圧縮しないため、切り出しの開始位置が IN の直前のキーフレームになります。IN ちょうどから始めたい場合は、「フレーム単位で切り出す」(再エンコード)を使います。