小さい画像サイズへの変換について
ffmpeg には、3gp(3GPP)、3g2(3GPP2)、ipod、psp と言った出力形式があります。
これらは、テレビに比べて小さい画面で、大きな容量のストレージがないことから考えられたものだと思います。
しかし、ビデオの再生画質と言う VCD が 352x240画素で、メディアも650MB程度であることを考えると、上記の機器は非力とは思えませんが。
再生機器を選ぶと、自動で変換するようにしたいのですが、わたしが持っているのは、普通のDVDプレーヤーとテレビだけです。パソコンで確認できることはしておこうと思います。
1.3GPPの出力条件
メニューの「出力条件の追加」をクリックします。
3gp(3GPP) を選ぶと、以下のような設定が選べます。
| 映像コーデック |
| h263 |
| mpeg4 |
| libxvid |
| libx264 |
|
| 音声コーデック |
| aac |
| libopencore_amrnb |
|
使用する再生機器で再生できなければ始まらないので、再生できる組み合わせを選びます。
再生できる組み合わせが複数ある場合の選択基準を考えます。
2.使用中の出力条件の編集
メニューの「出力条件の追加」を行うと、画面左下のコンボボックスの選択肢に追加されます。
「編集」ボタンで、以下の設定ができます。
| 映像コーデック |
サイズ |
フレームレート |
ビットレート |
| h263 |
128x96, 176x144,
220x176, 240x192,
320x240, 352x288 |
5.994, 6.25, 7.5,
10, 11.988,
12.5, 14.985,
15,23.976, 24,
25 fps
|
64 - 1150 kbps |
| mpeg4 |
| libxvid |
| libx264 |
| 音声コーデック |
サンプリングレート |
ビットレート |
| aac |
16,000,
22,050, 24,000,
32,000,
44,100, 48,000,
64,000, 96,000Hz |
12000,14000,16000,
32000,48000,64000,80000,96000,
112000,128000,144000,160000,176000,192000,
208000,224000,240000,256000,272000 |
| libopencore_amrnb |
8,000Hz
|
4,750,
5,150, 5,900,
6,700,
7,400, 7,950,
10,200, 12,200 bps |
3.音声の目安
DVDやCD並みの音声が必要なら、ビットレートやファイルサイズの目安は以下のようになります。
- CD を考えると、16ビットサンプルの44.1KHz、ステレオなので、ビットレートは、それらの積の 1,411.2 kbps になる。
1秒当たりの容量は、これを8で割った、176.4KB になる。
- DVD の場合は、48KHzのサンプリングレートが使われるが、ac3 や mp2 で圧縮される。
ac3 で、384kbps 程度のようだ。
1秒当たりの容量は、48KB となる。
- これに準じて、VCD や SVCD は、44.1KHzのサンプリングで、224kbps の mp2 を使う。
1秒当たりの容量は、28KB となる。
- aac も 音質重視なら、mp2 とあまり変わらない容量になるようだ。
aac が使われるのは、ビットレートを下げたときの影響がmp2より緩やかなのだろうと推測する。
最近は、22,050Hz の動画も多く見かけます。これも、私には全く問題ない音質です。
1秒当たりの容量は、112kbps、14KB 程度なら普通に下げられると考えます。
これで、30分なら 25.2MB ます。
これ以上の圧縮が必要なら、音質を犠牲にすることになります。そう言ってっも、96kbps にしたら聞き取れなくなるものでもないので、下限の見て置きましょう。
ffmpeg の aac は、5bps 以下と言った指定も可能です。ただし、聞き取れる限界は24Kbps で、12KHzは音が飛んでいました。
1秒当たりの容量は、3KB となります。
さらに、低いビットレートが選択できるのが、libopencore_amrnb です。
サンプリングレートが8,000Hz、チャネル数は1に固定です。サンプリングレートから、4KHz以上の周波数の音は存在しなくなることが分かるので、電話のような人の声用だと思います。
4,750bps と 12,200bps を聴き比べると、当然、前者の音が悪いのですが、ビットレートの数字のイメージの差は感じません。12,200bps でも高音が割れているように聞こえますが、その程度が少しほどくなる程度です。aac の 12kbps は、実用的でないので、音質の面でも、その変わりになります。
12,200bps なら、1秒で,、1.4KB になります。
4,750bps なら、1秒で,、594バイト になります。これは、30分で、1.069MB になります。
4.映像の目安
再生機器が、複数のコーデックの出力を再生できる場合にはどれを使えば良いか考えます。
4.1.デフォルトの条件で
明瞭な根拠もなく決めたデフォルト値ですが、変換するとどうなるか試してみます。
音声を含んだ、8分13秒のサンプルを変換してみました。
| 映像コーデック |
ファイルの
サイズ(MB) |
備考 |
| h263 |
9.621 |
-qscale 1 の固定品質 |
| mpeg4 |
10.480 |
-qscale 1 の固定品質 |
| libxvid |
24.944 |
-qscale 1 の固定品質 |
| libx264 |
5.952 |
-maxrate 144000 -b 86400 とした、ABR |
libxvid と libx264 は、出来上がったファイルサイズが違いすぎるので、同じ 10MB 近傍になるように、ビットレートを指定したものも作りました。
実は、すべて同じ画質なのです。25MB も 6MB もフレーム画像を拡大してみても、ほとんど差がないのです。
これは、6MBでも、必要なビット数を超えているためだと考えられます。ビットレートを上げれば画質がどこまでも上がるわけではなく、デコーダが用意したフレーム画像以上にはならないと言う限界があるからです。
もっとも高画質と考える MPEG-2 の最高画質と、サイズ、フレームレートが同じにできる個所を選んでファイルサイズを調べた結果から推測すると、ファイルサイズが 3.8MB 以上は画質が変わらなくなります。493秒なので、62kbps になります。
これは、平均のビットレートで、62KBの固定のビットレートと言うことではありません。
多くの容量が必要な画像と、少ない容量で表現できる画像があるので、画質を一定にすることを考えるとビットレートは大きく変動します。
また、libx264のように時間軸方向の圧縮率が高いと、先頭から周期的にビットレートの大きな個所ができることが予測できます。
固定ビットレートで同じ画質にするには、このピークの値を指定することになります。
4.2.ビットレートを下げてみると

