ffmpeg でビデオカードを使ったアクセラレーションを利用したいと思います。ビデオカードは GeForce GTX 1050 で、OS は Ubuntu 20.04.3 LTS、CPUは Core i5-3570 で結構古い。最初に見たサイトは nvidia のサイト(ここ)です。コンパイルをするつもりだったのですが、そこにはコンパイルするには CUDA toolkit が必要とあります。toolkit のインストールは このサイトに従います。後は先のサイトに従ってコンパイルします。 nvcc が見つからないというエラーがあったのですが、これはパスが通ってなかったようです。このサイトにあるようにパスを通しました。下記を .bashrc に書き込みます。
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
この後、コンパイルは以外にスムーズに終了しました。
ffmpeg を起動しようとすると libavdevice.so.59 が見つからないとエラーが出ました。これを探したら、すでにローカルにあったのですが ffmpeg から見つからないみたいでした。このサイトを参考にして、libavdevice.so.59 を /etc/ld.so.conf.d/ にコピーします。sudo ldconfig も実行する必要あり。何かの再読み込みか?
変換のスピードはかなり速くなりました。x12 ぐらいで変換します。オプションなどはこのサイトなどを参考にしました。変換コマンドは下記のようなものです。
ffmpeg -i input.mov -c:v h264_nvenc output.mp4
ファイルサイズはソフトウェアエンコードよりも大きくなります。試したものでは3割増しぐらいでした。この場合(3割増しの場合ですが)画質の差はそれほどありませんでした。