YANO's digital garage

Copyright ©YANO All rights reserved. https://www.bravotouring.com/~yano/

Last-modified: 2021-06-09 (水)


[一語一絵/IT系]

UbuntuとNVENC / 2017-02-03 (金)

Ubuntuでのハードウェアエンコード環境構築作業は先月18日24日とGStreamer+VAAPIにトライしたもののまだ先が長そうだ。

とはいえGT110bにもひと月分の録画済みファイルが溜まってしまったので、気分転換も兼ねてCUDA改めNVENCを試してみることに。

まずはGT710なMSI GT710 1GD3H LPを突っ込んで、libcudaとnvidiaドライバをインストール。

yano@haswell:~$ sudo apt-get install libcuda1-367 nvidia-367 nvidia-367-dev
nvidiaドライバと喧嘩するらしい[External]nouveauをblacklistに登録して再起動。 続いて[External]CompilationGuide/Ubuntuを読みながら、ffmpegのインストール。と思ったが、気まぐれに"ffmpeg -encoders"を見たところ、"NVIDIA NVENC H.264 encoder"が有効になっている事に気付いた。
yano@haswell:~$ ~/bin/ffmpeg -encoders 2>&1 | grep NVIDIA
V..... h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc                NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_h264           NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_hevc           NVIDIA NVENC hevc encoder (codec hevc)
V..... hevc_nvenc           NVIDIA NVENC hevc encoder (codec hevc)
yano@haswell:~$
ダメ元で
yano@haswell:~$ ~/bin/ffmpeg -i input.ts -vcodec h264_nvenc ouput.mkv
yano@haswell:~$
てな感じで動かしたところ、あっさりエンコードできたっぽい。まだチューニングの余地はあるものの
yano@haswell:~/cuda$ ~/bin/ffmpeg -y -i ./20161215_0012_28_GRhd.ts \
    -threads 2 -vcodec h264_nvenc -deinterlace -preset medium \
    -profile:v high -cq 26 -b:v 2.5M -filter:v yadif -s hd720 \
    -acodec aac -ac 2 -ar 48000 -ab 128k -map 0:0 -map 0:1 \
    -f mp4 ./20161215_0012_28_GRhd.mp4
yano@haswell:~/cuda$
というところでスピードと画質はQSV(VAAPI)と遜色なく、エクスプローラーでの詳細情報で時間などが表示されない問題も無い事から、早速GT110bへの展開を決定。

GT710なMSI N730K-1GD5LP/OCV1GT110bに突っ込んで、libcudaとnvidiaドライバをインストール。

yano@GT110b:~$ sudo apt-get install yasm libx264-dev libfdk-aac-dev libmp3lame-dev
yano@GT110b:~$ sudo apt-get install libcuda1-367 nvidia-367 nvidia-367-dev
で、ffmpegのbuild。
yano@GT110b:~$ tar xvf ffmpeg-3.2.2.tar.bz2
yano@GT110b:~$ cd ~/ffmpeg-3.2.2/
yano@GT110b:~/ffmpeg-3.2.2$ PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" \
   ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static"
     --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
     --bindir="$HOME/bin" --enable-gpl --enable-libass --enable-libfdk-aac \
     --enable-libfreetype --enable-libmp3lame --enable-libtheora --enable-libvorbis \
     --enable-libx264 --enable-nonfree
