Kdenliveでハードウェアエンコードを使えるようにする

Kdenliveでハードウェアエンコードを使えるようにする

2021.03.23

Kdenliveはハードウェアアクセラレーションの使い方が非常に上手で長時間動画でもサクサクプレビューできる隠れ神ソフトの一つです!
長時間動画のカット編集に限れば、数多の編集ソフトを抑えて暫定1位の使い心地。

が、基本的にLinuxに向けて作られているためWindowsだと最大限活かせない機能がいくつかあります。

その一つがハードウェアエンコード。GPUを使うことで爆速のエンコードができるのですが、Kdenliveでは安定しないということで使えません。
しかし、せっかくPCにNvidia製グラボを積んでいるのだから使いたい!

というわけで使えるようになる方法、探してきました。

ハードウェアアクセラレーションのチェック

そもそもKdenliveがGPUを認識しているかを確認します。

設定 設定ウィザードの実行Check hardware accelarationをクリック。

ちゃんとGPUを認識している場合はチェックボックスのどちらかにチェックが付きますが、おそらく画像のように「No hardware encoders found」と表示されます。

GPUを認識させる方法とは?

Shotcut & MLT

ここからが本題です。
KdenliveではビデオエディターのエンジンにMLTというものを使っているのですが、同じくMLTを使った動画編集ソフトに「Shotcut」というものがあります。

そしてこのShotcut、Kdenliveでできなかったハードウェアエンコードが使えちゃうんです。というわけで、うまく動いているShotcutのMLTffmpegだけKdenliveに移植しちゃいます!

やり方

Shotcutのインストール

ここからWindows installerをダウンロードします。
インストーラーをダブルクリックして次へ次へと押していくだけでインストールは完了します。簡単ですね。

リンクの書き換え

KdenliveのMLTffmpegのリンク先をshotcutのものに書き換えます。

Kdenliveを開き、設定 Kdenliveを設定 をクリック。
出てきたウィンドウでEnvironment MLT environment と進みます。

ここのMLT profiles folder以外リンクを全てShotcutのものに変更します。
Cドライブにインストールしていればおそらく以下と同じになります。

FFmpegC:/Program Files/Shotcut/ffmpeg.exe
FFplayC:/Program Files/Shotcut/ffplay.exe
FFprobeC:/Program Files/Shotcut/ffprobe.exe
Melt pathC:/Program Files/Shotcut/melt.exe
MLT environment

これでKdenliveがGPUを認識するようになったはずです。

再度ハードウェアアクセラレーションのチェック

最初に行ったように設定 設定ウィザードの実行からGPUが認識しているかをチェックします。

しっかりNvidiaのGPUを認識していますね。

レッツハードウェアエンコード!

準備は整いました!早速ハードウェアエンコードしてみましょう!

レンダリング画面を開く

ツールバーのレンダリング、もしくは上部メニューのProjectからレンダリングをクリックします。

Formatを下にスクロールするとGPU|testingというグループが最初から用意されています。
が、どれもビットレートが高すぎたりCBRだったりとffmpegの設定がイマイチなので新しくプロファイルを作ります。

プロファイルの設定

Formatという文字の右側にあるアイコンをクリックすると、新規プロファイルの設定画面が出てきます。

Profile nameは適当な名前を。
parameterに下のコードをコピペしてください。

f=mp4 vcodec=hevc_nvenc rc=vbr_hq qmin=0 cq=30 acodec=aac ab=128k

nvencを使ってh265でコーデックしています。cqの値を変えると画質のクオリティを変更できます(0~51で指定 値が小さいほど高画質大容量)。

さらに細かく自分好みに設定したいときはこちらに様々なオプションが書かれています。
しかし、正直わかりにくいので本家ffmpegのhevc_nvenc.txtがオススメです。記述の仕方がちょっと違うんですが雰囲気でなんとなく分かると思います(適当)。

OKを押せば準備完了です。

エンコード

Output fileに出力先とファイル名を指定して、Render to Fileをクリックすればエンコードが始まります。

❌アイコンが表示される

Kdenliveを再起動した後などにハードウェア系のプロファイルに❌アイコンがついてRender to Fileボタンが押せなくなっていることがあります。

デフォルトのWin版Kdenliveではハードウェアエンコードを使えなくしているのでこういったことが起きてしまいます。

しかし心配ありません! 先程作ったプロファイルをダブルクルックして開き、そのままOKを押せばまた使えるよになります。

vs CPUエンコード

parameterのhevc_nvenclibx265に変更するとCPUでエンコードするようになります。
この2つの設定でエンコードして時間や画質を比較してみましょう。

【元動画】解像度:FHD fps:24 ビットレート:4013

CPU(libx265)GPU(hevc_nevc)
時間(s)36:153:02
サイズ(MB)474MB686MB
ビットレート(kbps)3186kbps4668kbps
CPU vs GPU
拡大比較

ハードウェアエンコードの処理速度は流石ですね!
h265はh264と比べて圧倒的に処理の負荷が高いため普段使いするにはハードウェアエンコード一択でしょう。

ビットレートが違うため、サイズも拡大画像の比較もあまり意味がありませんがどちらも必要十分に見えます。

違いがでるのは動画で見た時のビットレートの振り分けですね。CPUは流石の安定感で激しい場面から静から場面への切り替えのラグがなくスッと入ってきます。対してGPUはぼやけたシーンが後残りしてしまいますね…

私のグラボはgtx1060(Pascal系)なので使えませんが、20以降のTuring系ならBフレームなるものが使えるようでより高画質なものが期待できます。うぅ…新しいPC組みたい…

まとめ「奥深すぎるエンコード」

本題はKdenliveにハードウェアエンコードを導入することだったんですが、最適なffmpegの設定を調べているうちに沼にハマってしまいました…

画質を取るか、容量を取るか。バランス良くが一番ですが、なにせ相手はただの数字。やじろべえのように簡単には作れません。自分が気に入るものが見つかるまで色々試して見るしか無いですね。

ま、人間関係よりかは簡単ですが(遠い目)