はじめに

こんにちは streampack チームのメディです。
https://cloudpack.jp/service/option/streampack.html

Copyrights

Big Buck Bunny
© copyright 2008, Blender Foundation | www.bigbuckbunny.org

Objective ・ 目的

Learning how to compile FFMPEG with nvidia hardware acceleration on an Ubuntu EC2 instance.
Ubuntu EC2インスタンス上でnvidiaハードウェアアクセラレーションを使ってFFMPEGをコンパイルする方法を学ぶ。

We will use a gs3.xlarge Ec2 instance.
gs3.xlarge Ec2インスタンスを使用します。

This kind of EC2 instance is using a nvidia Tesla M60 card. This graphic card has been released in 2015.
This card will increase FFMPEG video encoding speed.

この種のEC2インスタンスは、nvidia Tesla M60カードを使用しています。 このグラフィックカードは2015年に発売されました。
このカードはFFMPEGビデオのエンコード速度を上げます。

Pricing ・ 料金

0.75 USD by hour.
1時間で0.75 USDです。

Check the latest price・最新の価格を確認
https://aws.amazon.com/ec2/pricing/on-demand/

Select the instance type・インスタンスタイプを選択

Machine Linux Image : Ubuntu Server 18.04 LTS
Instance type : g3s.xlarge

Connect to your instance・インスタンスに接続する

ssh -i yourKeyFile.pem ubuntu@YourServerIP

Update the OS ・ OSをアップデートする

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install yasm

Update the sources list ・ ソースリストを更新する

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

List drivers ・ドライバ一覧

sudo apt install ubuntu-drivers-common
ubuntu-drivers devices

Install the nvidia-driver (v 415) for the Tesla M60

sudo ubuntu-drivers autoinstall

Reboot ・ リブート

You need to reboot the Ec2 instance.
Ec2インスタンスを再起動する必要があります。

sudo shutdown -r now

nvidia driver version ・ nvidiaカードとドライバのバージョンを表示

Did you really reboot your instance ?
インスタンスを本当に再起動しましたか?

nvidia-smi

List CUDA paths ・ CUDAパスをリストする

ldconfig -p | grep cuda

nvidia toolkit

sudo apt install nvidia-cuda-toolkit
sudo shutdown -r now

Don’t forget to reboot your instance !
インスタンスを再起動することを忘れないでください。

Checking nvidia toolkit

nvcc -V

NVIDIA CODECS ・ NVIDIAコーデック

Caution・注意

Because the Tesla M60 card is a little bit old, we cannot use the latest version of nvidia codecs.
Tesla M60カードは少し古いため、最新バージョンのnvidiaコーデックを使用することはできません。

For drivers 415.x and older versions
415.xドライバ以前のバージョン用

cd
mkdir nvcodec
cd nvcodec 
git init 
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers/
git checkout n8.2.15.7
make && sudo make install

Caution
Then8.2.15.7 version of the nv codecs works fine with the 415.xx version of the nvidia driver.
If you are using a different version of the driver, please refer to the official nvidia codecs project website.

注意
n 8.2.15.7バージョンのnv codecsは、 415.xxバージョンのnvidiaドライバとうまく動作します。
別のバージョンのドライバを使用している場合は、公式のnvidiaコーデックプロジェクトのWebサイトを参照してください。

I found this solution on GitHub but I cannot retrieve the link, sorry.
GitHubでこの解決策を見つけましたが、申し訳ありませんが、リンクを取得できません。

Compiling FFMPEG with CUDA enabled ・CUDAを有効にしてFFMPEGをコンパイルする

Before compiling ・ コンパイルする前に

sudo apt-get install nasm
sudo apt-get install mingw-w64

Compiling / installing ・ コンパイル / インストール

cd 
mkdir ffmpeg 
cd ffmpeg 
git init 
git clone https://github.com/FFmpeg/FFmpeg.git 
cd FFmpeg
./configure --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
make -j10
sudo make install

List the encoders ・ エンコーダを一覧表示する

All encoders・全エンコーダ

ffmpeg -encoders

nvidia encoders・nvidia エンコーダ

ffmpeg -encoders | grep nv

Testing ・テスト

Big Buck Bunny : 4k 2160p 30fps

cd
mkdir videos
cd videos
wget http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_2160p_30fps_normal.mp4

Hardware accelerated encoding with nvenc_h264 ・ nvenc_h264によるハードウェアアクセラレーションエンコーディング

4K –> 2K

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i ~/videos/bbb_sunflower_2160p_30fps_normal.mp4 -vf scale_npp=1920:1280 -c:v h264_nvenc ~/videos/out_nvenc.mp4

Encoding speed is around 3.8

Download the transcoded file ・ トランスコードファイルをダウンロードする
Open a new terminal window:
新しいターミナルウィンドウを開いてください。

scp -i yourKey.pem ubuntu@yourServerIp:/home/ubuntu/videos/out_nvenc.mp4 .

Software encoding with libx264 ・ libx264によるソフトウェアのエンコーディング

We will use a static build of FFMPEG.
FFMPEGの静的ビルドを使用しています。
4K –> 2K

cd
mkdir static_ffmpeg
cd static_ffmpeg
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar xf ffmpeg-release-amd64-static.tar.xz
cd ffmpeg-4.1.1-amd64-static 
./ffmpeg -i ~/videos/bbb_sunflower_2160p_30fps_normal.mp4 -vf scale=1920:1280 -c:v libx264 ~/videos/out_soft.mp4

Encoding speed is around 0.5x

Download the transcoded file ・ トランスコードファイルをダウンロードする
Open a new terminal window :
新しいターミナルウィンドウを開いてください。

scp -i yourKey.pem ubuntu@yourServerIp:/home/ubuntu/videos/out_soft.mp4 .

Results ・ 結果

To convert a video from 4k to 2k, hardware accelerated encoding is in average 7 times faster than software encoding.
ビデオを4kから2kに変換するために、ハードウェアアクセラレーションエンコーディングはソフトウェアエンコーディングよりも平均7倍高速です。

Information sources ・ 情報源

https://images.nvidia.com/content/tesla/pdf/188417-Tesla-M60-DS-A4-fnl-Web.pdf
https://www.nvidia.com/object/tesla-m60.html
https://developer.nvidia.com/ffmpeg
https://en.wikipedia.org/wiki/Nvidia_Tesla
http://bbb3d.renderfarming.net/download.html
https://qiita.com/clerk67/items/d8897b97b5cd93b2d752
https://powersj.github.io/post/ubuntu-server-nvidia-cuda/
https://gist.github.com/Brainiarc7/4b49f463a08377530df6cecb8171306a
https://linuxconfig.org/how-to-install-the-nvidia-drivers-on-ubuntu-18-04-bionic-beaver-linux

元記事はこちら

EC2 + Ubuntu + nvidia CUDA + hardware accelerated FFMPEGのインストール方法