我目前正在尝试使用内置网络摄像头在Windows 10上使用FFmpeg在我的联想笔记本电脑上录制视频。我的目标之一是尽可能降低CPU使用率,这就是我想要推动h264的原因编码到GPU。 现在,我的笔记本电脑在这里变得有点棘手。因为它使用两个GPU。第一个GPU是Intel HD 5500图形单元,作为CPU的一部分。这个最喜欢用于办公室等非要求的应用程序以节省能源。另一款是AMD R5 M330,将用于游戏等图形密集型应用。
目前,我正在使用以下命令对Intel HD GPU上的网络摄像头流进行编码:
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编码,一切顺利。
现在,我的笔记本电脑获得了第二台具有更高功率的AMD GPU,这将是一个很好的尝试编码,但我找不到任何有关如何在Windows 10上的AMD硬件编码的信息。所以我的问题是:ffmpeg命令如何将AMD硬件用于h264编码?
答案 0 :(得分:3)
当前版本的ffmpeg现在支持主要GPU供应商的硬件编码。以下是h264_amf
(H.264)和hevc_amf
(H.265或HEVC)编码器的选项,这些编码器可用于AMD显卡,取自ffmpeg -h full
:
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等软件编码器来减小文件大小。