概要
FFmpegは人気のあるエンコード・デコードのSWです。NVIDIA GPUに入っているードウェアアクセラレータ(NVENC/NVDEC)を用いて、このエンコード/デコード処理を高速化することができます。
NVDEC/NVENCは、通常NVIDIA Video Codec SDKのAPIを通じて使用しますが、それを勉強するのは大変です。
FFmpegであれば、NVIDIAのアクセラレータを使用してENC/DECを高速化する仕組みを既に取り入れているので楽に使用することができます。
環境
- Ubuntu 22.04
- nvidia gpu driver 535.146.02
- NVIDIA RTX 4000 Ada
やること
(GPUドライバはインストール済み)
- CUDA Toolkitのインストール
- FFmpegのインストール
- エンコード・デコードテスト
手順
CUDA Toolkitのインストール
過去記事参考
- nvidia-smiでCUDAの対応Version確認
nvidia-smi
- runファイルを使って今回はv12.2をインストール
wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run
sudo sh cuda_12.2.2_535.104.05_linux.run
既にドライバはインストールしているので、ドライバのチェックボックスを外してインストールした
- パスの設定
echo 'export PATH=/usr/local/cuda-12.2/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64\
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
- 再起動 & パスの確認
nvcc -V
FFmpegのインストール
- ffnvcodecをインストール
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers && sudo make install
- FFmpegのダウンロード
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/
sudo apt-get install build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev
cd ffmpeg
./configure --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --disable-static --enable-shared
自分の環境だと./configureが上手くいかなかったので下記パッケージをインストール
sudo apt-get install pkg-config
- コンパイル & インストール
make -j 8
sudo make install
FFmpegのテスト
Ubuntu 22.04ではMP4の再生が出来なかったので、メディアプレーヤー等足りないソフトウェアをインストール
sudo apt-get update
sudo apt-get install ubuntu-restricted-extras
- トランスコードのテスト
ffmpeg -y -vsync 0 -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -c:a copy -c:v h264_nvenc -b:v 5M output.mp4
最低限の動作確認終わり
エンコードデコードは次回