◎メインサイトとブログとSNS
VSRX-2020 - オリジナルOSやライブラリ、アプリケーションのリファレンスとプログラミングなどの各種テクニックを公開しているメインサイト
RED - 音楽・ドラマ・アイドル・ゆるキャラ・食べ物などの話題を取り上げるブログ
White Fox - ドラマ・副業・公営ギャンブルに関する情報を提供するブログ
Instagram / Youtube
最近の記事

2020年05月28日

【Linux+PRIME+VA-API】Intelの内蔵GPUと外部GPUの使い分けで省電力化、QSVによるハードウェアエンコード

2019年7月20日に書いた記事に追記しました。
◎VA-APIを使えるようにする

$ sudo apt install i965-va-driver mesa-va-drivers gstreamer1.0-vaapi


◎VA-APIが使えるかどうかを調べる

$ sudo apt install vainfo
$ vainfo


◎Intel内蔵GPUと外部GPUを切り替える
Linuxでは、内蔵GPUと外部GPUを使い分ける事が可能な「PRIME」という仕組みが使えます。NVIDIAのOptimusやRadeonのAMD Dynamic Switchable Graphicsを管理する事が出来ます。普段は、Intelの省電力な内蔵GPUを使い、ゲームなどの3Dグラフィックを多用した、グラフィックチップの性能が求められるアプリケーションでは、外部GPUを使う事で、平均的な消費電力を下げる事が出来ます。動画視聴やオンラインサービスの利用では、Intelの内蔵GPUを使い、ゲームなどをする時に外部GPUを使うようにすれば、電気代が気になる人には理想的な環境を作る事が出来ます。

◇PRIME
https://wiki.archlinux.jp/index.php/PRIME

外部GPUを使う時には、アプリケーションのコマンドの前に「DRI_PRIME=1」を付ければ、外部GPUを使ってアプリケーションを動作させられます。

PRIMEを使った外部GPUへの切り替え例
$ DRI_PRIME=1 gimp

PlayOnLinuxを「DRI_PRIME=1」付きで起動させると、作成した仮想ドライブ全てが外部GPUを使えるようになりますので、システム側でWineを使うよりも、仮想ドライブを管理出来るPlayOnLinuxやLutrisの使用をオススメします。

◎VA-APIを通してハードウェアエンコードを行う
Windowsでは当たり前の機能となっているQSVですが、Linux環境でもVAAPIを使ってQSVによるハードウェア動画エンコードを行う事が可能です。また、AMDのRadeon RXシリーズでもQSVほど高速ではありませんが、ハードウェアエンコードが可能です。
Linuxでハードウェアエンコードを行うには、VAAPI対応のグラフィックスドライバーとVAAPI対応のffmpegが必要です。比較的新しいバージョンのffmpegはハードウェアエンコードに対応していますので、ソースコードからビルドしても良いですし、PPAでバイナリをインストールしても構いません。

プライマリGPUにIntel系のプロセッサ内蔵GPUが設定されている場合は、ffmpegを経由して動画エンコードを行う事が出来ます。エンコード例は以下のような感じになっています。

$ ffmpeg -vaapi_device /dev/dri/card0 \
-hwaccel vaapi -hwaccel_output_format vaapi \
-i a.mp4 \
-vf 'format=nv12|vaapi,hwupload,scale_vaapi=w=1280:h=720' \
-c:v h264_vaapi -profile 100 -level 40 -qp 21 -aspect 16:9 \
-c:a copy \
test.mp4

https://webnetforce.net/ubuntu-qsv-encode/
https://qiita.com/tappie/items/6ca070f4e9d461961eda

◯動画編集ソフト「Shotcut」を使う
動画編集ソフト「Shotcut」でもVA-APIエンコードを使う事が可能です。書き出しの時に「ハードウェアエンコーダーを使う」にチェックを入れ、使いたいコーデックを選択するだけです。

◇Shotcut公式サイト
https://shotcut.org/download/

◯Intel Media Draiverに変更する
◇PPAを使う
Ubuntu 19.04以降用
https://launchpad.net/ubuntu/+source/intel-media-driver
Ubuntu 18.04用
https://launchpad.net/~morphis/+archive/ubuntu/intel-media

◇ソースコードからビルドしてVAAPI対応のmedia driverをインストール
http://nodoka.org/ubuntu-18-04-media-driver-ffmpeg4-qsv%e3%82%a8%e3%83%b3%e3%82%b3%e3%83%bc%e3%83%89/

#!/bin/sh

