如何使用 mpv 的 amd_frc 滤镜启用 AMD FRC 帧率转换?
【免费下载链接】mpv🎥 Command line media player项目地址: https://gitcode.com/GitHub_Trending/mp/mpv
想在 AMD 显卡上把低帧率视频(如 24 Hz 素材)转换出更高帧率的输出时,mpv 提供了一个 mpv 内置的视频滤镜amf_frc(AMD Frame Rate Conversion,基于 AMD AMF 的 FRC 组件)。本文只覆盖这个任务:把amf_frc挂进--vf滤镜链,让它正确收到 D3D11 格式的输入帧,并确认可用地验证它已经生效。
先明确一个命名问题:这个滤镜在项目文档 vf.rst 中的名字是amf_frc,接口变更记录 vf-amd-frc.txt 写的也是add --vf=amf_frc。它对应的就是标题所说的 AMD FRC 帧率转换功能,但命令行里必须写--vf=amf_frc,而不是amd_frc。
前提条件
按 vf.rst 的说明,这个滤镜有两个硬性要求:
- AMD 硬件和驱动:需要支持 AMF FRC 的 AMD 硬件及驱动,mpv 运行时通过加载 AMF 动态库来调用它。
- 输入必须是 D3D11 格式:文档写明 “AMF FRC only supports D3D11 input currently”,也就是说视频帧必须已经处于 D3D11 硬件格式上。文档给出的两条做法是:
- 使用
--hwdec=d3d11va硬件解码,让解码输出直接是 D3D11 帧; - 或用
--vf-pre=format=d3d11把软解帧上传到 D3D11。
- 使用
帧率转换的效果是把输入帧率翻倍:滤镜通过在相邻帧之间生成中间帧实现,例如 24 Hz 输入得到 48 Hz 输出。它不会按显示器刷新率自动调整倍数。
基本启用方式
最短可行路径:用--vf-pre=format=d3d11把帧上传到 D3D11,再把amf_frc追加到滤镜链末尾:
mpv video.mkv --vf-pre=format=d3d11 --vf=amf_frc--vf-pre=format=d3d11保证进入amf_frc的帧是 D3D11 格式,满足滤镜的输入要求;--vf=amf_frc启用滤镜,不传任何参数时全部使用默认值。
如果你本来就在用 D3D11 硬件解码,可以省掉format=d3d11上传步骤:
mpv video.mkv --hwdec=d3d11va --vf=amf_frc此时帧从解码器出来就已经在 D3D11 上,滤镜链只需要amf_frc。
配置滤镜参数
amf_frc的参数按--vf的通用规则书写:参数名用=,多个参数用:分隔(注意不是逗号,逗号是分隔下一个滤镜的)。
mpv video.mkv --hwdec=d3d11va --d3d11va-zero-copy \ --vf=amf_frc:profile=high:mv-search=performance:indicator=yes文档中给出的参数及其默认值:
| 参数 | 默认值 | 文档说明 |
|---|---|---|
profile | auto | 画质档位。auto按输入分辨率选档:1440p 及以下用high,1440p 及以上用super;low分层运动搜索层数更少,仅建议极分辨率场景;high建议用于 1440p 及以下;super运动搜索层数更多,建议用于 1440p 及以上 |
mv-search | native | 运动矢量搜索模式。native在源图全分辨率上搜索;performance在缩小后的图上搜索,文档建议 APU 或低端 GPU 使用 |
fallback | no | 插值置信度过低时的回退行为。设为 yes 时回退到简单帧混合;不设置则重复最后一帧 |
indicator | no | 是否在画面左上角显示 FRC indicator 方框 |
future-frame | yes | 启用时插值计算会额外使用下一帧信息,代价是引入一帧时间的延迟 |
需要说明的组合关系:
- 文档提到
--d3d11va-zero-copy“is also recommended for better performance”,它只在--hwdec=d3d11va路径下有意义;软解 +format=d3d11上传的路径不涉及 zero-copy。 indicator=yes主要用于确认滤镜在工作,见下一节。
确认滤镜已生效
文档没有给出固定的日志字符串,但可以按两条路径验证:
运行时指示器(文档明确给出的开关):加
indicator=yes后,画面左上角会显示 FRC indicator 方框:mpv video.mkv --vf-pre=format=d3d11 --vf=amf_frc:indicator=yes看到指示方框说明滤镜已挂载并参与帧转换;看不到则说明滤镜链没建起来(常见原因:未满足 D3D11 输入要求、驱动/AMF 库加载失败,此时 mpv 会在创建滤镜时报错,终端日志可见)。
确认滤镜名存在:
--vf=<filter>=help会打印某个滤镜的参数名和取值范围(见 vf.rst),--vf=help可以列出当前编译版本中可用的全部视频滤镜。如果你的 mpv 是较老版本,列表中找不到amf_frc,说明该滤镜尚未包含(它由 vf-amd-frc.txt 记录的接口变更新增),需要更新 mpv 构建。
限制与边界
- 输入只支持 D3D11,没有 D3D11 帧时必须先经
--hwdec=d3d11va或--vf-pre=format=d3d11处理。 - 输出帧率固定为输入的两倍,不是“对齐显示器刷新率”。
- 依赖 AMF 组件:加载 AMF 库失败时滤镜无法创建,表现为启动报错而不是静默失效(AMF 库由 AMD 驱动提供)。
- 需要逐帧参数调优时,可用
--vf=amf_frc=help打印完整参数名与取值范围;若只想临时对比效果,也可以按 vf.rst 的通用规则给滤镜加@label前缀后在运行时用vf命令切换,本文不再展开。
参考来源:DOCS/man/vf.rst(amf_frc条目及--vf通用语法)、DOCS/interface-changes/vf-amd-frc.txt、filters/user_filters.c(amf_frc注册入口)、video/filter/vf_amf.c(AMF FRC 组件实现)。
【免费下载链接】mpv🎥 Command line media player项目地址: https://gitcode.com/GitHub_Trending/mp/mpv
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考