如何用FFmpeg直接实现0.55秒间隔的纯色循环淡变10秒视频?
解决方案
核心思路
直接利用FFmpeg的滤镜链生成纯色源,通过fade或concat滤镜实现颜色循环切换/淡变,无需生成任何中间PNG文件。
方案1:硬切换(严格0.55秒间隔切换颜色)
如果需求是到点直接切换颜色(无过渡),用concat+loop滤镜实现,命令简洁高效:
-f lavfi -i "color=c=#FF0000:s=640x480:d=0.55,loop=loop=-1:size=1[hex1];color=c=#0000FF:s=640x480:d=0.55,loop=loop=-1:size=1[hex2];[hex1][hex2]concat=n=2:v=1:a=0,trim=duration=10" -c:v libx264 output.mp4
- 替换
#FF0000和#0000FF为你的目标十六进制颜色值 loop=-1让单帧无限循环,concat将两个循环流拼接成交替序列,trim裁剪到10秒时长
方案2:淡变过渡(每0.55秒完成一次颜色淡变)
如果需求是两个颜色之间平滑淡变(0.55秒完成一次淡入/淡出),用fade+overlay滤镜实现:
-f lavfi -i "color=c=#FF0000:s=640x480:d=10[bg];color=c=#0000FF:s=640x480:d=10[fg];[fg]fade=t=in:st=0:d=0.55,fade=t=out:st=0.55:d=0.55,fade=t=in:st=1.10:d=0.55,fade=t=out:st=1.65:d=0.55,fade=t=in:st=2.20:d=0.55,fade=t=out:st=2.75:d=0.55,fade=t=in:st=3.30:d=0.55,fade=t=out:st=3.85:d=0.55,fade=t=in:st=4.40:d=0.55,fade=t=out:st=4.95:d=0.55,fade=t=in:st=5.50:d=0.55,fade=t=out:st=6.05:d=0.55,fade=t=in:st=6.60:d=0.55,fade=t=out:st=7.15:d=0.55,fade=t=in:st=7.70:d=0.55,fade=t=out:st=8.25:d=0.55,fade=t=in:st=8.80:d=0.55,fade=t=out:st=9.35:d=0.55[fg_faded];[bg][fg_faded]overlay" -c:v libx264 -r 60 -t 10 output.mp4
color滤镜直接生成两种纯色背景流,时长10秒fade滤镜按0.55秒间隔设置淡入/淡出:t=in是淡入,st是起始时间,d是淡变时长overlay将带淡变效果的前景色叠加到背景色上-r 60设置60帧/秒保证时间精度,避免切换卡顿
优化说明
- 若需调整淡变时长,修改
fade滤镜的d参数即可(比如设为0.1秒实现快速淡变) - 颜色值支持十六进制(
#RRGGBB)或RGB数值(rgb(255,0,0))两种格式 - 输出格式可根据需求替换,比如改为
output.mkv或output.gif
内容的提问来源于stack exchange,提问作者iceget
相关产品推荐
相关产品推荐

