Handbrake CLI で AMDとNVIDIA のGPUエンコードを使用するも・・・・No.01
Handbrake CLI で AMDとNVIDIA の
GPUエンコードを使用するも・・・・No.01
2022-02-05
Youtubeへの動画作成やLiveのアーカイブ、
はては撮影した動画など、各動画の保存用に容量重視の圧縮、
自宅での動画視聴用に再生機器に適した形式への変換などを一手にお任せしているのが
HandBreake の CLI 版 なのですが、この度、DELLのG15というノートPCを購入(結構w)したので
こちらに搭載しているGPU NVIDIAのRTX3060を使用して、ハードウェアエンコードで
上記の処理を加速できないか?とお試ししました。
と、ついでに少し前に購入した自作PCのAMD機GPUも交換したので、こちらでも効果があるのか?
一緒にお試しです(こちらは最近購入ですw)
Dell G15 5511 ゲーミングノートパソコン https://amzn.to/3AvHTqT
PowerColor AMD Radeon RX6700XT AXRX6700XT12GBD6-3DHL https://amzn.to/3zPVPxs
PowerColor AMD Radeon RX6700XT AXRX6700XT12GBD6-3DHL https://amzn.to/3zPVPxs
とりあえず、CLI版のドキュメントより
動画エンコード部分をチェック
・CLI版のコマンドドキュメント
で、いきなり問題ですね
上記のドキュメントから動画エンコード部分を抜粋すると下記
NVIDIA側のハードウェアエンコード用のコマンドはあるのですけど
(Nvenc_H265)、AMDのがない・・・・
色々と検索をしてみるも、CLI版でAMDハードウェアエンコード云々という記事自体が
ほとんどなく、あっても対応したみたい?的なものばかりで、
具体的な方法等が記載されているものが残念ながらなかった・・・
もちろん公式もなしw
公式での記載はこちら
ちなみに公式の内容をさくっとざっくり解説すると
・Linuxは追加のRadeonツールが必要になること
・GPUエンコードであってもCPUが一部になう処理がある
(場合によっては全てCPUの場合もある)
・オプション設定項目もあります
といった感じですね。ざっくり過ぎますけど、一般的には上記の部分を知っていればOKかと
少し補足をするならば、処理の振り分けですが、映像をエンコードする部分はGPUを使用するが、
エフェクト、フィルターなどを使用するとCPUオンリーになる可能性がる。
オーディオなどの一部、映像のデコード処理はGPUでは行われないので、
動作確認時にガリガリ瀬亭などをすればするほど、CPUに割り振られる可能性が高いので
GPUを主に使用したいのであれば、シンプルがよいかと
情報がないのであれば、色々試していくしかないと思いとりあえず、
情報のある QSVとNVIDIA のNVEnc を見ていきます。
とりあえず変換しているバッチのソースより一部をペタッと
@echo off
REM --------------------------------------------------------------------------
REM コンバート処理
REM in ConvFile out -
REM --------------------------------------------------------------------------
REM --------------------------------------------------------------------------
REM フォルダ・パス、初期設定値
set HB="C:¥HandBrakeCLI¥HandBrakeCLI"
set OPT=-e x265 -f mp4 -q 27.0 -X 1280 -Y 720 -r 30 -a 1
set TSTMP=%2¥%~n1[720p].mp4
set LOG=C:¥HandBrakeCLI¥%COMPUTERNAME%_Conv-000.txt
REM --------------------------------------------------------------------------
REM MAIN
ECHO FILE-NAME-In=%1 >> %LOG%
ECHO FILE-NAME-Out="%TSTMP%" >> %LOG%
ECHO Convert START %DATE%-%TIME% >> %LOG%
%HB% %OPT% -i %1 -o "%TSTMP%"
if exist "%TSTMP%" (
for %%I in ( "%TSTMP%" ) do set size=%%~zI
) else (
set size=0
)
ECHO Convert END %DATE%-%TIME% >> %LOG%
set INF=%~z1
set /A KSIZE=%INF:~,-3%
set /A MSIZE=%KSIZE%/1024
ECHO FILE-SIZE-In=%MSIZE%MB >> %LOG%
set /A KSIZE=%size:~,-3%
set /A MSIZE=%KSIZE%/1024
ECHO FILE-SIZE-Ou=%MSIZE%MB >> %LOG%
if %size% == 0 (
set ERRORLEVEL=2
)
REM END
REM --------------------------------------------------------------------------
EXIT /b %ERRORLEVEL%
上記のコードは別のバッチファイルから呼び出すもので
引数には変換したいファイルを渡すと変換してくれるものとなっています。
引数には変換したいファイルを渡すと変換してくれるものとなっています。
あまり綺麗な内容ではないので(汗
で、今回上記のコードからポイントとなる部分はこちら
で、今回上記のコードからポイントとなる部分はこちら
set OPT=-e x265 -f mp4 -q 27.0 -X 1280 -Y 720 -r 30 -a 1
簡単に言えば、ここではエンコードする方式を指定しています。
日本語で書くと
H265で動画を、MP4の拡張子をつけて
H265で動画を、MP4の拡張子をつけて
クオリティは27、サイズは720p、レートは30、オーディオは1番目を使用する。
となっています。
このH265を指定している部分を変更して、QSVやNVIDIAのNVEncを指定すれば万事OKと
こちらは情報があり、
こちらは情報があり、
NVIDIA NVEncは “nvenc_h265"
Intel QSVは “qsv_h265"
とりあえずテストと思いコードを変更して環境整備をしていた時にふと気がつく
上記の指定コードなのですが、 “XXX_h265"となっており、XXX=使用する場所となっている
そのままですけど、nvecは NVIDIAのnvenc、IntelのQSVは qsv、
・・・・・つまり、AMDのVCEは “vcd_h265”となるのでは?と・・・・
set OPT=-e vce_h265 -f mp4 -q 27.0 -X 1280 -Y 720 -r 30 -a 1
あれまwということで、AMDの VCEも可能ということが発見できました。
次回は、環境が少しまばらになるので、均一な比較にはならないかもですが、
次回は、環境が少しまばらになるので、均一な比較にはならないかもですが、
各エンコードの種類による結果の違いを確認していきます。
ではでは・・・・
コメント
コメントを投稿