(20211203 作業メモ) ffmpeg ハードウェアエンコード

3 12月

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割増しの場合ですが)画質の差はそれほどありませんでした。