sudo apt update
sudo apt install -y autoconf automake cmake g++ libtool pkg-config libva-dev libdrm-dev libpciaccess-dev libx11-dev vainfo

mkdir -p ~/vaapi
cd ~/vaapi
git clone https://github.com/01org/libva
cd libva
sudo ./autogen.sh --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu
sudo make clean
sudo make
sudo make uninstall
sudo make install
sudo ldconfig

mkdir -p ~/vaapi/workspace
cd ~/vaapi/workspace
git clone https://github.com/intel/gmmlib
mkdir -p build
cd build
sudo cmake -DCMAKE_BUILD_TYPE= Release -DARCH=64 ../gmmlib
sudo make clean
sudo make
sudo make uninstall
sudo make install

cd ~/vaapi/workspace
git clone https://github.com/intel/media-driver
cd media-driver
git submodule init
git pull
mkdir -p ~/vaapi/workspace/build_media
cd ~/vaapi/workspace/build_media
sudo cmake ../media-driver \
-DMEDIA_VERSION="2.0.0" \
-DBS_DIR_GMMLIB=$PWD/../gmmlib/Source/GmmLib/ \
-DBS_DIR_COMMON=$PWD/../gmmlib/Source/Common/ \
-DBS_DIR_INC=$PWD/../gmmlib/Source/inc/ \
-DBS_DIR_MEDIA=$PWD/../media-driver \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=/usr/lib/x86_64-linux-gnu \
-DINSTALL_DRIVER_SYSCONF=OFF \
-DLIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri
sudo make clean
sudo make
sudo make uninstall
sudo make install

export LIBVA_DRIVER_NAME=iHD
;sudo echo LIBVA_DRIVER_NAME=iHD >> /etc/environment
vainfo


2020年現在、以下の方法は使わなくても大丈夫です。
◇VAAPI対応のffmpegのインストール
◯PPAからインストールする場合
http://ubuntuhandbook.org/index.php/2018/10/install-ffmpeg-4-0-2-ubuntu-18-0416-04/

$ sudo add-apt-repository ppa:jonathonf/ffmpeg-4
$ sudo apt-get update
$ sudo apt-get install ffmpeg


◯ソースコードからビルドする場合
以下のリンク先の手順通りに行う。
https://trac.ffmpeg.org/wiki/CompilationGuide/Centos#FFmpeg

◇VAAPI対応のmedia driverをインストール
http://nodoka.org/ubuntu-18-04-media-driver-ffmpeg4-qsv%e3%82%a8%e3%83%b3%e3%82%b3%e3%83%bc%e3%83%89/

#!/bin/sh

sudo apt update
sudo apt install -y autoconf automake cmake g++ libtool pkg-config libva-dev libdrm-dev libpciaccess-dev libx11-dev vainfo

mkdir -p ~/vaapi
cd ~/vaapi
git clone https://github.com/01org/libva
cd libva
sudo ./autogen.sh --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu
sudo make clean
sudo make
sudo make uninstall
sudo make install
sudo ldconfig

mkdir -p ~/vaapi/workspace
cd ~/vaapi/workspace
git clone https://github.com/intel/gmmlib
mkdir -p build
cd build
sudo cmake -DCMAKE_BUILD_TYPE= Release -DARCH=64 ../gmmlib
sudo make clean
sudo make
sudo make uninstall
sudo make install

cd ~/vaapi/workspace
git clone https://github.com/intel/media-driver
cd media-driver
git submodule init
git pull
mkdir -p ~/vaapi/workspace/build_media
cd ~/vaapi/workspace/build_media
sudo cmake ../media-driver \
-DMEDIA_VERSION="2.0.0" \
-DBS_DIR_GMMLIB=$PWD/../gmmlib/Source/GmmLib/ \
-DBS_DIR_COMMON=$PWD/../gmmlib/Source/Common/ \
-DBS_DIR_INC=$PWD/../gmmlib/Source/inc/ \
-DBS_DIR_MEDIA=$PWD/../media-driver \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=/usr/lib/x86_64-linux-gnu \
-DINSTALL_DRIVER_SYSCONF=OFF \
-DLIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri
sudo make clean
sudo make
sudo make uninstall
sudo make install

export LIBVA_DRIVER_NAME=iHD
;sudo echo LIBVA_DRIVER_NAME=iHD >> /etc/environment
vainfo



【Linux x PRIME x VA-API】内蔵GPUとディスクリートGPUの切り替え VA-API経由でQSVによるハードウェアエンコード
posted by takatan at 15:09| 大阪 ☁| linux | このブログの読者になる | 更新情報をチェックする