web-dev-qa-db-ja.com

FFmpeg:Windows上のAMD GPUでx264をエンコードしますか?

私は現在、Windows 10でFFmpegを使用して組み込みのWebカメラでLenovoラップトップにビデオを録画しようとしています。私の目標の1つは、CPU使用率をできるだけ低く保つことです。そのため、h264エンコーディングをにプッシュしたいと思います。 GPU。今、私のラップトップでは少し注意が必要です。 2つのGPUを使用しているためです。最初のGPUは、CPUの一部としてのIntel HD5500グラフィックスユニットです。これは、エネルギーを節約するために、オフィスなどの要求の厳しいアプリケーションに最も適しています。もう1つはAMDR5 M330で、ゲームなどのグラフィックを多用するアプリケーションに使用されます。

現在、次のコマンドを使用して、Intel HDGPUでWebカメラストリームをエンコードしています。

ffmpeg -f dshow -vcodec mjpeg -video_size 1280x720 -framerate 30 video="Lenovo EasyCamera":audio="Mikrofon (Realtek High Definition Audio)" -c:v h264_qsv -g 60 -q 28 -look_ahead 0 -preset:v faster -c:a aac -q:a 0.6 -r 30 output.mp4

これは今のところ機能しますが、このGPUには、より高いビットレートのフレームレートまたは大量のiフレームに対応するのに十分な電力がないようです。ビデオはフレームが不足し、スキップし始めます。 CPUエンコーディングを使用している場合、すべてがスムーズに機能します。

私のラップトップがより多くのパワーを備えた2番目のAMDGPUを手に入れたので、それをエンコードしてみるのはいいことですが、Windows10のAMDハードウェアでエンコードする方法についての情報が見つかりません。 ffmpegコマンドはh264エンコーディングにAMDハードウェアを使用するようにどのように見えますか?

5
ZeroTek

Ffmpegの現在のバージョンは、主要なGPUベンダーのハードウェアエンコーディングをサポートするようになりました。 h264_amfから取得したAMDグラフィックカードで使用するhevc_amf(H.264)およびffmpeg -h full(H.265またはHEVC)エンコーダーのオプションは次のとおりです。

h264_amf AVOptions:
  -usage             <int>        E..V.... Encoder Usage (from 0 to 3) (default transcoding)
     transcoding                  E..V.... Generic Transcoding
     ultralowlatency              E..V.... 
     lowlatency                   E..V.... 
     webcam                       E..V.... Webcam
  -profile           <int>        E..V.... Profile (from 66 to 257) (default main)
     main                         E..V.... 
     high                         E..V.... 
     constrained_baseline              E..V.... 
     constrained_high              E..V.... 
  -level             <int>        E..V.... Profile Level (from 0 to 62) (default auto)
     auto                         E..V.... 
     1.0                          E..V.... 
     1.1                          E..V.... 
     1.2                          E..V.... 
     1.3                          E..V.... 
     2.0                          E..V.... 
     2.1                          E..V.... 
     2.2                          E..V.... 
     3.0                          E..V.... 
     3.1                          E..V.... 
     3.2                          E..V.... 
     4.0                          E..V.... 
     4.1                          E..V.... 
     4.2                          E..V.... 
     5.0                          E..V.... 
     5.1                          E..V.... 
     5.2                          E..V.... 
     6.0                          E..V.... 
     6.1                          E..V.... 
     6.2                          E..V.... 
  -quality           <int>        E..V.... Quality Preference (from 0 to 2) (default speed)
     speed                        E..V.... Prefer Speed
     balanced                     E..V.... Balanced
     quality                      E..V.... Prefer Quality
  -rc                <int>        E..V.... Rate Control Method (from -1 to 3) (default -1)
     cqp                          E..V.... Constant Quantization Parameter
     cbr                          E..V.... Constant Bitrate
     vbr_peak                     E..V.... Peak Contrained Variable Bitrate
     vbr_latency                  E..V.... Latency Constrained Variable Bitrate
  -enforce_hrd       <boolean>    E..V.... Enforce HRD (default false)
  -filler_data       <boolean>    E..V.... Filler Data Enable (default false)
  -vbaq              <boolean>    E..V.... Enable VBAQ (default false)
  -frame_skipping    <boolean>    E..V.... Rate Control Based Frame Skip (default false)
  -qp_i              <int>        E..V.... Quantization Parameter for I-Frame (from -1 to 51) (default -1)
  -qp_p              <int>        E..V.... Quantization Parameter for P-Frame (from -1 to 51) (default -1)
  -qp_b              <int>        E..V.... Quantization Parameter for B-Frame (from -1 to 51) (default -1)
  -preanalysis       <boolean>    E..V.... Pre-Analysis Mode (default false)
  -max_au_size       <int>        E..V.... Maximum Access Unit Size for rate control (in bits) (from 0 to INT_MAX) (default 0)
  -header_spacing    <int>        E..V.... Header Insertion Spacing (from -1 to 1000) (default -1)
  -bf_delta_qp       <int>        E..V.... B-Picture Delta QP (from -10 to 10) (default 4)
  -bf_ref            <boolean>    E..V.... Enable Reference to B-Frames (default true)
  -bf_ref_delta_qp   <int>        E..V.... Reference B-Picture Delta QP (from -10 to 10) (default 4)
  -intra_refresh_mb  <int>        E..V.... Intra Refresh MBs Number Per Slot in Macroblocks (from 0 to INT_MAX) (default 0)
  -coder             <int>        E..V.... Coding Type (from 0 to 2) (default auto)
     auto                         E..V.... Automatic
     cavlc                        E..V.... Context Adaptive Variable-Length Coding
     cabac                        E..V.... Context Adaptive Binary Arithmetic Coding
  -me_half_pel       <boolean>    E..V.... Enable ME Half Pixel (default true)
  -me_quarter_pel    <boolean>    E..V.... Enable ME Quarter Pixel (default true)
  -aud               <boolean>    E..V.... Inserts AU Delimiter NAL unit (default false)
  -log_to_dbg        <boolean>    E..V.... Enable AMF logging to debug output (default false)
