mikeo_410


画像のフレーム・レート

  作成者の意図通りの再生をするための要素には、縦横比のほかに、フレーム・レートとビット・レートがあります。

  映画のフィルムの1コマは1/24秒で、24fps と言うことのようです。旧来のテレビは、29.97fps と表記されます。
  数値が大きくなって、速くなる分には、見た目は変わらないので問題がありません。
  作成時より小さい値になると、どこかで表示されないコマが発生することになります。
  人の視認能力もあるので、60 fps 超での再生を意図して、作品が作られることはないと思います。60 fps は、おそらく現在の再生装置の最大値です。120 fps という表記を見ますが、残像を消すために黒(または白)のフレームを交互に挿入しての数字で、実効は 60fps のようです。
  旧来のテレビも、60(59.94)fps と言うことがあり、これは垂直帰線回数で、水平方向の2回の描画で1フレームを描く(インターレス)ことによります。

1.ffmpeg でどう指定するか

  ffmpeg で、具体的には、どう指定するかを考えます。
  結論を言うと、入力と同じ値にすると言うことです。実際には、フレームレートオプションを指定しません。ただし、能力の低い機器を考えて、12.5fps などの設定は可能にします。

  1. ffmpeg で設定できるフレームレートは、再生機器のフレームレートとは無関係。
    デコーダーは、1フレーム分の画像を、フレームレートの示す時間で用意する。
    再生機器は、この画像を自身の周期でスキャンして再生する。
  2. ただし、これはデコーダに十分な能力がある場合で、エンコード時のフレームレートでデコードできない場合は、正常に再生できない。
  3. 大抵のコーデックは、時間軸方向にも圧縮しているので、フレームレートの増減は、データ量に大きく影響しない。ただし、フレーム数分のパケットが必要なことが多いので、その分の増減はある。DVコーデックや未圧縮の画像の場合は、データ量はフレーム数に比例する。

2.フレーム・レートを変えると言うこと

  これには2つの異なった意図が考えられます。

  1. 再生速度を変える
    フレーム・レートは、各フレームの画像を再現するのに必要な情報ではない。
    フレームレートを、1フレームの表示時間に使っているのは、プレーヤー。
    フレームレートの数値だけを変えて、再生させると再生速度がかわる。
    音声との同期のために変更したいと言うことが考えられる。
    これは、「情報書き換え」ソフトの仕事で、おそらく ffmpeg には、この機能はない。
    プレーヤーは、外部へは 29.97fps でも、これとは無関係にデコードを行ってる。おおむね、フレーム分のバッファを持っているのだと思う。
  2. ffmpeg のようなエンコーダは、デコーダ処理部がデコーダ処理部のタイミングで再現したフレームの画像を、エンコーダ処理部への入力にする。エンコーダ処理部は、エンコーダ処理部のタイミングで画像を参照するので、再生速度は変わらない。
    携帯端末など非力な再生環境のために、フレームレートを低くする場合には有効。

3.フレーム・レートの値

  フレーム・レートの値は、再生機器で差障らない限り、変える必要のない数字です。作成時の値のままにして置くのが良いと考えますが、何かの都合で設定する場合には一般的な値を付けたいと思います。

3.1.作成時のフレーム・レート

  どんなフレーム・レートでも作れるわけですが、映像を作成する側は広く視聴されることを意図します。また、使用する機材にも同じ目的で基準があります。

ソース fps
映画(24fps)

23.976
24

PAL 25
NTSC 29.97
30
HD 60
120

3.2.携帯端末のフレーム・レート

  フレーム・レートは入力以上にする理由はありません。再生機器の能力で、デコードが追いつかない場合には、フレームレートを小さい値にすることが考えられます。この場合、再生できる値にすると言うこと以外には基準がないと思います。フレームレートは、単に画像を切り替えるタイミングの算出に使われるだけなので、数値には特別な制限はないと思います。
  5.994, 6.25, 7.5, 10, 11.988, 12.5, 14.985, 15, 23.976, 25 fps 
を、設定時の選択肢にしておきます。

4.フレーム・レートと容量 

  非圧縮の場合は、当然フレーム・レートに比例してデータ量が増減します。可逆圧縮も準じます。
  また、DVの圧縮は、時間軸方向には行わない(各フレームを独立に圧縮)とのことなので、これもフレーム・レートに比例してデータ量が増減します。
  一般的な、コーデックの圧縮は、時間軸方向にも行われるので、フレーム・レートの値とデータ量の間の関係は、疎になります。
  元のフレーム数を超えたフレームレートを指定しても、同じ画像を繰り返すだけで、データ量は増えないとと言うことです。
  ただし、通常フレーム数分のパケットが作られるので、そのオーバーヘッド分はフレーム・レートに比例します。

  DVD 規格のデータを使って、確認してみます。
  ffmpeg を使って、映像ストリームだけをAVIにコピーしてみます。60秒と1000秒を指定して、コピーしたところ、AVIのストリームヘッダの情報は以下のようになりました。

  映像の長さの指定
項目 60秒 1000秒
dwScale 1001 1001
dwRate 30000 30000
dwLength 2248 37463
     
dwLengthを
長さ(秒)で割った値
37.47 37.46

  dwRate/dwScale=30000/1001=29.97 が、フレームレートを示します。dwLength は、AVIでのブロック数を示します。フレーム数より多いのは、MPEG-2 の仕様なのか、AVIにするときに分割されているのかはわかりません。おそらく、コピーを指定すると、内容を見ないので、後者だと思います。

  次に、同じ60秒分を、5,10,15,20,25,30,60 fps を指定して、mpeg4 にエンコードしてみます。mpeg4 を選んだのは、任意の fps を指定できるからです。mpeg2video は、5fps などは受け付けません。

 
 
        フレームレートの設定値(fps)
5 10 15 20 25 30 50 60
ファイルサイズ(MB) 1.659 2.111 2.604 3.106 3.506 3.493 3.480 3.489
dwLength 300 600 901 1201 1502 1802 3002 3606

 

  DVD規格のソース(29.97fps)を、mpeg4 コーデックで60秒分エンコードしてみました。
  出力のフレームレートを変えて、AVIファイルを作ります。左図は、ファイルのサイズと、パケット数をプロットしたものです。

  mpeg4もフレームレートに応じたパケットを作ることがわかります。ここでパケットは1フレーム時間に相当するデータのブロックのことで、デコードの単位です。

  ソースの 29.97fps 以上には、入力となるデータが増えないので、単位時間あたりのフレーム数が増加してもそれ以上にはファイルが大ききなっていません。

  また、mpeg4には、フレーム数の増加にともなう、オーバヘッドと言うのもないようです。

5.フレーム・レートと画質

  動画ファイルを変換する話なので、元の画像のフレームレートが基準になります。
  元のフレームレートより大きな値にしても、同じコマが増えるだけなので、見た目には何の影響のないことになります。
  ただし、フレームレートを上げると容量が増えるケースでは、同じビットレートなら画質が落ちることになります。
  25fps 以下は、動きのある個所は、コマが足りないのが感じられます。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


東京都 任意売却 センター南 田園都市線 不動産 千葉 不動産 石川県 不動産