Skip to content

補足3 FFmpegのHW支援機能

ōrz edited this page Mar 19, 2017 · 30 revisions

現状のさきゅばす1.xx用ffmpegの(GPU)HW支援はこんな感じです(saccubus1.65.7.1 ffmpeg80914d 2016/07/07)

HW支援なので使えるHWの条件がそれぞれあります

  • DXVA2(*1) Windows DirectXのHWアクセラレーション
     入力オプションに -hwaccel dxva2 -threads 1 追加

  • NVENC(*2) NVIDIA のグラフィックスのHW支援
     出力オプションの -vcodec libx264 -pix_fmt yuv420p
     -vcodec h264_nvenc -pix_fmt nv12 に変更
    使用可能なNVIDIA グラフィックボードは
     https://developer.nvidia.com/nvidia-video-codec-sdk#gpulist
     を見て下さい。

 グラフィックボードの種類により並列エンコード数に制限があり それ以上の実行を行うと
 ffmpegがエラー終了します。 Desktop&Mobile-GeForce (Kepler & Maxwell)は2まで
 さきゅばすの同時変換数を制限値”2”以下にして下さい。

  • Intel QSV(*3)  Intel CPU内蔵GPUのHW支援
     出力オプションの -vcodec libx264 -pix_fmt yuv420p
     -vcodec h264_qsv -look_ahead 0 に変更
     Intel CPUで使用可能なものは以下でCPUの型番を検索して
    クイックシンクビデオ(Quick Sync Video)の項目を確認して下さい。
    http://ark.intel.com/ja#@Processors

*1 -threads 1を入力オプションに入れれば出力をフレームスレッディングしても問題ないようです
NVENC, QSVはthreading機能無いが -threads 0を指定しても大丈夫のよう

*2 オプション -pix_fmt yuv420p を指定すると画面下半分の色が変になる。 nv12なら問題なさそう

*3 グラボ付きPCでデバイスマネージャに表示されない内蔵GPUを使うにはマザーボードのBIOSでiGPU MultiMoniterを有効にする必要がある

1380964938(sm9マイメモ)を512x384コメント付きエンコード比較

Windows10 64bit core-i7 6700k (skylake) NVIDIA GTX TITANX
配布オプション PC_640x384アス比共通による 変換時間
 libx264   1分55秒  66MB
 NVENC   1分40秒  60MB
 QSV    1分36秒  62MB

ユーザー生放送タイムシフト(30分)を640x360(入力音声サイズ)でコメント付きエンコード比較

     変換時間 変換後サイズ 変換中使用率
libx264  3分36秒 82MB  CPU70%
NVENC  3分48秒 314MB(*4) CPU20%-GTX50%
QSV   3分45秒 293MB(*4) CPU20%-GTX0%-iGPU??%
*4 -crfオプションがうまく効いてない可能性

*追記 効かないcrfの代わりに -b:v ビットレート指定を変更すると簡単に容量が小さくなりました。
このflvの場合は変換後の画質は変わらなかった。
-presetを変えても変化がないが-q指定をすると画質が大幅に落ちたので止めました。
ユーザー生放送(動画リクエスト放送ではない)の放送時最大ビットレートは384kbps(深夜480kbps)?
15fps→30fpsに変換しているがコメントがない部分は実質dup(Bフレでビットレート増加は殆どない?)
NVENC -b:v 300k 3分58秒 116MB
NVENC -b:v 500k 3分59秒 157MB
QSV -b:v 300k 3分56秒 108MB
(参考: libx264は -crf 23 -b:v 1400k で変換後の画像ビットレートは 314kbps)   

参考サイト