Edited at

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


はじめに

こんにちは 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

The n8.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