NVENCをWSLのubuntuから使う

念願の Geforce がやってきたので、GPU 使って高速にエンコできる。
いつもの ffmpeg もとても高速になるだろう。やったー。

でも WSL の ubuntu では GPU に対応していない。
なので、GPUをブン回すには Windowsバイナリを準備するしかない。
NVENC は Nvidia の拡張なので、それを組み込んだ ffmpeg を自前でビルドするのが基本。
WSL の ubuntu に Windows のビルド環境を作ってビルドする。(このあたりいよいよややこしい)
それが正道なのかもしれないが、バイナリ配ってくれている人いた。ありがてえありがてえ。
https://ffmpeg.zeranoe.com/builds/
「Windows-64bit」の「Static」のままでよいのでダウンロード。
解凍すると中にいくつかのフォルダがあるが、とりあえず用があるのは「/bin/ffmpeg.exe」だ。
これを実行しやすいところに配置する。
あとは Powershell から「-vcodec h264_nvenc」とか「-vcodec hevc_nvenc」とかオプションを使うと使える。

でも Powershell 特有の細かい方言が気になる。使い分けるのめんどくさい。
そんなあなたに朗報。
なんと実は WSL の ubuntu から exe ファイルが実行できる。
「なにをイマサラ」と言われる向きもあるかと思うが、Linux を長年使ってきてるとそうした変化も知り得ない。
これがあったので、Windows に帰るかって気にもなったのだけど。
Windows バイナリを動かす場合は当たり前だが、ちゃんと「.exe」まで記述する。
いっそ alias で割り当てちゃってもいいと思う。
前にも書いたが「/mnt/c/」で「c:\」につながる。
もちろんコレに限らず python とか、GPU連携するヤツも使うことができる。

ということで、エンコ速度が感覚的に5倍ぐらいアップした。
CPU のリソースが上限張り付きにならなくなるので、他の作業も並行して進めやすくなった。

今回のゲーミング買うまでは Jetson nano に nvmpi 組んだ ffmpeg とかと組み合わせながら、なんとかしのいでいた。
Jetson nano も侮れない使えるレベルで、とりあえず安価に底上げするならコレもありかもしれない。
やり方はココ。こっちは素直にビルドしかない。
https://github.com/jocover/jetson-ffmpeg
でも1台でチャッチャとできるのは全然ラク。