Devuanにnvccを導入してNVENCを有効にしてハードウェアエンコードを使えるようにする

こんにちは、無能です。

https://memories.gallery

Nextcloudのアプリである上記を使ったら便利過ぎて、ハードウェアエンコードも有効化できるようなのでこの機会に導入しました。

このサイトを参考に、できる限り最新版を導入します。

必要なパッケージをインストール

sudo apt install autoconf automake bzip2 libbz2-dev cmake libfreetype6-dev gcc g++ git libtool make pkg-config zlib1g-dev nasm

ディレクトリ作成

mkdir bin ffmpeg_build ffmpeg_sources

一応テストとして導入するためにいつでも戻せるように一般ユーザのホームディレクトリに私も入れることにしました。

ディレクトリ移動と、最新版のnv-codec-headersをwgetで保存して展開してビルド。
そしてffmpegのソースコードを保存してくる。

cd ~/ffmpeg_sources/
wget https://github.com/FFmpeg/nv-codec-headers/releases/download/n12.2.72.0/nv-codec-headers-12.2.72.0.tar.gz
ls -la
tar xf nv-codec-headers-12.2.72.0.tar.gz
ls -la
cd nv-codec-headers-12.2.72.0
make PREFIX=$HOME/ffmpeg_build
make install PREFIX=$HOME/ffmpeg_build
cd ..
wget https://ffmpeg.org/releases/ffmpeg-7.0.1.tar.gz
ls -la
tar xf ffmpeg-7.0.1.tar.gz
ls -la

そして、nvidia-cuda-toolkitをインストールします。念の為すでに入っている物を途中で削除している。

wget https://developer.download.nvidia.com/compute/cuda/12.5.0/local_installers/cuda_12.5.0_555.42.02_linux.run
ls -la
sudo apt remove nvidia-cuda-toolkit
ls -la
chmod +x cuda_12.5.0_555.42.02_linux.run
sudo ./cuda_12.5.0_555.42.02_linux.run --silent --override --toolkit --no-opengl-libs
nvcc -V

この時点でパス通っているか確認して、無いので/etc/profileに追記します。

which nvcc
export PATH="/usr/local/cuda/bin:${PATH}"
which nvcc
sudo ldconfig
sudo vim /etc/profile

以下のように追加しました。
画像上だと、最終的な実行ファイルが存在する先もすでに追加してしまっていますが・・・。
なぜ$HOMEで指定していないかというと、全てに適応されるのでrootのときだと/home/root/binを見に行ってしまうので今回の実行ユーザで入れています。

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "$(id -u)" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH
export PATH="/usr/local/cuda/bin:${PATH}"
export PATH="/home/haturatu/bin:${PATH}"
~~~~

その後ビルド作業を行います。
途中でライブラリの中を確認。

cd nv-codec-headers-12.2.72.0
make PREFIX=$HOME/ffmpeg_build
make install PREFIX=$HOME/ffmpeg_build
cd ~/ffmpeg_sources
ls -la
cd ffmpeg-7.0.1
ls -la /usr/local/cuda/include
ls -la /usr/local/cuda/lib64
CFLAGS="-O3 -I/usr/local/cuda/include" LDFLAGS="-L/usr/local/cuda/lib64" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --bindir="$HOME/bin" --enable-nonfree --enable-gpl --enable-cuda-nvcc --enable-libnpp --disable-debug --disable-doc --enable-static
make -j 8
make install

これで出来ましたが、パスがまだ新しい実行ファイル先を見ていません。

ffmpeg
ls ../bin
cd ~
ls bin
./bin/ffmpeg
which ffmpeg
ls bin

パスを指定します。

export PATH="/home/haturatu/bin:${PATH}"
which ffmpeg
sudo vim /etc/profile
#↑ここで前述の部分のPATHを追加した。

コレで終わりです。

無事にffmpegでハードウェアエンコードができるようになったので、Nextcloud側からでも確認しましたが明らかに違いを感じるレベルで快適になった。。。ような。。。!?

せっかくそれぞれの実行ファイルがあるので暇だったらエンコードのベンチ取ってみようと思います。それではまた。

コメントを残す

管理人が承認後コメントが公開されます。
の項目は必須項目となります。