yano@GT110b:~/ffmpeg-3.2.2$ PATH="$HOME/bin:$PATH" make
yano@GT110b:~/ffmpeg-3.2.2$ make install
yano@GT110b:~/ffmpeg-3.2.2$ make distclean
yano@GT110b:~/ffmpeg-3.2.2$ hash -r
↓でエンコーダオプションが確認できれば(恐らく)OK。
yano@GT110b:~$ ~/bin/ffmpeg -encoders 2>&1 | grep NVIDIA
V..... h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc                NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_h264           NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_hevc           NVIDIA NVENC hevc encoder (codec hevc)
V..... hevc_nvenc           NVIDIA NVENC hevc encoder (codec hevc)
yano@GT110b:~$
yano@GT110b:~$ dpkg -l | grep "^ii" | grep -e "nvidia" -e "cuda"
ii  cuda-command-line-tools-6-5   6.5-19                      amd64     CUDA command-line tools
ii  cuda-core-6-5                 6.5-19                      amd64     CUDA core tools
ii  cuda-cublas-6-5               6.5-19                      amd64     CUBLAS native runtime libraries
ii  cuda-cublas-dev-6-5           6.5-19                      amd64     CUBLAS native dev links, headers
ii  cuda-cudart-6-5               6.5-19                      amd64     CUDA Runtime native Libraries
ii  cuda-cudart-dev-6-5           6.5-19                      amd64     CUDA Runtime native dev links, headers
ii  cuda-cufft-6-5                6.5-19                      amd64     CUFFT native runtime libraries
ii  cuda-cufft-dev-6-5            6.5-19                      amd64     CUFFT native dev links, headers
ii  cuda-curand-6-5               6.5-19                      amd64     CURAND native runtime libraries
ii  cuda-curand-dev-6-5           6.5-19                      amd64     CURAND native dev links, headers
ii  cuda-cusparse-6-5             6.5-19                      amd64     CUSPARSE native runtime libraries
ii  cuda-cusparse-dev-6-5         6.5-19                      amd64     CUSPARSE native dev links, headers
ii  cuda-documentation-6-5        6.5-19                      amd64     CUDA documentation
ii  cuda-driver-dev-6-5           6.5-19                      amd64     CUDA Driver native dev stub library
ii  cuda-license-6-5              6.5-19                      amd64     CUDA licenses
ii  cuda-misc-headers-6-5         6.5-19                      amd64     CUDA misc headers
ii  cuda-npp-6-5                  6.5-19                      amd64     NPP native runtime libraries
ii  cuda-npp-dev-6-5              6.5-19                      amd64     NPP native dev links, headers
ii  cuda-repo-ubuntu1404          6.5-14                      amd64     cuda repository configuration files
ii  cuda-samples-6-5              6.5-19                      amd64     CUDA example applications
ii  cuda-toolkit-6-5              6.5-19                      amd64     CUDA Toolkit 6.5 meta-package
ii  cuda-visual-tools-6-5         6.5-19                      amd64     CUDA visual tools
ii  libcuda1-367                  367.57-0ubuntu0.14.04.1     amd64     NVIDIA CUDA runtime library
ii  nvidia-367                    367.57-0ubuntu0.14.04.1     amd64     NVIDIA binary driver - version 367.57
ii  nvidia-367-dev                367.57-0ubuntu0.14.04.1     amd64     NVIDIA binary Xorg driver development files
ii  nvidia-modprobe               361.93.02-0ubuntu1          amd64     Load the NVIDIA kernel driver and create device files
ii  nvidia-opencl-icd-367         367.57-0ubuntu0.14.04.1     amd64     NVIDIA OpenCL ICD
ii  nvidia-prime                  0.6.2.1                     amd64     Tools to enable NVIDIA's Prime
ii  nvidia-settings               361.93.02-0ubuntu1          amd64     Tool for configuring the NVIDIA graphics driver
yano@GT110b:~$
CUDA 6.5をごにょごにょしてたらgnome-desktop環境まで入れられてしまったので、消しておく。
yano@GT110b:~$ sudo apt-get remove gnome-desktop3-data

ちなみにHaswellだと、こう。

yano@haswell:~$ sudo apt-get install libxmu-dev freeglut3-dev
yano@haswell:~$ sudo apt-get install libcuda1-367 nvidia-367-dev
yano@haswell:~$ dpkg -l | grep "^ii" | grep -e "nvidia" -e "cuda"
ii  libcuda1-367           367.57-0ubuntu0.14.04.1  amd64  NVIDIA CUDA runtime library
ii  nvidia-367             367.57-0ubuntu0.14.04.1  amd64  NVIDIA binary driver - version 367.57
ii  nvidia-367-dev         367.57-0ubuntu0.14.04.1  amd64  NVIDIA binary Xorg driver development files
ii  nvidia-opencl-icd-367  367.57-0ubuntu0.14.04.1  amd64  NVIDIA OpenCL ICD
ii  nvidia-prime           0.6.2.1                  amd64  Tools to enable NVIDIA's Prime
ii  nvidia-settings        331.20-0ubuntu8          amd64  Tool for configuring the NVIDIA graphics driver
yano@haswell:~$
GT110bに入れちゃったCUDA 6.5は不要だったかも!?

【参照】
●www.nodoka.org http://www.nodoka.org/
録画サーバ構築 QSVエンコード Linux編 2016/05/27
録画サーバ構築 NVENCエンコード Linux編 2016/06/15
●FFmpeg https://ffmpeg.org/
CompilationGuide/Ubuntu
●Wikipedia http://ja.wikipedia.org/wiki/
nouveau
LGA1150
Haswellマイクロアーキテクチャ
Broadwellマイクロアーキテクチャ
LGA1151
Skylakeマイクロアーキテクチャ