要約
ffmpegでGPUエンコードするにはソースコードから自前でビルドする必要があると思ってたがそんなことはなかったぜ!
手順
環境としてはWin11上のWSL2のUbuntu22.04(-pattern_type globを使いたいがためだけにWSLを持ち出している)
GPUはGeForce RTX4070
シンプルにapt-getして
sudo apt-get install ffmpeg
コーデックの指定はこれ↓(ここで当初libx265_nvencと書いていたせいでエラーが出て,ビルドが必要だと勘違いして右往左往する羽目になった)
-vcodec hevc_nvenc
いざエンコード…爆速!
…
…
…えっこんな簡単でいいの?昔やった時は相当ひーひー言いながらビルドした気がするんだけど…
まさか実はCPUエンコードしてるとか?いやでも爆速だし,タスクマネージャで見る限りGPUはちゃんと回ってるし???
ググってみてもみんなCUDA入れてソースコードとってきてとか書いてあるんだけど…
というか,何ならCUDAもcuDNNも入れてないような気がする.ホストはともかく少なくともWSL内には入れてない.(ホストについてはKerasの環境構築時に四苦八苦してたので結局入れたのか否かの記憶が曖昧.でもnvccコマンドが効かないのでたぶん入ってない.ドライバだけはインストールした気がする)
ちなみにWindows版のバイナリも公式からダウンロードしたそのままでhevc_nvencが使えた.
軽く調べてみるとpytorchはCUDAが同梱されているので個別でCUDAとか入れなくても動く的な情報(これまた初耳なんですけど…)を発見したので,ffmpegも知らない間にそうなってたのかもしれない.知らんけど.
いい時代になったもんだけど,簡単すぎて誰も解説記事を書かないせいで古い情報が目立ち続けるのは良くないですね…