コピペワールド

hirooka.pro

FFmpeg

FFmpeg 4.0 で ffnvcodec を適用していないと NVENC が有効にならなかった件

投稿日:

ソースから FFmpeg をビルドする場合、NVENC でサポートされる GPU とそのドライバをインストールしておけばデフォルトで NVENC、つまり h264_nvenc, hevc_nvenc が有効 (--enable-nvenc) になっていたはずなのですが、FFmpeg インストール後に

ffmpeg -encoders | grep nvenc

を実行しても何も表示されませんでした。

FFmpeg のバージョンは 4.0、OS は Ubuntu 18.04、GPU は GeForce GTX 1050 です。

インストールされている NVIDIA のドライバのバージョンは、nvidia-smi コマンドで確認できます。

$ nvidia-smi
Wed May  2 22:20:12 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.48                 Driver Version: 390.48                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 1050    Off  | 00000000:01:00.0  On |                  N/A |
| 41%   38C    P8    N/A /  75W |    280MiB /  1998MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      7249      G   /usr/lib/xorg/Xorg                            40MiB |
|    0      7291      G   /usr/bin/gnome-shell                          49MiB |
|    0      7471      G   /usr/lib/xorg/Xorg                           127MiB |
|    0      7610      G   /usr/bin/gnome-shell                          59MiB |
+-----------------------------------------------------------------------------+

ドライバのバージョンは 390.48 です。

そこで、FFmpeg をビルドする前に、敢えて configure に --enable-nvenc を付けてみました。すると、

ERROR: nvenc requested, but not all dependencies are satisfied: ffnvcodec

というエラーになってしまいました。

Why? と思って

HWAccelIntro - FFmpeg
https://trac.ffmpeg.org/wiki/HWAccelIntro

をよく見ると、ffnvcodec が必要になったから、とのことです。

下記の情報を参考にしてみました。

ERROR: cuvid requested, but not all dependencies are satisfied: cuda/ffnvcodec
https://superuser.com/questions/1299064/error-cuvid-requested-but-not-all-dependencies-are-satisfied-cuda-ffnvcodec

というわけで、FFmpeg をビルドする手順としては下記の通りにしてみました。

cd ~/tmp && \
    git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers && \
    cd nv-codec-headers && \
    make && \
    sudo make install

cd ~/tmp && \
    wget http://ffmpeg.org/releases/ffmpeg-4.0.tar.bz2 && \
    tar jxvf ffmpeg-4.0.tar.bz2 && \
    cd ffmpeg-4.0 && \
    ./configure --disable-shared --enable-static && \
    make -j$(nproc) && \
    sudo make install

再度、NVENC が有効になっているかを確認してみます。

$ ffmpeg -encoders | grep nvenc
ffmpeg version 4.0 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
  configuration: --disable-shared --enable-static --enable-nvenc
  libavutil      56. 14.100 / 56. 14.100
  libavcodec     58. 18.100 / 58. 18.100
  libavformat    58. 12.100 / 58. 12.100
  libavdevice    58.  3.100 / 58.  3.100
  libavfilter     7. 16.100 /  7. 16.100
  libswscale      5.  1.100 /  5.  1.100
  libswresample   3.  1.100 /  3.  1.100
 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)

-FFmpeg

Copyright© hirooka.pro , 2018 All Rights Reserved.