系统准备

sudo pacman -S kdenlive ffmpeg libva-utils libva-mesa-driver amdgpu_top
vainfo | grep -E "H264|HEVC|AV1"
sudo cat /sys/class/drm/renderD128/device/uevent | grep PCI_SLOT_NAME
lspci -nn | grep -E "VGA|3D|Display"

参数

H.265 / HEVC

Windows (AMF)

f=mp4 vcodec=hevc_amf rc=cqp qp_i=20 qp_p=20 qp_b=20 g=75 bf=2 acodec=aac ab=320k usage=transcoding quality=quality vprofile=main movflags=+faststart

Linux (VAAPI)

f=mp4 vcodec=hevc_vaapi vaapi_device=/dev/dri/renderD128 qp=20 g=75 bf=2 acodec=aac ab=320k vprofile=main movflags=+faststart

AV1

Windows (AMF)

f=mp4 vcodec=av1_amf vprofile=main rc=cqp qp=24 g=75 acodec=aac ab=320k usage=transcoding quality=quality movflags=+faststart

Linux (VAAPI)

f=mp4 vcodec=av1_vaapi vaapi_device=/dev/dri/renderD128 qp=24 g=75 acodec=aac ab=320k movflags=+faststart

参数解析

共通参数 (Windows & Linux 通用)

无论使用哪种操作系统,这些参数定义了视频的基础结构、画质策略和音频标准。

容器与音频

  • f=mp4 (封装格式)

    MP4 是兼容性之王。虽然 MKV 更灵活,但 MP4 能确保在 Windows、Mac、Android 和 iOS 上直接播放。

  • acodec=aac (音频编码器)

    使用 AAC (Advanced Audio Coding),MP4 的标准音频格式。

  • ab=320k (音频码率)

    设置为 320 kbps。这是 AAC 的透明音质标准,接近无损听感,且体积占用极小。

帧结构与 GOP

  • g=75 (关键帧间隔 / GOP Size)

    计算逻辑: 针对 25 fps 项目,设置 75 表示 3秒 一个关键帧 (\(75 \div 25 = 3\))。

    作用: 3秒的间隔保证了拖动进度条时的流畅度,同时比短 GOP (如 1秒) 有更高的压缩效率。

  • bf=2 (B 帧数量 - 仅 H.265/H.264)

    含义: 在参考帧之间插入 2 个双向预测帧。

    重要性: AMD RDNA3 架构完美支持 HEVC B 帧。开启后,同画质下体积减少约 10%-20%。

    注意: AV1 目前通常由驱动自动管理 B 帧,一般不手动指定。

  • movflags=+faststart (Web 优化)

    将 MP4 索引移动到文件头。实现微信、浏览器中的视频“秒开” (边下边播)。

画质基准 (Rate Control)

  • qp=24 / qp=20 (量化参数基准)

    AV1: 推荐 24。AV1 压缩率极高,24 已是视觉无损。

    H.265: 推荐 20。H.265 效率略低于 AV1,需降低 QP 值以维持同等画质。

  • vprofile=main (编码规格)

    显式指定使用 Main Profile (8-bit),确保最大兼容性。解决 Kdenlive 参数命名冲突的标准写法。

Windows 专用参数 (AMF 引擎)

这些参数专门调用 AMD 官方闭源驱动中的 Advanced Media Framework (AMF) 功能。

核心编码器

  • vcodec=av1_amf / vcodec=hevc_amf

    调用 Windows 驱动内置的硬件编码接口。

AMF 独占优化

  • rc=cqp (码率控制模式)

    显式声明使用“恒定量化参数”模式。

  • qp_i= / qp_p= / qp_b= (精细化质控制 - 仅 H.265)

    作用: 在 AMF 中,分别指定 I帧、P帧、B帧的压缩量。

    建议: 全部设为 20,防止画面在动态变化时出现“呼吸效应”(清晰度波动)。

  • usage=transcoding (场景提示)

    告诉显卡当前任务是“转码/导出”。显卡会分配更多显存进行预读分析,优先保证画质而非低延迟。

  • quality=quality (算法预设)

    强制启用最高质量的编码算法 (相比 speed 档位)。

Linux 专用参数 (VAAPI 引擎)

这些参数调用 Linux 内核标准的 Video Acceleration API (VAAPI),配合 Mesa 开源驱动使用。

核心编码器

  • vcodec=av1_vaapi / vcodec=hevc_vaapi

    调用 Linux 原生硬件接口。不要在 Linux 下强行使用 _amf,除非安装了专业版闭源驱动。

VAAPI 独占配置

  • vaapi_device=/dev/dri/renderD128 (设备路径)

    必须项。明确告诉 FFmpeg 显卡在哪里。对于 7840HS 核显,通常是 renderD128。

  • qp=20 (简化的画质控制)

    VAAPI 的 CQP 模式比 AMF 智能,通常只需要指定一个全局 qp 值,驱动会自动计算 I/P/B 帧的权重,无需手动拆分。