LinuxでQSVとH.264のエンコード対決

linux ffmpeg , qsv , x264 Comments

先日の記事、でLinuxでH.264の動画をエンコードできることを紹介しました。 そのベンチマークをとってみました。QSVでのエンコードとlibx264を用いたエンコードの比較となります。

今回エンコード時間の比較に用いた動画は以下のものを利用しました。

Big Buck Bunny

Big Buck Bunny

ここの、big_buck_bunny_1080p_surround.aviを以下の表のオプションでLibx264とQSVでのエンコードで変換し、比較をしてみました。

項目
音声コーデック コピー
ビットレート 2000kbps
サイズ 1280x720
フレームレート 29.97

このオプションで起動すると、ffmpeg -i big_buck_bunny_1080p_surround.avi -acodec copy -vcodec コーデック -b:v 2000k -s 1280x720 -r 30000/1001 -y 出力ファイルという起動オプションになります。

仮想8コアでx264エンコード

Xeon搭載マシンで動かしているKVMに仮想8コアを割り当てた環境でエンコードしてみました。 FFmpegの粋な計らいによって、エンコード中は以下のようにたくさんのスレッドが立ちがあり、マシンはエンコードに専念していました。

x264 8core encode

CPUはエンコード中、全コア90%前後の使用率を維持していました。そんなエンコードにかかった時間は以下の通りでした。

1
2
3
real    2m50.118s
user    20m15.617s
sys     0m7.375s

10分の動画を3分足らずでエンコードしてしまいました。恐るべきコア数の暴力。

仮想8コアでQSVエンコード

先ほどと同じ環境でQSVを用いたエンコードをしてみました。 こちらもFFmpegによって複数のスレッドによる処理がされるのですが、CPUの負荷は多くて各コア10%程度となる非常に省エネなエンコードとなっていました。

QSV 8core encode

こんな省エネでもエンコードに要する時間はそれほどかかりませんでした。

1
2
3
real    3m6.697s
user    2m56.301s
sys     0m4.871s

3分とちょっとでエンコードが完了しています。さすがにXeon 8コアにはかなわないようです。

仮想1コアでx264エンコード

KVMで割り当てコア数を1コアに設定し、x264を用いたエンコードをしてみました。 負荷はほぼ100%、まれに90%前後になる程度でした。

x264 1core encode

じっくりエンコードしてかかった時間は以下のとおりです。

1
2
3
real    10m56.739s
user    10m54.374s
sys     0m1.070s

動画再生時間+10%程度の時間がかかっていました。

仮想1コアでQSVエンコード

QSVとコア数の関係性は不明ながら、比較のために同じ環境でQSVでもエンコードしてみました。 負荷はほとんどないかと思ってたのですが、エンコーダに渡す前処理などで少々CPUを使うようで、90%前後まで達したり0%付近をうろうろしたりと、不安定な負荷がかかっていました。また、なぜか2スレッドで処理していました。

qsv 1core encode

要した時間は以下のとおりです。

1
2
3
real    3m0.692s
user    2m35.944s
sys     0m0.972s

予想はついていましたが、QSVでは8コアでも1コアでもほとんど時間は変わらないようです。

仮想1コアで複数のQSVエンコード…?

記事公開直後にこのような気になる意見をいただきました。

早速、QSVでの同時エンコードを試してみました。 tmuxで分割し、上下のコンソールで同時にエンコードを開始してみた結果が以下の画像のとおりになります。

qsv 1core multi encode

ライブラリがIGPへアクセスできないようでアクセス違反起こして終了してしまうため、QSVでの同時エンコードはダメでした。

ファイルサイズ比較

ビットレート固定なのでそれほど違いはありませんが、ファイルサイズは以下のようになっています。

1
2
3
4
5
$ ls -l
total 1261812
-rw-rw-r--. 1 ninniku ninniku 928670754 May  6  2008 big_buck_bunny_1080p_surround.avi
-rw-rw-r--. 1 ninniku ninniku 179373021 Jan 31 02:27 big_buck_bunny_qsv.mp4
-rw-rw-r--. 1 ninniku ninniku 184045287 Jan 31 02:23 big_buck_bunny_x264.mp4

QSVでエンコードしたほうが4MBほどファイルサイズが小さくなっていました。

品質について

x264とQSVの比較では目立った差異は見受けられなかったです。視力の問題かもしれませんが。

まとめ

動画再生時間の3分の1程度でエンコードができるQSVはLinuxでもすごい。

Comments