LoginSignup
0
0

More than 1 year has passed since last update.

NVIDIA GPUサーバでハードウェア対応ffmpegを動かす(1)インストール編

Last updated at Posted at 2021-11-24

Ubuntu 18.04のAMDサーバにGPUを積んだのでエンコード環境を整えることにしました。

ffmpeg

サイト「俺の外付けHDD」様に良くまとまっているようです。encdecいろいろ出来るのがffmpegです。
https://nyanshiba.hatenablog.com/entry/2018/02/03/071256

環境の確認

私の環境はUbuntu18.04です。下記サイトを参照して実機のドライババージョンやnvcc環境、GPU使用状況を確認しました。
https://qiita.com/sao_rio/items/4ef5604d685f04669f74

NGCコンテナ

まず、ベースとなるコンテナをNVIDIAのコンテナカタログNGC からダウンロードします。
Pullコマンドをコピペさせるボタンもあり、簡単です。ここではTensorflowをダウンロードします。

docker pull nvcr.io/nvidia/tensorflow:21.11-tf2-py3

つぎに、 docker runコマンドを走らせます。--gpusの後は必ずしもallでなくともいいかもしれません。1-2でも良いかもしれません。

docker run --gpus all --runtime nvidia -it --rm -v local_dir:continer_dir -v /dev/video0:/dev/video0 nvcr.io/nvidia/tensorflow:21.11-tf-py3
  • -itはインタラクティブモード、ターミナルへの入出力あり
  • --rmはコンテナ終了時にコンテナが削除されます
  • -v はマウント元ホストディレクトリ:マウント先ホストディレクトリです。コンテナ終了しても作業結果は残ります。Webカメラを使うなどで/dev/video0もマウントしました

その他run のオプションは --runtime nvidia, --privilegeあたりがあれば大丈夫と思います。詳細は下記にてご確認ください。

https://docs.nvidia.com/deeplearning/frameworks/user-guide/index.html#runcont

NVIDIAハードウェア対応ffmpeg

コンテナを起動したら、NVIDIA公式 ffmpegモジュールの追加を試みます。手順はリンク先の通りですが、 ポイントは下記3つだけとシンプルです。一か所 configure前にcd xxxが抜けているのでそこは適宜移動しましょう。

  • nvcodecヘッダを取ってくる
  • ffmpegをgit cloneする
  • configure & make

nvcodec-headersを取ってきます

git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git

ffnvcodecのインストール

cd nv-codec-headers && sudo make install && cd -

FFmpegを公式リポジトリからクローン

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/

必須パッケージのインストール

apt update -U apt (これをしないとyasmが見つからなかった)
sudo apt-get install build-essential yasm cmake libtool libc6-dev wget unzip libbnuma2 libnuma-dev

Configure, make, install

./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

make -j 8

sudo make install 

共有ライブラリの設定

hoge$ ldd /usr/bin/ffmpeg
 # 必要な共有ライブラリが表示される
hoge$ echo LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib

これで ffmpeg -hwaccell が使えるようになりました。

myoshimi氏 docker_runでビデオエンコード

myoshimiさんもハードウェア対応ffmpegをGitHubに公開されています。

2016年の記事ですが、ソフトウェアコーデックもlibx264, libx265が有効です。ffmpeg-4.1.1 がダウンロードされますが、2021年現在 書き換えにより4.4.1がダウンロード可能です。Dockerfileには nvencの記載のみで、nvdecはありませんでした。書き足したらデコードもできるのでは...?

   --enable-cuda \
    --enable-cuvid \
    --enable-nvenc \
    --enable-libnpp \

buildしてみる

$ docker build -t ffmpeg-nvenc

とすると、 25/33: x264のダウンロード箇所でSSL証明書エラーが出てストップしました。曰く証明書がないため、git cloneが出来ません。

server certificate verification failed. CAfile: /etc/ssl/certs/cacertificates.crt

下記、回避策の1行を、Dockerfileの x264 gitアクセス行直前に追加し、SSLチェックを無効としたところ、イメージが無事に作成されました。

$ git config --global http.sslVerify false

https://qiita.com/TKR/items/5f23fe5a341e228cf9b5 
https://qastack.jp/programming/21181231/server-certificate-verification-failed-cafile-etc-ssl-certs-ca-certificates-c

Step 34/34 : CMD ["--help"]
 ---> Running in 4dbd6489c0d4
Removing intermediate container 4dbd6489c0d4
 ---> d99d5d702eab
Successfully built d99d5d702eab
Successfully tagged ffmpeg-nvenc:latest

$ docker images
ffmpeg-nvenc

終わりに

NVIDIA製GPUのハードウェアを活用する ffmpegの設定方法を2種類ご紹介しました。Happy video encoding life!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0