Devuanにnvccを導入してNVENCを有効にしてハードウェアエンコードを使えるようにする
3 min read
こんにちは、無能です。
Nextcloudのアプリである上記を使ったら便利過ぎて、ハードウェアエンコードも有効化できるようなのでこの機会に導入しました。
https://developers.play.jp/entry/2022/11/18/181357#NVIDIA-%E3%81%AE%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
このサイトを参考に、できる限り最新版を導入します。
必要なパッケージをインストール
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側からでも確認しましたが明らかに違いを感じるレベルで快適になった。。。ような。。。!?
せっかくそれぞれの実行ファイルがあるので暇だったらエンコードのベンチ取ってみようと思います。それではまた。