俺#

新潟市でIT業を営むおっさんのブログ。

#CentOS 8 に #ffmepg と #cuda を入れて #nvenc (ハードウェアエンコード)を試す

Geforce GTX 1050 Tiを差した物理マシンを組み立てたのでffmpegでハードウェアエンコードを試してみるテスト。

1)NVIDIAのドライバを入れる

NVIDIA DRIVERS Linux x64 (AMD64/EM64T) Display Driver

ダウンロードして実行するだけなのだが「nouveau」というカーネルモジュール(OSSなディスプレイドライバ)が動いていると入らない。Xを入れると普通に動いているのではないかと。

Nouveau kernel driver

停止するためにはrunlevelを3にしてnouveauをブラックリストに載せてDracutして再起動するという手間がかかる。なおインストール時にkernel moduleがmakeされるのでgccはもちろんkernel-devel kernel-headers辺りも必要になる。

2)CUDAを入れる

CUDA Toolkit 10.1 Update 2 Download | NVIDIA Developer

ドライバが入る条件が整っている or 既にドライバが入っていればすんなりいく。runfile(local)は最初にドライバも入れてくれる感じ。rpm(local)はドライバは入れてくれない感じ。

3)ffmpegをパッケージで入れる

How To Install FFmpeg on CentOS 8 - idroot

EPELのパッケージで「hevc_nvenc」にも「h264_nvenc」にも対応してるffmpegが入る。makeしなくて済むの有難い。

おまけ)ffmpegをパイプでつなげると面白い

sshとパイプを使ってWindowsからLinuxのエンコーダを活用する、、などという事もできる。

ffmpeg.exe -i src.mp4 -c:v copy -c:a copy -f mpegts pipe:1 | ssh.exe /usr/bin/ffmpeg -i pipe:0 -c:v hevc_nvenc -c:a copy -f mpegts pipe:1 | ffmpeg.exe -i pipe:0 -c:v copy -c:a copy -f mp4 dst.mp4

この方法だとファイルコピーだのディスクのマウントだのをしなくても良いので意外と重宝するのである。