先看看当前 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 编码器可选参数

码率控制方法按如下方式选择:

  1. 当指定了 global_quality(全局质量)时,将使用基于质量的模式。具体来说,这意味着:

    • 当同时设置了 qscale(量化参数)编解码器标志(即 ffmpeg-qscale 选项)时,使用 CQP(恒定量化参数)模式。
    • 当同时设置了 look_ahead(预分析)选项时,使用 LA_ICQ(带预分析的智能恒定质量)模式。
    • 否则,使用 ICQ(智能恒定质量)模式。对于 ICQ 模式,全局质量范围是 1 到 51,1 表示质量最佳。
  2. 否则,当使用 -b 选项指定了所需的平均码率时,将使用基于码率的模式:

    • 当指定了 look_ahead 选项时,使用 LA(带预分析的可变比特率)模式。
    • 当设置了 vcm 选项时,使用 VCM(视频会议模式)。
    • 当指定了 maxrate(最大码率)且其值等于平均码率时,使用 CBR(恒定比特率)模式。
    • 当指定了 maxrate,且其值高于平均码率时,使用 VBR(可变比特率)模式。
    • 当未指定 maxrate,且 avbr_accuracy(平均可变比特率精度)和 avbr_convergence(平均可变比特率收敛性)都设置为非零值时,使用 AVBR(平均可变比特率)模式。此模式在 Windows 系统上的 H264 和 HEVC 编码中可用。
  3. 否则,将使用默认的码率控制方法 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>
  • 取值范围truefalse
  • 默认值false
  • 描述:强制将 I 帧作为 IDR 帧。IDR 帧是特殊的 I 帧,可作为解码起始点,后续解码能独立于之前的帧。设为 true 可确保在需要时能从任意 IDR 帧开始解码,但会增加码率。

-low_power

  • 参数类型<boolean>
  • 取值范围truefalseauto
  • 默认值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>
  • 取值范围truefalseauto
  • 默认值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>
  • 取值范围truefalse
  • 默认值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>
  • 取值范围truefalse
  • 默认值false
  • 描述:插入访问单元分隔符 NAL。设为 true 会在比特流中插入访问单元分隔符,有助于解码时的同步。

-pic_timing_sei

  • 参数类型<boolean>
  • 取值范围truefalse
  • 默认值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>
  • 取值范围truefalse
  • 默认值false
  • 描述:强制将 I 帧作为 IDR 帧。IDR 帧是一种特殊的 I 帧,它可以作为解码的起始点,后续的解码可以独立于之前的帧。设置为 true 可以确保在需要时能从任意 IDR 帧开始解码,但会增加码率。

-low_power

  • 参数类型<boolean>
  • 取值范围truefalseauto
  • 默认值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>
  • 取值范围truefalseauto
  • 默认值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。
ffmpeg-transcode-speed.avif
taskmgr.avif

参考链接

  1. FFmpeg Codecs Documentation
  2. FFmpeg Hardware/QuickSync