You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FFmpeg中用libplacebo调用Anime4K实现纯超分及GLSL改帧率?

FFmpeg中使用GLSL着色器(如Anime4K)的问题解答

一、关于GLSL算法修改帧率的说明

首先明确:Anime4K是超分辨率/画质增强算法,不负责帧率转换。帧率转换属于时间轴处理(如帧插值补帧),而GLSL着色器大多专注于空间域的像素处理。

如果需要用GLSL实现帧率转换(如补帧),需使用专门的时间域GLSL着色器(部分补帧算法有GLSL版本),但FFmpeg的libplacebo滤镜对时间域Shader的支持有限——这类Shader需要访问多帧数据,实现起来较为复杂。目前更实用的方式是:先通过FFmpeg的帧插值滤镜(如minterpolate)生成目标帧率的帧,再用libplacebo加载GLSL着色器做画质增强;若有支持时间域的GLSL Shader,需确保libplacebo配置正确的帧缓存。

二、Anime4K超分的正确调用方式

1. 为何不加w/h参数分辨率不变?

直接使用libplacebo=custom_shader_path=Anime4K_Upscale_CNN_x2_VL.glsl时,Anime4K的x2 shader确实会输出2倍分辨率,但libplacebo默认会将输出画面缩回到输入分辨率,因此最终视频尺寸不变。GPU占用上升是因为Shader确实在运行,只是结果被缩放回原尺寸了。

2. 是否会先运行libplacebo内置超分再执行Anime4K?

不会。只要你没有额外配置libplacebo的内置缩放/超分参数(如scale相关选项),指定custom_shader_path后,滤镜只会运行你提供的GLSL着色器,不会触发内置超分算法。你看到的超分效果就是Anime4K直接输出的结果。

3. 修正你的Python命令

你的命令中filter_complex里的libplacebo参数存在重复错误(custom_shader_path=libplacebo=custom_shader_path=...),正确的命令如下:

[
    'ffmpeg -hide_banner',
    '-hwaccel', 'cuda',
    '-i', '"{input_ab_path}"',
    '-filter_complex',
    '"[0:v]libplacebo=w=iw*2:h=ih*2:custom_shader_path=shaders/Anime4K_Upscale_CNN_x2_VL.glsl,subtitles="{sub_file}":si=0[out]"',
    '-map', '0:a',
    '-map', '"[out]"',
    '-c:v', 'libsvtav1',
    '-svtav1-params', 'scm=2:scd=1:enable-overlays=1:enable-tf=0:tune=0:preset=7:crf=18',
    '-c:a', 'libvorbis',
    '-qscale:a', '10',
    '-pix_fmt', 'yuv420p10le',
    '-y', '"{output_ab_path}"'
]

这样配置后,libplacebo会按照Anime4K shader的输出尺寸(2倍原分辨率)输出画面,完全由Anime4K完成超分,无内置算法干扰。

补充说明

  • 若需同时处理帧率转换和Anime4K超分,建议先完成帧率转换(如minterpolate=fps=60),再串联libplacebo加载Anime4K shader。
  • 确保FFmpeg已正确编译libplacebo支持,且GLSL shader文件路径正确(相对路径需对应FFmpeg运行的工作目录)。

内容的提问来源于stack exchange,提问作者Ironbox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:37:43