ffmpeg 4.0 から追加されたエンコーダ。AMF(Advanced Media Framework)SDK を使ったAMD の VCE(Video Coding Engine)を ffmpeg で使う方法。RX470 で試したところ、h264_amfのほうが、hevc_amfよりも VAMFスコアを見る限り高画質でエンコード速度は少し遅く、デコード速度が早くなる。

関連記事

hardware acceleration の Wiki:HWAccelIntro – FFmpeg

準備

エンコード例

libx264などで使える、-crf、-minrate、-maxrateは使えないので、-b:vでビットレート指定、または-qmin、-qmaxで品質の上下指定、-qp_i、-qp_p、-qp_bで各フレームの品質指定をする。低解像度で-qmin、-qmaxの間隔が広いと思ったほどビットレートが既定値の 2000kb/s から変化しないのでそのときは両方ともを大きくし、ビットレートが必要とするなら両方とも小さくする。-pass指定ができないので2パスエンコードはできない。

ffmpeg -i input -c:v h264_amf -quality quality -rc cqp -qmin 15 -qmax 30 -c:a copy output.mp4
ffmpeg -i input -c:v hevc_amf -quality quality -rc cqp -qmin 15 -qmax 30 -c:a copy output.mkv

可逆圧縮例
ffmpeg -i input -c:v h264_amf -quality quality -rc cqp -qmin 0 -qmax 0 -g 1 -c:a copy output.mp4

デコード例

Direct3D 11でハードウェア支援のデコードができる。複数GPUを挿しているときは-hwaccel_deviceの数値を変える。

ffmpeg -hwaccel d3d11va -hwaccel_output_format d3d11 -hwaccel_device 1 -i input -c:v h264_amf -quality quality -rc cqp -qmin 15 -qmax 30 -c:a copy output.mp4
ffmpeg -hwaccel d3d11va -hwaccel_output_format d3d11 -hwaccel_device 1 -i input -c:v hevc_amf -quality quality -rc cqp -qmin 15 -qmax 30 -c:a copy output.mkv

h264_amf のオプション

公式ドキュメント PDF:AMF_Video_Encode_API
ffmpeg -h encoder=h264_amf
品質オプションの、-qualityは 既定値のspeedからbalanced、qualityの順番に画質がよくなる代わりに処理が遅くなる。

-g[int]
group of picture size で、keyint のこと
既定値:-1(10秒に1枚キーフレームが挿入される)

hevc_amf のオプション

公式ドキュメント PDF:AMF_Video_Encode_HEVC_API
ffmpeg -h encoder=hevc_amf
品質オプションの、-qualityは 既定値のspeedbalanced, qualityは同じ品質の動画にエンコードされる。

-g[int]
group of picture size で、keyint のこと
既定値:-1(10秒に1枚キーフレームが挿入される)

opencl フィルタを併用する

RX470 には opencl が使えるので、これを使ってフィルタを併用する。対応フィルタは opencl でブログ内検索する。ポイントは ocl のデバイスを指定し、フィルタ間でhwupload,hoge_opencl,hwdownloadのように ocl フィルタを挟む。

ffmpeg -init_hw_device opencl=ocl:1.0 -filter_hw_device ocl -i input.mp4 -vf hwupload,avgblur_opencl,hwdownload,unsharp -c:v h264_amf -c:a copy output.mp4

ハードウェア支援をする。
ffmpeg -hwaccel d3d11va -hwaccel_output_format d3d11 -hwaccel_device 1 -init_hw_device opencl=ocl:1.0 -filter_hw_device ocl -i input.mp4 -vf hwdownload,format=nv12,hwupload,roberts_opencl,format=nv12 -c:v h264_amf -quality quality -rc cqp -qmin 15 -qmax 30 -c:a copy output.mp4

その他は、ハードウェアデコーダ、フィルタ、エンコーダを組み合わせるを参照。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)