本文は2015年時点の話だが、2018年と2019年のファイルも公開されている。
2018年:https://on-demand.gputechconf.com/gtc/2018/presentation/s8601-nvidia-gpu-video-technologies.pdf
2019年:https://developer.download.nvidia.com/video/gputechconf/gtc/2019/presentation/s9331-nvidia-gpu-video-technologies-overview-applications-and-optimization-techniques.pdf
公式発表のPDFのまとめ:NVIDIA Corporation – Events & Presentations – Presentations
公開されている PDF から GPU エンコーディングの利点と活用方法を考える。
PDF:Slide 1 – S5613-Abhijit-Patait.pdf
目次
利点
- CPUを使わず、メモリー間の転送量を減らす
- 低遅延で高性能で高密度
- スケール化がしやすい
- プログラミングがしやすい(Linux, Windows, C/C++)
現状の仕様
- H.264 base, main, high profiles
- H.265/HEVC main profile
- 4K 60fps での高速エンコード
- YUV 4:2:0 と 4:4:4 対応
- QP マップ
- 4K 解像度のハードウェアエンコーダー
- API – NV Encode SDK & GRID SDK
- CUDA から独立
世代毎の仕様の比較
Kepler | Maxwell Gen 1 (GM10x) | Maxwell Gen 2 (GM20x) |
H.264 only | H.264 only | H.264 and HEVC/H.265 |
Planar 4:4:4 and proprietary 4:4:4; no lossless encoding | Standard 4:4:4 and H.264 lossless encoding | Standard 4:4:4 and H.264 lossless encoding |
~240 fps 2-pass encoding @720p | ~500 fps 2-pass encoding @720p | ~900 fps 2-pass encoding @720p |
GRID K340/K520, K1/K2, Quadro, Tesla K10/K20 | Maxwell-based GRID & Quadro products | TBA |
GeForce 2 full-speed encode sessions/system | GeForce 2 full-speed encode sessions/system | GeForce – 2 full-speed encode sessions/system |
NV Encode SDK 1.0-5.0 (Now) | NV Encode SDK 4.0+ (Now) | NV Encode SDK 5.0+ (Now) |
GRID SDK 1.x, 2.2, 2.3 (Now) | GRID SDK 3.0+ (Now) | In development |
ハードウェアで新しくなったところ
HEVC
- 8bit エンコード
- Main 8bit profile
- I, P フレームを最適化し遅延を軽減
- 720P を高画質で 300fps(のエンコード速度)
H.264
- 高速化(第1世代の Maxwell と比較して 80% 高速化)
- YUV 4:4:4 対応と可逆圧縮対応
ソフトウェアで新しくなったところ
- NVENC SDK 5.0 について
- NVIDIA GPU driver 347.18 以上に対応
- HEVC
- 統一された H.264 と HEVC の API
- Linux と Windows のサポート
- Intra refresh, ref-pic invalidation など H.264 と HEVC
- GM20x 以上は全て NVENC に対応
- Adaptive quantization(AQ)
- 品質向上
- SDK 内のサンプルを一新
NVENC, GRID の SDK 比較
NVENC SDK
- No capture
- Transcoding
- Archiving
- Video editing
- CUDA pre-process + encoding
- Granular encoder settings
- D3D, CUDA 相互運用
NVENC SDK の詳細
- ダウンロード先:NVIDIA VIDEO CODEC SDK:現在のバージョンは 5.0
- インターフェースヘッダ、ドキュメント、サンプルアプリも含まれる
- .dll/.so はドライバーに含まれる
- x86/x64 で実行できる
- API, プリセット, レート制御あり
- 低遅延による配信
- トランスコード
- ビデオ会議用途
- H.264 と HEVC 向けの API が統一されている
- 柔軟性
- 動的に解像度とビットレートを変更できる
- Low-level(低画質?、プロファイルレベルが低い)エンコード設定
- Windows, Linux, DirectX, CUDA, OpenGL(CUDA 経由)
- GeForce(2 セッション/システム)で機能する
- エラー隠蔽
- 参照ピクチャ(ref)を無効化
- I フレームを刷新
- 画質と処理速度はトレードオフ
- 可逆圧縮対応は GRID SDK ではなく、NVENC SDK だけ
GRID SDK
- Capture + encode
- アプリ向けに低遅延に最適化
- Capture + CUDA preprocess + encoding
- 配信用途にエンコード設定を最適化
- D3D, CUDA 相互運用
GRID SDK の詳細
- NDA の古いバージョンはデベロッパーのみに提供
ダウンロード先:GRID Application and Game Streaming - 現在のバージョン:3.1(NDA)、2.3(一般公開バージョン)
- インターフェースヘッダ、ドキュメント、サンプルアプリも含まれる
- .dll/.so はドライバーに含まれる
- Windows と Linux の x86/x64 で実行できる
- 用意されている API のプリセット
- 遠隔地での描写(クラウド経由のゲームプレイ、リモートデスクトップ、キャプチャと配信)
- 低遅延に最適化
処理能力の比較
低ビットレートで HEVC は H.264 に比べて大きくメリットがある。これは現状のソフトウェアエンコーダーの x264, x265 と比較しても同じである。x265 は x264 と比べてプリセットの medium 以降で大きく処理が重たくなるがハードウェアエンコーダー同じプリセット比較ではないがそこまで遅くなっていない。
処理速度グラフはPDFを参照。
関連記事
How to Encode to HEVC: A Simple Guide for H.265 First-Timers – Streaming Media Magazine
ロードマップ
今後はビット深度をより深く、高圧縮が期待できる HEVC B-frames の対応、処理の高速化、可逆圧縮と YUV 4:4:4 対応など。
- Core GPU chip IP
- Motion estimation only mode – 2H2015
- SAO(Sample Adaptive Offset), 10/12-bit, HEVC B-frames
- 可逆圧縮/4:4:4
- Improved quality for screen content encoding
- ME performance and quality enhancements
- Today: 4K@60fps
- Next: 8K@??
感想
H.264、HEVC の 4:4:4 対応や、H.264 の可逆圧縮対応で一時出力にもマスター出力にも高速で作ることがでる。そして高速で 4K 以上にも速度面で実用的になれば今後の高解像度化が進む映像制作の現場にはかなりメリットが多くなる。ただしアルファチャンネルには対応していないのでその部分の合成にはいつも通りのエンコーダーを使うことになる。同様に高解像度の映像のデコードにはそれなりのマシンパワーが必要だがその部分もハードウェアデコーダーの進歩が求められる。
関連記事
- NVEnc API v5.0 に対応
rigayaの日記兼メモ帳 NVEnc - ffmpeg も API v5.x に最近対応した
ffmpeg に nvenc(cuda) をインストールする - ffmpeg に nvenc は H.264 だけではなく H.265/HEVC にも対応した
avcodec/nvenc: Add support for H.265 encod ing : git.videolan.org Git - NVENC H.265/HEVC を試すには新しい Maxwell GPU の GeForce GTX 960, GTX 970, GTX 980 が必要
FFmpeg Enables H.265 Encoding For New NVIDIA GPUs – Phoronix - ffmpeg は qsv のエンコード・デコードの両方に対応
qsv 対応の ffmpeg をつくる - ffmpeg は qsv decoder にも対応した
qsvdec: split off some code that will be shared with the encoder : git.videolan.org Git - ffmpeg のハードウェアアクセレーションの Wiki
HWAccelIntro – FFmpeg