FFmpeg 用显卡解码编码
先看看当前 ffmpeg 支持那些编解码器。
打开powershell运行以下命令。
ffmpeg -codecs | Select-String -Pattern "h264|hevc|av1"
Intel
带 qsv 的就是 Intel 显卡支持的硬件编解码器。
DEV.L. av1 Alliance for Open Media AV1 (decoders: libdav1d libaom-av1 av1 av1_cuvid av1_qsv) (encoders: libaom-av1 librav1e libsvtav1 av1_nvenc av1_qsv av1_amf av1_mf av1_vaapi)
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv h264_cuvid) (encoders: libx264 libx264rgb h264_amf h264_mf h264_nvenc h264_qsv h264_vaapi h264_vulkan)
DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv hevc_cuvid) (encoders: libx265 hevc_amf hevc_d3d12va hevc_mf hevc_nvenc hevc_qsv hevc_vaapi hevc_vulkan)
ffmpeg -ss 01:31:19 -hwaccel qsv -hwaccel_output_format qsv -i "转换前.mp4" -t 00:02:00 -c:v h264_qsv -vf "scale_qsv=w=2583:h=1080" -preset medium -global_quality 22 "转换后.mp4"
参数解释:
-ss 01:31:19
搜索这个时间 01:31:19 ,就是从这个时间开始。-t 00:02:00
从上面时间开始,截取两分钟的视频。
质量控制,以下三选一:
-b:v
后面跟码率,500K(500 Kbps) 或者 2M (2 Mbps)之类的值。-q
后面跟 0 - 51 之间的整数。值越大, 画面质量越低。-global_quality
后面跟 0 - 51 之间的整数。值越大, 画面质量越低。跟-q
差不多。但这个参数适用的编码器和平台更加广泛。
hevc_qsv 编码器可选参数
码率控制方法按如下方式选择:
当指定了
global_quality
(全局质量)时,将使用基于质量的模式。具体来说,这意味着:- 当同时设置了
qscale
(量化参数)编解码器标志(即ffmpeg
的-qscale
选项)时,使用 CQP(恒定量化参数)模式。 - 当同时设置了
look_ahead
(预分析)选项时,使用 LA_ICQ(带预分析的智能恒定质量)模式。 - 否则,使用 ICQ(智能恒定质量)模式。对于 ICQ 模式,全局质量范围是 1 到 51,1 表示质量最佳。
- 当同时设置了
否则,当使用
-b
选项指定了所需的平均码率时,将使用基于码率的模式:- 当指定了
look_ahead
选项时,使用 LA(带预分析的可变比特率)模式。 - 当设置了
vcm
选项时,使用 VCM(视频会议模式)。 - 当指定了
maxrate
(最大码率)且其值等于平均码率时,使用 CBR(恒定比特率)模式。 - 当指定了
maxrate
,且其值高于平均码率时,使用 VBR(可变比特率)模式。 - 当未指定
maxrate
,且avbr_accuracy
(平均可变比特率精度)和avbr_convergence
(平均可变比特率收敛性)都设置为非零值时,使用 AVBR(平均可变比特率)模式。此模式在 Windows 系统上的 H264 和 HEVC 编码中可用。
- 当指定了
- 否则,将使用默认的码率控制方法 CQP。
请注意,根据您的系统情况,编码器可能会选择与您指定的不同的模式。将日志详细程度设置为 verbose
(详细)或更高级别,以查看 QSV 运行时实际使用的设置。
-async_depth
- 参数类型:
<int>
- 取值范围:1 到
INT_MAX
- 默认值:4
- 描述:最大处理并行度。此参数决定了在处理过程中能够同时开展的任务数量。数值越大,在多核处理器上或许能有更高的处理效率,但会占用更多系统资源。例如设为 4 就意味着可同时处理 4 个任务。
-preset
- 参数类型:
<int>
- 取值范围:0 到 7
- 默认值:0
描述:编码预设,不同预设对应不同的编码速度与质量权衡。
veryfast
(值为 7):编码速度最快,不过可能会牺牲一定编码质量,适用于对编码速度要求极高而对质量要求相对较低的场景,像实时视频流。faster
(值为 6):编码速度较快,质量稍有提升,在需要快速编码且对质量有一定要求时可使用。fast
(值为 5):在编码速度和质量间取得平衡,是较常用的预设。medium
(值为 4):较好地平衡了速度和质量。slow
(值为 3):编码速度较慢,但编码质量会提高,适用于对质量要求较高、对编码时间不太敏感的场景。slower
(值为 2):进一步降低编码速度以换取更高质量。veryslow
(值为 1):编码速度最慢,但能获得最高编码质量,常用于需要高质量编码的后期制作等场景。
-forced_idr
- 参数类型:
<boolean>
- 取值范围:
true
或false
- 默认值:
false
- 描述:强制将 I 帧作为 IDR 帧。IDR 帧是特殊的 I 帧,可作为解码起始点,后续解码能独立于之前的帧。设为
true
可确保在需要时能从任意 IDR 帧开始解码,但会增加码率。
-low_power
- 参数类型:
<boolean>
- 取值范围:
true
、false
或auto
- 默认值:
auto
- 描述:启用低功耗模式。该模式处于实验阶段,受 mfx 版本、比特率控制模式等诸多因素限制。设为
true
会降低功耗,但可能存在一些功能限制;设为false
则不启用;auto
会依据系统情况自动决定是否启用。
-rdo
- 参数类型:
<int>
- 取值范围: -1 到 1
- 默认值: -1
描述:启用率失真优化。不同取值对应不同的优化策略。
- -1:使用默认的率失真优化策略。
- 0:可能采用某种基础的优化策略。
- 1:采用更高级的率失真优化策略,能在保证一定质量的前提下更好地控制码率。
-max_frame_size
- 参数类型:
<int>
- 取值范围: -1 到
INT_MAX
- 默认值: -1
- 描述:编码后帧的最大字节大小。设为 -1 表示不限制帧大小;设为具体正值时,编码器会保证编码后的帧大小不超过该值。
-max_frame_size_i
- 参数类型:
<int>
- 取值范围: -1 到
INT_MAX
- 默认值: -1
- 描述:编码后 I 帧的最大字节大小。设为 -1 表示不限制 I 帧大小;设为具体正值时,编码器会保证编码后的 I 帧大小不超过该值。
-max_frame_size_p
- 参数类型:
<int>
- 取值范围: -1 到
INT_MAX
- 默认值: -1
- 描述:编码后 P 帧的最大字节大小。设为 -1 表示不限制 P 帧大小;设为具体正值时,编码器会保证编码后的 P 帧大小不超过该值。
-max_slice_size
- 参数类型:
<int>
- 取值范围: -1 到
INT_MAX
- 默认值: -1
- 描述:编码后切片的最大字节大小。设为 -1 表示不限制切片大小;设为具体正值时,编码器会保证编码后的切片大小不超过该值。
-mbbrc
- 参数类型:
<int>
- 取值范围: -1 到 1
- 默认值: -1
描述:宏块级别的比特率控制。不同取值对应不同的控制策略。
- -1:使用默认的宏块级比特率控制策略。
- 0:可能采用某种基本的控制策略。
- 1:采用更精细的宏块级比特率控制策略,能更精准地分配比特率。
-extbrc
- 参数类型:
<int>
- 取值范围: -1 到 1
- 默认值: -1
描述:扩展比特率控制。不同取值对应不同的比特率控制策略。
- -1:使用默认的扩展比特率控制策略。
- 0:可能采用某种基础的控制策略。
- 1:采用更高级的扩展比特率控制策略,能更精细地控制比特率。
-p_strategy
- 参数类型:
<int>
- 取值范围:0 到 2
- 默认值:0
描述:启用 P 帧金字塔。不同取值对应不同的 P 帧金字塔模式。
- 0:默认模式。
- 1:简单模式。
- 2:金字塔模式(此时 B 帧数量需设为 0)。
-b_strategy
- 参数类型:
<int>
- 取值范围: -1 到 1
- 默认值: -1
描述:选择 I/P/B 帧的策略。不同取值决定了编码器在选择 I 帧、P 帧和 B 帧时的策略。
- -1:使用默认的帧选择策略。
- 0:可能采用某种特定的保守帧选择策略,以保证一定的编码质量。
- 1:可能采用更激进的帧选择策略,以提高编码效率。
-dblk_idc
- 参数类型:
<int>
- 取值范围:0 到 2
- 默认值:0
描述:此选项用于禁用去块效应滤波。不同取值对应不同的滤波设置。
- 0:启用默认的去块效应滤波。
- 1:可能采用某种弱化的去块效应滤波。
- 2:完全禁用去块效应滤波。
-low_delay_brc
- 参数类型:
<boolean>
- 取值范围:
true
、false
或auto
- 默认值:
auto
- 描述:允许严格遵守平均帧大小。设为
true
时,编码器会严格控制每帧大小接近平均帧大小;设为false
则不严格控制;auto
会根据系统情况自动决定。
-max_qp_i
- 参数类型:
<int>
- 取值范围: -1 到 51
- 默认值: -1
- 描述:I 帧的最大视频量化参数比例。设为 -1 表示不限制;设为具体值时,编码器会保证 I 帧的量化参数不超过该值。量化参数越大,压缩率越高,但质量可能越低。
-min_qp_i
- 参数类型:
<int>
- 取值范围: -1 到 51
- 默认值: -1
- 描述:I 帧的最小视频量化参数比例。设为 -1 表示不限制;设为具体值时,编码器会保证 I 帧的量化参数不低于该值。
-max_qp_p
- 参数类型:
<int>
- 取值范围: -1 到 51
- 默认值: -1
- 描述:P 帧的最大视频量化参数比例。设为 -1 表示不限制;设为具体值时,编码器会保证 P 帧的量化参数不超过该值。
-min_qp_p
- 参数类型:
<int>
- 取值范围: -1 到 51
- 默认值: -1
- 描述:P 帧的最小视频量化参数比例。设为 -1 表示不限制;设为具体值时,编码器会保证 P 帧的量化参数不低于该值。
-max_qp_b
- 参数类型:
<int>
- 取值范围: -1 到 51
- 默认值: -1
- 描述:B 帧的最大视频量化参数比例。设为 -1 表示不限制;设为具体值时,编码器会保证 B 帧的量化参数不超过该值。
-min_qp_b
- 参数类型:
<int>
- 取值范围: -1 到 51
- 默认值: -1
- 描述:B 帧的最小视频量化参数比例。设为 -1 表示不限制;设为具体值时,编码器会保证 B 帧的量化参数不低于该值。
-adaptive_i
- 参数类型:
<int>
- 取值范围: -1 到 1
- 默认值: -1
描述:自适应 I 帧放置。不同取值对应不同的 I 帧自适应放置策略。
- -1:使用默认的自适应 I 帧放置策略。
- 0:可能采用某种固定的 I 帧放置策略。
- 1:采用更灵活的自适应 I 帧放置策略,根据视频内容动态调整 I 帧位置。
-adaptive_b
- 参数类型:
<int>
- 取值范围: -1 到 1
- 默认值: -1
描述:自适应 B 帧放置。不同取值对应不同的 B 帧自适应放置策略。
- -1:使用默认的自适应 B 帧放置策略。
- 0:可能采用某种固定的 B 帧放置策略。
- 1:采用更灵活的自适应 B 帧放置策略,根据视频内容动态调整 B 帧位置。
-scenario
- 参数类型:
<int>
- 取值范围:0 到 8
- 默认值:
unknown
描述:给编码器提供编码会话场景的提示。不同取值对应不同的场景。
unknown
(值为 0):未知场景,使用默认编码设置。displayremoting
(值为 1):适用于显示远程传输场景,注重低延迟和快速响应。videoconference
(值为 2):适用于视频会议场景,需要平衡质量和实时性。archive
(值为 3):适用于存档场景,注重高编码质量。livestreaming
(值为 4):适用于直播场景,需要低延迟和稳定的码率。cameracapture
(值为 5):适用于相机捕获场景,可能需要根据相机特性进行优化。videosurveillance
(值为 6):适用于视频监控场景,注重长时间稳定编码和低码率。gamestreaming
(值为 7):适用于游戏直播场景,需要低延迟和高帧率支持。remotegaming
(值为 8):适用于远程游戏场景,对延迟和图像质量要求较高。
-avbr_accuracy
- 参数类型:
<int>
- 取值范围:0 到 65535
- 默认值:0
- 描述:AVBR 比特率控制的精度,单位为十分之一百分比。数值越大,比特率控制越精确,但可能会增加编码复杂度。
-avbr_convergence
- 参数类型:
<int>
- 取值范围:0 到 65535
- 默认值:0
- 描述:AVBR 比特率控制的收敛速度,单位为 100 帧。数值越大,收敛速度越慢,但可能会使比特率更稳定。
-skip_frame
- 参数类型:
<int>
- 取值范围:0 到 3
- 默认值:
no_skip
描述:允许帧跳过。不同取值对应不同的帧跳过策略。
no_skip
(值为 0):禁用帧跳过。insert_dummy
(值为 1):编码器在比特流中插入所有宏块都被编码为跳过的帧。insert_nothing
(值为 2):编码器不在比特流中插入任何内容。brc_only
(值为 3):skip_frame
元数据指示当前帧之前错过的帧数。
-dual_gfx
- 参数类型:
<int>
- 取值范围:0 到 2
- 默认值:
off
描述:优先同时在集成显卡(iGfx)和独立显卡(dGfx)上进行处理。不同取值对应不同的处理模式。
off
(值为 0):禁用 HyperEncode 模式。on
(值为 1):启用 HyperEncode 模式,若初始化时参数不兼容则返回错误。adaptive
(值为 2):启用 HyperEncode 模式,若初始化时参数不兼容则回退到单 GPU 模式。
-idr_interval
- 参数类型:
<int>
- 取值范围: -1 到
INT_MAX
- 默认值:0
描述:IDR 帧之间的距离(以 I 帧为单位)。不同取值对应不同的 IDR 帧插入策略。
begin_only
(值为 -1):仅在流的开头输出一个 IDR 帧。- 0:使用默认的 IDR 帧插入策略。
- 正值:表示每隔指定数量的 I 帧插入一个 IDR 帧。
-load_plugin
- 参数类型:
<int>
- 取值范围:0 到 2
- 默认值:
hevc_hw
描述:在内部会话中加载用户插件。不同取值对应不同的插件。
none
(值为 0):不加载任何插件。hevc_sw
(值为 1):加载 HEVC 软件编码插件。hevc_hw
(值为 2):加载 HEVC 硬件编码插件。
-load_plugins
- 参数类型:
<string>
- 取值范围:无特定限制
- 默认值:""
- 描述:以冒号分隔的十六进制插件 UID 列表,用于在内部会话中加载多个插件。
-look_ahead_depth
- 参数类型:
<int>
- 取值范围:0 到 100
- 默认值:0
- 描述:前瞻帧数深度。当
extbrc
选项启用时可用。该参数决定了编码器在编码当前帧时可以向前查看的帧数。设为 0 表示不进行前瞻;设为正整数时,编码器可根据后续帧信息优化当前帧编码。
-profile
- 参数类型:
<int>
- 取值范围:0 到
INT_MAX
- 默认值:
unknown
描述:编码配置文件。不同取值对应不同的编码特性和兼容性。
unknown
(值为 0):使用默认的、未知的编码配置文件。main
(值为 1):使用主编码配置文件,通常提供较好的兼容性和一定的编码质量。main10
(值为 2):支持 10 位色深的主配置文件。mainsp
(值为 3):适用于特定场景的主配置文件。rext
(值为 4):扩展配置文件,提供更多高级编码特性。scc
(值为 9):特定的编码配置文件。
-tier
- 参数类型:
<int>
- 取值范围:0 到 256
- 默认值:
high
描述:设置编码层级(仅级别 >= 4 时支持高级层级)。不同取值对应不同的编码层级。
main
(值为 0):主层级,提供基本的编码功能。high
(值为 256):高级层级,提供更多高级编码特性。
-gpb
- 参数类型:
<boolean>
- 取值范围:
true
或false
- 默认值:
true
- 描述:
true
表示使用广义 P/B 帧;false
表示使用常规 P 帧。
-tile_cols
- 参数类型:
<int>
- 取值范围:0 到 65535
- 默认值:0
- 描述:分块编码的列数。设为 0 表示不进行分块编码;设为正整数时,编码器会将视频帧按列分块编码,有助于并行处理和提高编码效率。
-tile_rows
- 参数类型:
<int>
- 取值范围:0 到 65535
- 默认值:0
- 描述:分块编码的行数。设为 0 表示不进行分块编码;设为正整数时,编码器会将视频帧按行分块编码,有助于并行处理和提高编码效率。
-recovery_point_sei
- 参数类型:
<int>
- 取值范围: -1 到 1
- 默认值: -1
描述:插入恢复点 SEI 消息。不同取值对应不同的插入策略。
- -1:使用默认的恢复点 SEI 消息插入策略。
- 0:不插入恢复点 SEI 消息。
- 1:插入恢复点 SEI 消息,有助于在解码出错时恢复。
-aud
- 参数类型:
<boolean>
- 取值范围:
true
或false
- 默认值:
false
- 描述:插入访问单元分隔符 NAL。设为
true
会在比特流中插入访问单元分隔符,有助于解码时的同步。
-pic_timing_sei
- 参数类型:
<boolean>
- 取值范围:
true
或false
- 默认值:
true
- 描述:插入带有
pic_struct_syntax
元素的图片定时 SEI 消息。设为true
可提供图片的定时信息,有助于解码和显示。
-transform_skip
- 参数类型:
<int>
- 取值范围: -1 到 1
- 默认值: -1
描述:启用变换跳过。不同取值对应不同的变换跳过策略。
- -1:使用默认的变换跳过策略。
- 0:禁用变换跳过。
- 1:启用变换跳过,可减少编码复杂度,但可能会降低一定的编码质量。
-int_ref_type
- 参数类型:
<int>
- 取值范围: -1 到 65535
- 默认值: -1
描述:帧内刷新类型。B 帧应设为 0。不同取值对应不同的帧内刷新方式。
none
(值为 0):不进行帧内刷新。vertical
(值为 1):垂直帧内刷新。horizontal
(值为 2):水平帧内刷新。slice
(值为 3):切片级帧内刷新。
-int_ref_cycle_size
- 参数类型:
<int>
- 取值范围: -1 到 65535
- 默认值: -1
- 描述:帧内刷新周期的帧数。设为 -1 表示不使用帧内刷新周期;设为正整数时,编码器会按指定周期进行帧内刷新。
-int_ref_qp_delta
- 参数类型:
<int>
- 取值范围: -32768 到 32767
- 默认值: -32768
- 描述:刷新宏块的量化参数差值。该参数影响帧内刷新宏块的量化参数,负值表示降低量化参数,提高质量;正值表示提高量化参数,降低质量。
-int_ref_cycle_dist
- 参数类型:
<int>
- 取值范围: -1 到 32767
- 默认值: -1
- 描述:帧内刷新周期起始点之间的帧数距离。设为 -1 表示不使用固定的帧内刷新周期距离;设为正整数时,编码器会按指定距离进行帧内刷新周期的起始。
av1_qsv 编码器可选参数
-async_depth
- 参数类型:
<int>
- 取值范围:1 到
INT_MAX
- 默认值:4
- 描述:最大处理并行程度。该参数决定了处理过程中可以同时进行的任务数量。取值越大,在多核处理器上可能会有更高的处理效率,但也会占用更多的系统资源。
-preset
- 参数类型:
<int>
- 取值范围:0 到 7
- 默认值:0
描述:编码预设值,不同的预设值对应不同的编码速度和质量权衡。
veryfast
(值为 7):最快的编码速度,但可能会牺牲一定的编码质量。适用于对编码速度要求极高,对质量要求相对较低的场景,比如实时视频流。faster
(值为 6):编码速度较快,质量略有提升。在需要快速编码且对质量有一定要求时可以使用。fast
(值为 5):平衡了编码速度和质量,是一个比较常用的预设值。medium
(值为 4):在速度和质量之间取得较好的平衡。slow
(值为 3):编码速度较慢,但编码质量会有所提高。适用于对质量要求较高,对编码时间不太敏感的场景。slower
(值为 2):进一步降低编码速度以换取更高的质量。veryslow
(值为 1):最慢的编码速度,但能获得最高的编码质量。常用于需要高质量编码的后期制作等场景。
-forced_idr
- 参数类型:
<boolean>
- 取值范围:
true
或false
- 默认值:
false
- 描述:强制将 I 帧作为 IDR 帧。IDR 帧是一种特殊的 I 帧,它可以作为解码的起始点,后续的解码可以独立于之前的帧。设置为
true
可以确保在需要时能从任意 IDR 帧开始解码,但会增加码率。
-low_power
- 参数类型:
<boolean>
- 取值范围:
true
、false
或auto
- 默认值:
auto
- 描述:启用低功耗模式。此模式在实验阶段,受 mfx 版本、比特率控制模式等多种因素限制。设置为
true
会降低功耗,但可能会有一些功能限制;设置为false
则不启用低功耗模式;auto
会根据系统情况自动决定是否启用。
-b_strategy
- 参数类型:
<int>
- 取值范围: -1 到 1
- 默认值: -1
描述:选择 I/P/B 帧的策略。不同的取值决定了编码器在选择 I 帧、P 帧和 B 帧时的策略。
- -1:使用默认的帧选择策略。
- 0:可能采用某种特定的保守帧选择策略,以保证一定的编码质量。
- 1:可能采用更激进的帧选择策略,以提高编码效率。
-adaptive_i
- 参数类型:
<int>
- 取值范围: -1 到 1
- 默认值: -1
描述:自适应 I 帧放置。该参数控制 I 帧在视频流中的自适应放置策略。
- -1:使用默认的自适应 I 帧放置策略。
- 0:可能采用某种固定的 I 帧放置策略。
- 1:采用更灵活的自适应 I 帧放置策略,根据视频内容动态调整 I 帧的位置。
-adaptive_b
- 参数类型:
<int>
- 取值范围: -1 到 1
- 默认值: -1
描述:自适应 B 帧放置。控制 B 帧在视频流中的自适应放置策略。
- -1:使用默认的自适应 B 帧放置策略。
- 0:可能采用某种固定的 B 帧放置策略。
- 1:采用更灵活的自适应 B 帧放置策略,根据视频内容动态调整 B 帧的位置。
-extbrc
- 参数类型:
<int>
- 取值范围: -1 到 1
- 默认值: -1
描述:扩展比特率控制。该参数决定了编码器使用的比特率控制策略。
- -1:使用默认的比特率控制策略。
- 0:可能采用某种基本的比特率控制策略。
- 1:采用扩展的比特率控制策略,能更精细地控制比特率。
-low_delay_brc
- 参数类型:
<boolean>
- 取值范围:
true
、false
或auto
- 默认值:
auto
- 描述:允许严格遵守平均帧大小。设置为
true
时,编码器会严格控制每帧的大小接近平均帧大小;设置为false
则不进行严格控制;auto
会根据系统情况自动决定。
-max_frame_size
- 参数类型:
<int>
- 取值范围: -1 到
INT_MAX
- 默认值: -1
- 描述:编码后帧的最大字节大小。设置为 -1 表示不限制帧的大小;设置为一个具体的正值时,编码器会确保编码后的帧大小不超过该值。
-max_frame_size_i
- 参数类型:
<int>
- 取值范围: -1 到
INT_MAX
- 默认值: -1
- 描述:编码后 I 帧的最大字节大小。设置为 -1 表示不限制 I 帧的大小;设置为一个具体的正值时,编码器会确保编码后的 I 帧大小不超过该值。
-max_frame_size_p
- 参数类型:
<int>
- 取值范围: -1 到
INT_MAX
- 默认值: -1
- 描述:编码后 P 帧的最大字节大小。设置为 -1 表示不限制 P 帧的大小;设置为一个具体的正值时,编码器会确保编码后的 P 帧大小不超过该值。
-profile
- 参数类型:
<int>
- 取值范围:0 到
INT_MAX
- 默认值:
unknown
描述:编码配置文件。不同的取值对应不同的编码特性和兼容性。
unknown
(值为 0):使用默认的、未知的编码配置文件。main
(值为 1):使用主编码配置文件,通常提供了较好的兼容性和一定的编码质量。
-tile_cols
- 参数类型:
<int>
- 取值范围:0 到 65535
- 默认值:0
- 描述:分块编码的列数。设置为 0 表示不进行分块编码;设置为一个正整数时,编码器会将视频帧按列进行分块编码,有助于并行处理和提高编码效率。
-tile_rows
- 参数类型:
<int>
- 取值范围:0 到 65535
- 默认值:0
- 描述:分块编码的行数。设置为 0 表示不进行分块编码;设置为一个正整数时,编码器会将视频帧按行进行分块编码,有助于并行处理和提高编码效率。
-look_ahead_depth
- 参数类型:
<int>
- 取值范围:0 到 100
- 默认值:0
- 描述:前瞻帧数深度。当
extbrc
选项启用时可用。该参数决定了编码器在编码当前帧时可以向前查看的帧数,设置为 0 表示不进行前瞻;设置为一个正整数时,编码器可以根据后续帧的信息来优化当前帧的编码。
Nvdia
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv h264_cuvid) (encoders: libx264 libx264rgb h264_amf h264_mf h264_nvenc h264_qsv)
DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv hevc_cuvid) (encoders: libx265 hevc_amf hevc_mf hevc_nvenc hevc_qsv)
带 nvenc 的就是 Nvdia 显卡支持的硬件编解码器。
这个命令自动选择硬件解码器。用Nvdia显卡转为 H265, 分辨率不变,音频转换为 AAC 128Kbps,质量参数 31 。ffmpeg -y -hwaccel auto -hwaccel_output_format auto -i "转换前.mp4" -c:v hevc_nvenc -c:a aac -b:a 128k -cq 31 "转换后.mp4"
H264 转 H264 720P,编码和解码都用 Nvdia 独立显卡。音频编码 AAC 128Kbps, 质量参数 35。高度限制为720P。ffmpeg -c:v h264_cuvid -i "转换前.mp4" -c:v h264_nvenc -filter:v scale=-1:720 -c:a aac -b:a 128k -cq 35 "转换前.mp4"
H264 转 H265,分辨率不变,编码和解码都用 Nvdia 独立显卡,音频编码 AAC 128Kbps,质量参数 31。ffmpeg -c:v h264_cuvid -i "源文件.mp4" -c:v hevc_nvenc -c:a aac -b:a 128k -cq 31 "转码后.mp4"
可以看到 CPU 没怎么用,GPU 占满了。GTX 1650S 转码 1080P 的速度大约 380 fps。
参考链接
- Intel
- hevc_qsv 编码器可选参数
- -async_depth
- -preset
- -forced_idr
- -low_power
- -rdo
- -max_frame_size
- -max_frame_size_i
- -max_frame_size_p
- -max_slice_size
- -mbbrc
- -extbrc
- -p_strategy
- -b_strategy
- -dblk_idc
- -low_delay_brc
- -max_qp_i
- -min_qp_i
- -max_qp_p
- -min_qp_p
- -max_qp_b
- -min_qp_b
- -adaptive_i
- -adaptive_b
- -scenario
- -avbr_accuracy
- -avbr_convergence
- -skip_frame
- -dual_gfx
- -idr_interval
- -load_plugin
- -load_plugins
- -look_ahead_depth
- -profile
- -tier
- -gpb
- -tile_cols
- -tile_rows
- -recovery_point_sei
- -aud
- -pic_timing_sei
- -transform_skip
- -int_ref_type
- -int_ref_cycle_size
- -int_ref_qp_delta
- -int_ref_cycle_dist
- av1_qsv 编码器可选参数
- hevc_qsv 编码器可选参数
- Nvdia
- 参考链接
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。