動画のエンコードに時間がかかる3つの理由

  • CPUのコア数
  • メモリのクロック速度
  • ソフトウェアのパラメーターに問題がある

大きな要因としてはここら辺だと思います。特にAMDアーキテクチャはメモリのスペックが及ぼす影響は大きいです。

時間がかかる理由については経験則的にある程度は分かっているつもりですが
備忘録としてグラフを見ながら整理していきます。

ちなみに私はx265に関する知識はエアプなので参考にしない方がいいと思います!

実験環境

ハード

Core i5 6500 3.3GHz
環境はクリーンではありません。時々バックグラウンドで録画ソフトが走っていますがリソースはあまり喰わないので無視出来る範囲のはず。

ソフト

HandBrake 1.0.7(x265)

実験ファイル

  1. 普通のアニメ(24fps)
  2. インターレース処理済みのやたらビットレート(サイズ)が高いアニメ(24fps)
  3. バラエティ(60fps)

それぞれをH.265(HEVC)にエンコードした時のサイズと時間を抽出しました。動画の時間は12分です。

尚、グラフのスケールはどれもバラバラなので読むときには気をつけてください。

インターレース処理の時間

インターレースを保持している動画をインターレース処理します。

アニメのインターレース処理について


24fpsと可変fpsはどちらの方が処理に時間がかかるかという実験です。

あれれぇ〜
思ってた結果と真逆だ。後者の方がスタイリッシュで手短に終わっていますね。

フレーム数はMPC-HCを使って確認しました。というかそれ以外の動画再生ソフトで可変フレームレートをキャッチしてくれるソフトあるんですかね…。

バラエティのインターレース処理について


バラエティ番組・ドラマは基本的に60fpsの映像なので破棄するor二重化するのがセオリーです。
予想通り二重化の方が時間かかっていますね。

GPUエンコード

一応GPUエンコードのデータも併記しています。
インターレース処理なしだと再生時間の1/3とかの時間で終わるんですけどやっぱりインターレース関係の演算はCPUでやっているのか少し時間がかかっています。

8コアのCPUだとx264で処理した方がいいかもしれません。

解像度


1920だとそれなりに時間がかかります。

エンコードの時間を減らしたいときは1280×720にするといいですよ。サイズも減りますし。
後になって気づいたんですけど1280も1440も情報量としてはあまり変わらないですね^^;

画質

ここから先はインターレース処理済みのやたらビットレート(サイズ)が高いアニメ(24fps)をソースに使います。
パラメーターの数値が下がれば下がるほど画質が上がります。確かアルゴリズムは可変ビットレートだったはず…。

CPU


これは意外でした。処理時間自体大して変わらないだろうと思っていましたが結構な差がありますね。

私は普段22くらいに設定しています。

ちなみに30の時の画質を一応チェックしたんですけど普通に高画質でした。
多分大きなサイズの液晶テレビで視聴したら画質の劣化に気づく人少ないのではと思えるくらいのレベルでした。

んで、どこが劣化しているのかというとノイズですね。輪郭周りにノイズが結構乗っていました。ソースが良かったのかx265が進化した結果なのか背景の劣化は無かったです。

GPU


あっという間に終わりますね^^;

その分サイズの増大や画質の劣化とトレードオフなんですけどH.265なだけあってサイズも画質も大丈夫でした。

許容範囲とは言ってない

そもそも画質を維持したままサイズを落とすのがエンコードの主な目的です。

エンコーダープリセット

ここが本命です。

ultrafast ^^; 一番時間がかからない
superfast ^^;
veryfast ^^;
faster ^^;
fast ^^;
medium 選ぶなら最低限のラインはここ デフォルト
slow
slower
veryslow
placebo その名の通りプラシーボ 一番時間がかかる

プリセットによって圧縮する時のパラメーターが変わってきます。
ノイズが多いなと思ったらここを上げて下さい。
再生するときのCPU負荷が高い場合はここを下げるといいかもしれません。

動きが激しい動画だとveryslowにしても思ったほどの効果は得られないはずです。

CPU


placeboヤベェえええええええええ

やたら時間かかると思ったらこいつが原因でした^^;
これも意外な結果でした。
プリセットが上がるほどサイズが縮むものかと思っていたので…。

もちろん画質チェックも行いました。
私はいつもveryslowにしているのですがこの分だとslowにしても問題なさそうです。
ただ、x265はまだまだ進化の余地があるプログラムなので画質のレートやプリセットは出来るだけ落とさない方がいいと思います。

GPU


こっちもこっちで結果に凄い差が出ています。
グラフだとサイズも大きな差が出ているように思えますがスケールや最小値のせいでそう見えてしまうだけです。

結果

思いのほかファイルサイズや処理時間に差がありました。

処理時間とファイルサイズは反比例するものかと勘違いしていたことを知れたのも良かったです。

まあクリーンな環境ではないですし実験の設定自体間違えていたのかもしれませんが
少なくとも画質はx265のverが上がると共に飛躍的に向上しているのかなと気づけました。
(以前のx265はビットレートを落とすと画質の劣化が激しかった)