如何用FFMPEG实现类似CAPCUT的Grain(颗粒感)调节效果
如何用FFMPEG实现类似CAPCUT的Grain(颗粒感)调节效果
嘿,我刚好折腾过类似的需求,FFmpeg原生的滤镜组合完全可以模拟出CapCut那种自然的颗粒感,而且直接就能用到你的Node/Express项目里的Fluent-FFmpeg中!
核心思路:用noise滤镜模拟颗粒,配合辅助滤镜优化质感
CapCut的颗粒感不是单纯的粗暴噪点,是那种“清晰中带细腻质感”的效果,所以我们需要用noise滤镜生成颗粒,再搭配eq(画面微调)和unsharp(轻微锐化)来匹配那种质感。
基础FFmpeg命令示例
先给你一个直接能用的命令,参数可以根据你的需求调整:
ffmpeg -i input.mp4 -filter_complex "eq=contrast=1.05:brightness=0.02,noise=c0s=0.03:c0f=20:allf=t,unsharp=4:4:0.2" output.mp4
各参数的作用:
eq=contrast=1.05:brightness=0.02:微调对比度和亮度,让后续添加的颗粒更突出,不会被画面“吃掉”noise=c0s=0.03:c0f=20:allf=t:c0s=0.03:亮度通道的噪点强度,数值越大颗粒越明显(0.02-0.05是接近CapCut的常用范围)c0f=20:颗粒的动态更新帧率,数值越高颗粒变化越快,设为0就是静态颗粒allf=t:让噪点同时作用于亮度和色度通道,模拟胶片颗粒的自然感
unsharp=4:4:0.2:轻微锐化画面,避免颗粒导致的整体发糊,平衡出CapCut那种“清透+质感”的效果
适配Node/Express的Fluent-FFmpeg代码
如果你要在项目里用Fluent-FFmpeg,直接把滤镜数组传进去就行,代码示例如下:
const ffmpeg = require('fluent-ffmpeg'); // 处理视频添加颗粒感 ffmpeg('./input.mp4') .videoFilters([ // 先微调画面基础参数 'eq=contrast=1.05:brightness=0.02', // 核心颗粒滤镜,可按需调整参数 'noise=c0s=0.03:c0f=20:allf=t', // 轻微锐化平衡质感 'unsharp=4:4:0.2' ]) .save('./output.mp4') .on('end', () => { console.log('颗粒感效果添加完成啦!'); }) .on('error', (err) => { console.error('处理过程出错了:', err); });
自定义参数的小技巧
- 想要更细腻的细颗粒:把
c0s降到0.02,c0f提到25-30,颗粒变化更细腻 - 想要粗颗粒胶片感:把
c0s调到0.04-0.06,c0f降到10-15,颗粒更厚重 - 原视频噪点多?可以在最前面加一个轻微降噪:
noise=c0n=0.01,先压掉原生噪点再加我们的质感颗粒,效果会更干净
备注:内容来源于stack exchange,提问作者domicoder
相关产品推荐
相关产品推荐