左図は、mpeg4 で -qscale 1 として作成した動画の1フレームの一部です。
これを、1ドットを4ドットにして拡大表示してあります。
前述のサンプルとは異なりアニメでないもので音声も除いた、5分のサンプルを用意しました。
mpeg4 コーデックで -qscale 1 とした時の画像です。(平均163kbps)
街角に街灯の柱が立っています。
おなじソースで、64kbps の固定ビットレートで変換してみます。
固定ビットレートなのでファイルサイズはほぼ同じになります。
64 x 5 x 60 / 8 = 2,400KB
ただし、libx264 は、固定ビットレートがなく、平均ビットレート動作の結果として大きなサイズになっているものと思います。
鉄柱の段々(本当は、柱は円柱で段々はなく、すべすべ)、ひさしの丸み、文字などに注目しました。
| コーデック |
h263 |
mpeg4 |
libxvid |
libx264 |
| サイズ |
2,495KB |
2,488KB |
2,374KB |
3,094 KB |
64kbps
|
 |
 |
 |
 |
次に、128kbps を見てみます。
| コーデック |
h263 |
mpeg4 |
libxvid |
libx264 |
| サイズ |
4,811KB |
4,806KB |
4726KB |
5,439KB |
128kbps
|
 |
 |
 |
 |
次に、240kbps を見てみます。
以上のことから次のように考えます。
- 176x144 のサイズの場合、128kbps 程度より高いビットレートを設定しても画質は上がらなくなっていく。
- 64 - 300kbps と言った可変ビットレートが可能なら望ましそうだ。
- コーデックによる差異はあまりない。
- 推奨は、mpeg4 。理由は、ffmpeg の設定が仕様通りで、mpeg2video と同じように考えることができる点。
libx264は、ffmpegからx264へのオプション設定の積み替えに問題がある。まだ、発展途上のよう。
h263は、変換中にワーニングメッセージを書きだす。
libxvidは、入力ファイルのアスペクトレシオが通らない。
4.3.フレームレートの影響
デフォルトでは、11.988fpsになっています。これを映画フィルムの24fpsにして見ます。
最初の、音声を含んだ8分13秒のサンプルでの結果とファイルサイズを比較します。
| |
11.988fps |
24fps |
| h263 |
9.621 MB |
9.363 MB |
| mpeg4 |
10.480 |
16.265 |
| libxvid |
24.944 |
40.874 |
| libx264 |
5.952 |
5.953 |
h263、libx264 は、フレームレートの影響がないことが分かります。
mpeg4、libxvid は、フレームレートの影響を受けることが分かります。フレームレートが2倍になって、6割り増えたと言った感じです。
4.4.容量の目安
176x144 サイズのファイルの容量の目安は以下のように考えられます。ファイルには、ヘッダの類が付加されるので、サンプルでの実測値を30分に換算しています。フレームレートは 11.988fps です。
| 意図 |
|
コーデック |
kbps |
KB/秒 |
再生時間30分の
ファイルサイズ(MB) |
高画質、高音質
|
映像 |
mpeg4(-qscale 1) |
平均 163 |
20.4 |
88
|
| 音声 |
aac(48KHz、ステレオ) |
224 |
28 |
高画質、音を控えめ
|
映像 |
mpeg4(-qscale 1) |
平均 163 |
20.4 |
59
|
| 音声 |
aac(2205Hz、ステレオ) |
96 |
12 |
画質を維持して
(平均ビットレート) |
映像 |
libx264(自動で288kbpsを設定) |
平均 168 |
21 |
42
|
| 音声 |
libopencore_amrnb |
12.2 |
1.525 |
デフォルトで
|
映像 |
h263(-qscale 1) |
平均 147 |
18.4 |
36
|
| 音声 |
libopencore_amrnb |
7.4 |
0.925 |
最小で
|
映像 |
h263 |
64 |
8 |
18
|
| 音声 |
libopencore_amrnb |
4.75 |
0.594 |
|
|