UbuntuでQSVを利用したエンコードでtsをmp4に爆速変換

what-is-quick-sync-video
最近のIntel CPUに付属しているGPUでは、GPGPUを用いたエンコードが利用可能である。
平たく言ってしまえばQSV、Quick Sync Video。Windowsでは専用のソフトが無料で出ていたり、HandBrake等も対応しているのだが、Linuxについては当のIntelもあまり力を入れていない状況にある。
しかし、「VAAPI」を用いることでQSVを利用した爆速エンコードをLiuxでも実現可能。今回はUbuntu 14.04 LTSを用いて、VAAPIを用いたエンコードを行ってみた。


VAAPIとは

VAAPIとは、IntelのGraphics for Linuxというオープンソースなプロジェクトとして進められていて、限定的ながら動画のデコード・エンコードにQSV等のハードウェアアクセラレーションを追加出来る。具体的にサポートされているハードウェアや、ハードウェア別に出来ることは一覧が公開されている。

使用しているマシンスペック

実のところ、Intel Media SDKを用いてコネコネすると、h264_qsvというのが使えるようになる。が、私の環境は古すぎてお話にならないらしい。
参考までに環境を披露。

モノブツ
CPUIntel Core i7 3770K
メモリ8GB
HDDSSD+HDDたくさん

ほんとは6700Kとか、今度出る7700Kな新しい環境欲しいけど、そんなにスペック変わらなそう。

ちなみに、綺麗に残したいモノはこんな設定を使っています。

driver-ffmpeg-teaser
tsをmp4にするのに、昔は莫大なことを行っていたのだが、今は非常にシンプルにしている。といっても、真面目な(つまり綺麗な)エンコードを行おうとすると、やはり20fpsが限界。

おっと、脱線脱線。

VAPPIを用いてUbuntuでQSVエンコードをする

ドライバの用意

必要となるドライバをインストールすることが必要。
これは非常に簡単で、下記のコマンドでインストール出来る。

ドライバがインストールされていることを確認する

下記のコマンドで、正しくインストールされていることを確認しよう。

下記ような感じになる。VAProfile〜〜が表示されたら成功。なお、最初のほうのエラーは気にしないでOK。

 

ffmpegの最新版をインストールする

入っているffmpegは古いので、最新版を落としてくる必要がある。コンパイル地獄。ただし、ffmpegの公式サイトの手順を守っていれば問題なし。なお、当方環境では、

をしないとビルドが出来なかった。

作られたffmpegを適当な場所にコピー

環境変数のパスが通っている場所に、適当にコピー。私の場合以前のものが/usr/local/binに入っていたので、作られた実行ファイル「ffmpeg」をそのまま上書きした。

VAAPIが使用するドライバを特定する

ffmpegがVAAPIを用いるとき、パラメータとしてVAAPIが利用するハードウェアを指定しなくてはならない。
多くのブログで「/dev/dri/renderD128」固定である旨記載がされているが、下記の方法で自分の環境では何になっているか、確認が必要だ。

このドライバの中から、それっぽいものを見つける。下記のffmpegのコマンドに突っ込んでみて、エラーが出たら違うもの。ちなみに、当方の環境では/dev/dri/card0だった。

ffmpeg + VAAPI(QSV)の実力

下記のコマンドで実施してみた。

 

1080iの動画をそのままmp4にすると、だいたい100fpsくらいでエンコードをしてくれる。ちなみに、vappiを使った際のパラメータは非常に少なく、QSVのdeinterlace(あんまり性能よくないけど)等は使用出来ない。

 
その他のパラメータはこちらのサイトをご確認あれ。

肝心のVAAPI画質・容量は?

正直、ffmpegで超凝った設定(これは別途)を行うよりも大きいし重い。動きの多いところではブロックノイズが目立つ。うーむ、やはりWindows環境には及ばないのかなあ。

Pocket
LINEで送る

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です