NVEncで超高速エンコードにFFmpeg, AviUtl, Adobe Media Encoderで挑戦

      2018/04/07

top2

動画を高速に変換しよう!

NVIDIAのGPUを利用したハードウェアエンコード機能「NVEnc」。CUDAによるエンコードの後継となるもので、CPUに負荷をかけることなく高速にエンコードができます。(光の速さは言い過ぎですけどね)

今回はNVEncをテストしてみようとしましたが、まだ対応しているソフトが少なくてなかなか簡単にはいきませんでした。

※追記 再挑戦でうまくいきました↓

NVEncで超高速エンコードにFFmpegで再挑戦!今度はうまくいった!
動画を高速に変換しよう! NVIDIAのGPUを利用したハードウェアエンコード機能「NVEnc」。CUDAによるエンコードの後継となるもので、CPUに負荷をかけること... 続きを読む
SPONSORED LINK

FFmpeg

FFmpegは動画/音声を変換するフリーソフトです。元々はUNIX系OSのものでしたが、Windows向けのビルドもあるので、Windowsでも気軽に利用できます。

ffmpegはすでにNVEncを利用できるようになっているとの情報があったので試してみました。ちょっと前までは公式のビルドに入っていなかったので自前でビルドする必要があったようですが、今は公式で配布されているビルドでも使えるようになっていました。

ffmpeg[N-80335-gcb46b78]でNVEncできるか試してみました。

mtsファイルはエラー

試しに、ソニーのビデオカメラで撮影したMTSファイル(AVCHD形式から取り出した動画ファイル)をmp4(h.264)にエンコードしてみました。

ffmpeg.exe -i test.mts -vcodec nvenc test.mp4

が、残念ながらエラーが出てしまいました。

ffmpeg-error3

次の色の問題もあったので、原因を追究することなく諦めました。

iPhoneのmov動画は色がおかしくなった

次に、iPhoneで撮影したmovファイルを試してみました。

ffmpeg.exe -i test.mov -vcodec nvenc test.mp4

こちらはエラーにはなりませんでした。

例えば、iPhone 6で撮影した2分の動画(1920×1080)を以下の環境で1280×720のh.264に変換してみたところ、わずか15秒で完了しました。同じ動画をx264で変換すると1分10秒かかりました。5倍速ですよ!

CPU Intel Core i5-6600K 4C/4T 3.5-3.9GHz
メモリ DDR4-2133 48GB
グラフィック NVIDIA GTX960 + 2GB (ASUS製グラフィックボード)

問題は完成したファイルの色がおかしいことです。変換前後の動画サムネイルをご覧ください。

test_thumb

変換前

test2_thumb

変換後

これじゃ使い物になりませんね。ひこにゃんも真っ青(いや緑か)です。

どちらの問題もやっかいそうなので、諦めることにしました。コマンドラインが使いやすいのでffmpegを使いたかったんですけどねぇ。

Adobe Media Encoderにプラグイン追加

有志がプラグインを作ってくれているそうです。

https://2e5bdca9e0f522872725008d3981a21c7be35bc5.googledrive.com/host/0B96CRWkNxmWdODdiQ05QS1l0M0U/

最新は1.11のようです。

使い方は以下のサイトに詳しく載っています。

Adobe Premiere Pro CC 2014でNVENC-exportを使ってみました。 - 映像雑記帳(唯我独尊)

ただし、Adobe Media Encoder CC 2015でのプラグイン(nvenc_export.prm)のコピー先は

Program Files\Adobe\Common\Plug-ins.0\MediaCore\

でした。

プラグインが正常に配置されると、Media Encoder上ではインストール操作などは必要なくNVEncが使用できるようになります。

サイズを変えると遅くなる

ハードウェアエンコードに期待するのは何よりまず速さでしょう。このプラグインでは動画のサイズを変更すると途端に遅くなってしまいました。

FFmpegと同じ2分間のmov動画をそのまま(1920×1080のまま)h.264に変換すると、35秒で完了しました。

一方、1280×720にすると、1分25秒かかりました。元々あるH.264のソフトウェアエンコードで1280×720にした場合でも1分30秒で終わるので、ほとんど変わらないということになります。

エンコードではエラー頻発

Media EncoderでNVEncを使用できるようになったものの、少しエンコード設定を変えるだけでエラーがかなり頻発してしまいました。

adobe-error

特にh.265(HEVC)ではデフォルトの設定でもエラーが出てしまいました。

あまりにエラーに遭遇する率が高すぎるので、これでエンコードの速度や品質がどうかを評価するのは難しいと判断しました。まだまだ発展途上なんでしょうかね……。

SPONSORED LINK

AviUtlにプラグイン追加

フリーの映像編集ソフト「AviUtl」に出力プラグインを入れることでNVEncを使った出力ができるようになります。編集せずにエンコード目的に使えばNVEnc対応エンコーダとして使うことができます。

以下のサイトでNVEnc出力のプラグインが配布されています。

NVEncを使ってみた - rigayaの日記兼メモ帳

aviutl

カクカクする

例によって2分のMOVファイルを読み込ませてh.264で出力したところ、約35秒で完了しました。

ですが、再生してみると5 fpsくらいのカクカクした動画になってしまいました。ffprobeでは29.97 fpsになっているので動画ファイルとしてはfpsは正しいようですが、中の絵がちゃんと描かれていないようです。

AVI出力では滑らかに再生されるのでプラグイン(か私の環境との相性)の問題のようです。

設定を詰めれば解決できそうな問題ではありますが、エンコード速度が他の方法ほど速くないのが苦しいところ。

まとめ

NVEncを使うべく、3通り試してみましたがどれも思わしい結果にはなりませんでした。

動画のハードウェアエンコードではファイルサイズに対する品質の低さ(あるいは品質に対するサイズの大きさ)が課題だと言われていますが、今回のテストでは品質以前の問題で挫折することになってしまいました。

ゲームをプレイしながらストリーミング中継するような場面では、高速なハードウェアエンコードが活躍するのでしょうが、単に持っている動画を変換する目的ならおとなしくソフトウェアエンコードの完了を待った方が良さそうです。

ゲームをしないのであまり活かせていないGPUを活用しようと思いましたが、思わしい成果を上げられませんでした。

※追記 再挑戦でうまくいきました↓

NVEncで超高速エンコードにFFmpegで再挑戦!今度はうまくいった!
動画を高速に変換しよう! NVIDIAのGPUを利用したハードウェアエンコード機能「NVEnc」。CUDAによるエンコードの後継となるもので、CPUに負荷をかけること... 続きを読む

itjo レスポンシブ 本文下

 - PC
 - , , , , , ,