信号・規格編集納品配信

Iフレーム

Intra-coded frame / アイフレーム

前後のフレームを参照せず、それ1枚だけで絵を復元できる圧縮フレームのことです。配信の頭出しや編集の切り取りはこのフレームを起点にするため、どの間隔で入れるかが再生と編集の両方に効きます。

意味
他のフレームを参照せずに符号化されたフレーム
別の呼び方
キーフレーム、Iピクチャ、イントラフレーム
データ量
同じ画でもPフレームやBフレームより大きい
特別なIフレーム
IDRフレーム。H.264やHEVCで、以降のフレームにそれ以前を参照させない
間隔の指定
FFmpegは `-g` にフレーム数、OBSやエンコーダの画面では秒で指定することが多い
全フレームをIにした方式
オールイントラ。ProRes、AVC-Intra、DNxHDなど
確認方法
ffprobeで `pict_type` を出すと I / P / B が並ぶ

配信サービスの設定画面に出てくる「キーフレーム間隔」も、編集ソフトで特定の位置がうまく切れないという困りごとも、行き着く先はIフレームです。Iフレームは1枚だけで絵を復元できるフレームで、再生を始められる場所も、きれいに切れる場所も、基本的にはここになります。

Iフレームが使われる場面

ライブ配信の設定では、Iフレームを何秒ごとに入れるかを指定します。OBSの「キーフレーム間隔」やFFmpegの -g がこれにあたり、YouTubeはライブ用エンコーダに2秒ごとを推奨しています。視聴者が途中から入ってきたとき、再生はIフレームから始まるので、間隔が長いと最初の絵が出るまで待つことになります。

オンデマンド配信でも同じです。HLSやMPEG-DASHは動画を数秒のセグメントに割り、そのセグメントの先頭はIフレーム、正確にはIDRフレームである必要があります。画質を切り替えるときは別のビットレートのセグメントに乗り換えるので、どの画質のファイルもIフレームの位置が揃っていなければなりません。エンコード時に位置を固定するため、FFmpegでは -force_key_frames を使います。

収録や編集の側では、Iフレームの多さがそのまま作業の軽さになります。ProResやAVC-Intraのように全フレームをIフレームにした素材は、どのコマで切っても前後を計算し直す必要がなく、スクラブもカットも軽く動きます。

Iフレームの仕組み、IDRフレームとの違い

Iフレームは他のフレームを見ずに、1枚の絵の中だけで圧縮します。JPEGに近い考え方で、画面を小さなブロックに分けて周波数に変換し、細かい成分を削ります。前のフレームとの差分を使わないぶんデータ量は大きく、同じ画質ならPフレームやBフレームの何倍かになります。

H.264やHEVCには、Iフレームの中でも特別なIDRフレームがあります。IDRが現れると、デコーダはそれまでのフレームをすべて忘れ、以降のフレームはIDRより前を参照しません。ふつうのIフレームは単独で復元はできるものの、後ろのフレームが「そのIフレームより前」を参照している場合があり、そこから再生を始めると絵が壊れます。配信の区切りにIDRが求められるのはこのためです。

GOPはIフレームから次のIフレームの手前までのまとまりを指す言葉なので、Iフレームの間隔を指定することとGOP長を決めることは同じ操作になります。

Iフレームで間違えやすい点

まぎらわしいのが、編集ソフトの「キーフレーム」です。After EffectsやPremiere Proでエフェクトの値の変化を打つ点もキーフレームと呼びますが、こちらは圧縮とは無関係です。書き出し設定の欄に出てくるキーフレームは圧縮のIフレーム、タイムラインのエフェクト欄に出てくるキーフレームはアニメーションの制御点で、別のものだと分けて考えてください。

もうひとつは、指定の単位です。FFmpegの -g はフレーム数なので、-g 60 は60fpsなら1秒、30fpsなら2秒になります。フレームレートを変えたら見直してください。x264などのエンコーダは場面が切り替わった瞬間にIフレームを自動で挿入する機能を持っていて、これが働くと間隔が不揃いになります。配信用に位置を揃えたいときは、シーン検出による挿入を切るか、キーフレームの位置を明示します。

よくある質問

Iフレームを増やすと画質は良くなりますか

同じビットレートなら、Iフレームを増やすほど1枚あたりに使えるデータが減るため、動きの多い映像では画質が落ちることもあります。増やして得られるのは頭出しの速さと編集のしやすさで、画質のためというより用途に合わせた選び方になります。

キーフレームとIフレームは同じものですか

圧縮の文脈では同じものを指します。ただし編集ソフトのタイムラインで使うキーフレームはアニメーションの制御点で、まったく別の意味です。

Iフレームの位置を確認する方法はありますか

ffprobeで -select_streams v -show_entries frame=pict_type を指定すると、フレームごとにI・P・Bのどれかが並んで出ます。Iが何フレームおきに現れるかを数えれば、実際の間隔が分かります。

この用語を扱ったコラム

似ている形式との違い

名前主に使う場面Iフレームとの違い
Pフレーム圧縮率を上げる前のフレームとの差分だけを記録する。単独では絵にならない
Bフレームさらに圧縮率を上げる前と後ろの両方を参照する。Iフレームとは逆に、周りが揃わないと復元できない
GOP圧縮のまとまりIフレームから次のIフレームの手前までのひとかたまり。Iフレームはその先頭
オールイントラ編集・高画質収録すべてのフレームをIフレームにする方式。編集は軽いがデータ量は大きい

関連する用語

最終更新