hevc_amf AVOptions:
  -usage             <int>        E..V.... Set the encoding usage (from 0 to 3) (default transcoding)
     transcoding                  E..V.... 
     ultralowlatency              E..V.... 
     lowlatency                   E..V.... 
     webcam                       E..V.... 
  -profile           <int>        E..V.... Set the profile (default main) (from 1 to 1) (default main)
     main                         E..V.... 
  -profile_tier      <int>        E..V.... Set the profile tier (default main) (from 0 to 1) (default main)
     main                         E..V.... 
     high                         E..V.... 
  -level             <int>        E..V.... Set the encoding level (default auto) (from 0 to 186) (default auto)
     auto                         E..V.... 
     1.0                          E..V.... 
     2.0                          E..V.... 
     2.1                          E..V.... 
     3.0                          E..V.... 
     3.1                          E..V.... 
     4.0                          E..V.... 
     4.1                          E..V.... 
     5.0                          E..V.... 
     5.1                          E..V.... 
     5.2                          E..V.... 
     6.0                          E..V.... 
     6.1                          E..V.... 
     6.2                          E..V.... 
  -quality           <int>        E..V.... Set the encoding quality (from 0 to 10) (default speed)
     balanced                     E..V.... 
     speed                        E..V.... 
     quality                      E..V.... 
  -rc                <int>        E..V.... Set the rate control mode (from -1 to 3) (default -1)
     cqp                          E..V.... Constant Quantization Parameter
     cbr                          E..V.... Constant Bitrate
     vbr_peak                     E..V.... Peak Contrained Variable Bitrate
     vbr_latency                  E..V.... Latency Constrained Variable Bitrate
  -header_insertion_mode <int>        E..V.... Set header insertion mode (from 0 to 2) (default none)
     none                         E..V.... 
     gop                          E..V.... 
     idr                          E..V.... 
  -gops_per_idr      <int>        E..V.... GOPs per IDR 0-no IDR will be inserted (from 0 to INT_MAX) (default 60)
  -preanalysis       <boolean>    E..V.... Enable preanalysis (default false)
  -vbaq              <boolean>    E..V.... Enable VBAQ (default false)
  -enforce_hrd       <boolean>    E..V.... Enforce HRD (default false)
  -filler_data       <boolean>    E..V.... Filler Data Enable (default false)
  -max_au_size       <int>        E..V.... Maximum Access Unit Size for rate control (in bits) (from 0 to INT_MAX) (default 0)
  -min_qp_i          <int>        E..V.... min quantization parameter for I-frame (from -1 to 51) (default -1)
  -max_qp_i          <int>        E..V.... max quantization parameter for I-frame (from -1 to 51) (default -1)
  -min_qp_p          <int>        E..V.... min quantization parameter for P-frame (from -1 to 51) (default -1)
  -max_qp_p          <int>        E..V.... max quantization parameter for P-frame (from -1 to 51) (default -1)
  -qp_p              <int>        E..V.... quantization parameter for P-frame (from -1 to 51) (default -1)
  -qp_i              <int>        E..V.... quantization parameter for I-frame (from -1 to 51) (default -1)
  -skip_frame        <boolean>    E..V.... Rate Control Based Frame Skip (default false)
  -me_half_pel       <boolean>    E..V.... Enable ME Half Pixel (default true)
  -me_quarter_pel    <boolean>    E..V.... Enable ME Quarter Pixel  (default true)
  -aud               <boolean>    E..V.... Inserts AU Delimiter NAL unit (default false)
  -log_to_dbg        <boolean>    E..V.... Enable AMF logging to debug output (default false)

たとえば、ffmpeg -i input.mkv -c:v hevc_amf -rc cqp -qp_p 0 -qp_i 0 -c:a copy output.mkvはロスレスになります。それははるかに高速ですが、ファイルサイズは同じ品質のlibx264またはlibx265よりも大幅に大きくなることに注意してください-これが現在のハードウェアエンコーダーの方法です。速度を上げるためにハードウェアエンコーダーを使用してロスレスで記録し、後でlibx264やlibx265などのソフトウェアエンコーダーを使用してファイルサイズを小さくすることをお勧めします。

5
LB--