BableTechも一応Youtubeチャンネルを開設していますが、動画作りで最後に必ず必要になってくるのが「エンコード」です。これは組み立てた動画のパーツを一つの動画として完成させるための手順です。
そんなエンコードには高い処理能力が必要になってきます。そこでCPUだけでなく「GPU」も使ってエンコードするハードウェアエンコードという方法があります。
今回は昔のGPUでも爆速エンコードができるのか検証してみました。
この記事を2文で説明すると
- GPUの方がCPUよりも動画エンコードに向いている
- GPUエンコードの方が2倍以上速いこともある
なぜGPUでエンコード?
早速CPUのみのエンコードと、GPUも利用したときのエンコードを比較していきたいところですが、そもそもなぜGPUを使うのでしょうか?
これには様々な理由があります。
並列処理能力
以前にGPUとは何なのか徹底的に解説する記事を投稿しました。
そしてここで、GPU(グラフィックボードに搭載されている演算装置) の特徴として「並列処理が得意」というものがあると説明しました。
具体的には、一つひとつのコアの処理能力は低いもののコア数が圧倒的に多いので同時に大量の処理を行えるようになっているのです。 動画エンコードにおいては頭の良いコアよりも大量にあるコアの方が活躍します。
そのためとにかく量をこなすことができるGPUの方がエンコードに向いていたりするのです。
実際にNvidiaのGPU等にはエンコードに特化している部分があります。
CPUのリソースを守る
GPUによるエンコードを行ってもCPUはある程度使われますが、CPUだけのエンコードだとCPUをまんべんなく使うため使用率が100%になることも少なくは無いです。 そうなるとエンコード中に他の処理を行うことは厳しくなってきます。
その点、GPUはゲーム等をしない限りあまり使われるものでもないのでリソースが余っているでしょう。このようにしてGPUエンコードはお暇になっているGPUを有効活用することができるのです。
検証環境
そこまで大した検証でもありませんが、一応私の環境としては以下の通りです。
HP Z400 ワークステーション | |
---|---|
CPU | Intel Xeon W3565 (4C8T) |
メインメモリ | DDR3-1333 MHz 8GB |
GPU | Nvidia GeForce GTX 660 OEM (1.5 GB) |
OS | Windows 10 Pro |
中古で購入した10年前くらいのHPのワークステーションにメルカリで購入したOEM版のGTX 660を取り付けたものですね。 今としては決して処理能力は高くない方ですが、実はこのCPUは2012年モデルのMac Proに搭載されてたんだとか。
また、今回エンコードする動画としては以下の通りです。
長さ | 6分36秒 |
---|---|
解像度 | 960 x 544 |
FPS | 30 fps |
オーディオ | 128 kbps 2ch |
拡張子 | .mp4 |
そして今回はこの動画に何も手を加えず、mp4に再エンコードするという処理です。エンコードはx264で、二つのソフトを使って試してみます。
AviUtl
まずは大人気の無料動画編集ソフト「AviUtl」によるエンコードですね。AviUtlは拡張機能は基本プラグインで入れる方式なので、x264エンコーダーも後から追加したものになります。
CPUエンコード
まずはCPUエンコードです。設定としては以下の通りです。

左上に「x264」と書かれていますね。それではこのまま実行してみます。ちなみにエンコード元動画もエンコード後についてもSATA接続のSSDに格納されていますのでストレージがボトルネックになるということはまずないですね。
使用率

使用率を見れば明らかですが、CPUがフルで使われているのに対してGPUは全くと言っていいほど使われていません。
結果
そして結果は以下の通りです。

(クリックして拡大)
2分46秒もかかりましたね。やっぱり昔のCPUではきついようです。
GPUエンコード
続いてはGPUエンコードですが、ここではx265エンコーダーのハードウェアエンコード版のプラグインを使いました。エンコード方式は全く同じなので条件は同じです。

左上に「NVEnc」と表示されています。しっかりとNvidia製GPU専用のエンコード設定になっていますね。
使用率

今度はCPU使用率はそこまでいかず、逆にGPU使用率がとても高くなりました。GPUメモリはあまり使われていない印象ですが、Video Encodeというブロックが多く使われているようです。
結果
そして結果は以下の通りです。

(クリックして拡大)
総エンコード時間は1分16秒となり、驚くことに半分以上時間を減らすことに成功しました。
結果のグラフについては後程まとめて紹介します。
XMedia Recode
続いてはXMedia Recodeという動画変換ソフトです。無料で様々な拡張子をサポートしているので結構昔から愛用しています。
このソフトについても先ほどのAviUtlと全く同じ動画を同じように再エンコードしました。
CPUエンコード
CPUエンコードの設定画面は以下の通りです。

あまりに複雑だったので一部分だけ載せました。 そして早速エンコードしてみました。
使用率

今度は気持ち良いくらいCPUをたくさん使ってくれました。エンコード開始早々CPU使用率は100%に達し、クロック数も上昇しました。
でもGPUは全く使われていません。
結果
そして結果は以下の通りです。

先ほどAviUtlでのエンコードに比べると多少速度が上がっていますね。でもまだCPUしか使われていません。
GPUエンコード
続いてはGPUエンコードです。

しっかりとNvidia NVEncが使われています。こちらもエンコード方式はx264です。
使用率

今度は逆にCPU使用率は20%にまで下がり、GPU使用率が堂々と100%になりました。かなり有効活用できているようですね。
結果
結果は以下の通りです。

これは驚きですね。なんとエンコード時間が29秒まで縮みました。
環境や条件はあまり変わっていないので、これはXMedia Recodeの方がGPUを有効活用できているということでしょう。
結果
結果をまとめてみると以下のようになりました。
[visualizer id=”10795″]
このグラフが短いほど良いわけですが、やはりXMedia Recodeの方が優秀ですね。また、GPUによるエンコードはやはり優秀といったところでしょう。
以上、グラフィックボードでのエンコード検証でした。