- ベストアンサー
キーフレームとはなんですか?
Flash等でいうキーフレームは、物体の動きの端点のことだと認識しているのですが、mpegムービー圧縮などで「何秒ごとにキーフレーム」という意味がいまいちわかりません。 これを入れるほど速い動きに追従できるが、それに伴ってムービーのサイズが大きくなるとも聞いたのですが、具体的にどれくらいなのかがわからないんです。教えていただけませんか? 圧縮対象は、あまり動きの激しくないアニメーションです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
テレビや映画等は1枚1枚の微妙に異なる画像を高速で表示することで動きを表示していることはご存知だと思います。(いわゆるパラパラマンガのイメージですね) MPEGでも基本的には同じなのですが、いくつかの特長があります。 ・キーフレームには1枚の静止画の全画面イメージが保存されている ・キーフレーム以外の各フレームには差分しか保存されていない ・差分以外の部分(キーフレームから変化無し)はムービー再生時には全く処理されない。 つまり、MPEGではキーフレーム以外では差分(画面上でキーフレームから変更のあった部分)のみの画像情報しか保存しないことで高い圧縮率を実現しています。 画像そのものを圧縮したりもしていますが、まぁ上の考え方でも問題無いです。 またテレビや映画、アニメなどはMPEG風に言えば全てがキーフレームで構成されているということになります。 これらを踏まえた上で、MPEGの問題点をあげてみると… 1.キーフレームの出現頻度を上げるとファイルサイズが極端に大きくなってしまうことがある 2.動きの速い場面(特に画面全体がスクロールするような)ではキーフレーム間の各フレームの差分情報が大きくなってしまう 3.画面全体に及ぶような差分による書き換えは処理が重く再生時のフレームレートが上がらずカクカクした動きになってしまう これに関してはPCの高速化によりほとんど関係無くなってしまってますね。(^^; 前振りが長くなりました。m(_._)m 結局、キーフレームがあると3の時に非常に重い処理である「画面全体に及ぶような一部書き換え処理」ではなく、キーフレームが持つ画面情報を無条件で一括転送することで表示することが出来るため、滑らかに画面表示することが出来るようになります。 なぜ画像の一部書き換え処理が重いかについては詳細は省きますが、簡単に言えばある画像(キーフレーム)と別の画像(差分)を合成することは大変な計算量が必要と思っていただければいいです。 このため全画面に及ぶような差分があるとそのために処理する計算量が膨大になるために1画面を表示するために時間がかかる、結果、フレームレートが落ち、カクカクした動きになるというわけです。 また画面の動きが速いと差分情報も非常に大きくなってしまいますが、キーフレームをある程度の頻度でいれてやると、差分自体の情報量は相対的に減ります。 ですので、動きの速い場面が多いムービーの場合はキーフレームを少し多めに入れてやることで、逆にファイルサイズが小さくなることもあります。 また固定された背景の画面上を小さな物体が移動するだけといったアニメーションであれば、キーフレームは最初の1枚だけでも大丈夫です。 上の例はちょっと極端ですが、適切なキーフレームの量(何秒に1回とか)というのはそのムービーの内容次第なのでなんとも言えません。 こんなところでおわかりいただけたでしょうか?
その他の回答 (1)
普通は1~2秒、長くても3秒くらでしょうか。何パターンか実際に試してみて、画質、動きなどを実際に体験してみるのが一番です。 長い間キーフレームがないと、「少し戻って見直す」ような時に、キーフレームが遠すぎて、再生開始までに時間がかかります。
お礼
プレーヤでシークしたときのあの変な動きはキーフレームを捜していたのですね。確かに、減らしすぎると再生が追いつかずに崩れてしまうことがありました。今は2秒くらいで落ち着いています。あまり悩まずに、品質を少しでも上げられるように研究してみます。ありがとうございました。
お礼
大変わかりやすい説明、ありがとうございました。mpeg4で試行錯誤しているのですが、どうやら自動的にキーフレームを入れてくれる機能があるようで、あまり悩まなくて済みそうです。手持ちのムービーの場合、10~2秒おきくらいまでは大きさが変わらず、1秒以下にすると途端に大きくなるのでこれくらいが適正値ということなんでしょうね。今度はできるだけノイズを減らして効率の良い圧縮ができるように研究してみます。 ・・・mpeg4のデータレート指定がかなりいい加減なので困ってはいますが。(笑) では、ありがとうございました。