如何使用FFmpeg将两张图片(最后一帧与叠加图)制作成5秒片尾滚动效果
如何使用FFmpeg将两张图片(最后一帧与叠加图)制作成5秒片尾滚动效果
我来帮你完善这个FFmpeg命令,刚好能实现你想要的所有效果——底图从彩色渐变到灰度,同时模糊程度随时间增强,叠加图则慢慢淡入并保持彩色,全程刚好5秒。
先给你完整的可直接运行的命令(注意替换frame.png和overlay.png为你的实际图片路径):
ffmpeg -f lavfi \ -i anullsrc=channel_layout=stereo:sample_rate=44100 \ -loop 1 -i "frame.png" \ -loop 1 -i "overlay.png" \ -vf "[1:v]scale=1280:720[bg]; \ [bg]colorchannelmixer=rr='1-0.701*t/5':rg='0-0.413*t/5':rb='0-0.886*t/5':gr='0-0.701*t/5':gg='1-0.413*t/5':gb='0-0.886*t/5':br='0-0.701*t/5':bg='0-0.413*t/5':bb='1-0.886*t/5',gblur=sigma='5*t/5'[bg_processed]; \ [2:v]scale=1280:720,fade=t=in:st=0:d=5[overlay_processed]; \ [bg_processed][overlay_processed]overlay[out]" \ -pix_fmt yuv420p -t 5 -c:v libx264 -crf 23 end-roll.mp4
接下来给你拆解每个部分的作用,方便你按需调整:
基础输入部分
-f lavfi -i anullsrc=...:生成静音的立体声轨,避免输出视频没有音频轨道,你原来的写法是对的。-loop 1 -i "frame.png"和-loop 1 -i "overlay.png":让两张图片循环播放,这样才能持续5秒的时长。
底图(frame.png)的处理
scale=1280:720:先把底图缩到目标分辨率,和你的需求一致。colorchannelmixer=...:实现从彩色到灰度的渐变。这里用了时间变量t(当前播放的秒数),总时长5秒,所以t/5会从0线性变化到1。通过调整RGB通道的混合系数,让彩色逐渐过渡到标准灰度(灰度系数为R=0.299, G=0.587, B=0.114)。gblur=sigma='5*t/5':实现模糊强度随时间增强。sigma值从0(无模糊)线性增加到5(中等模糊),你可以把5改成更大的数来增强最终模糊效果。
叠加图(overlay.png)的处理
scale=1280:720:同样缩到目标分辨率,确保和底图匹配。fade=t=in:st=0:d=5:让叠加图从第0秒开始,用5秒时间完全淡入,刚好覆盖整个片尾时长。
叠加与输出
[bg_processed][overlay_processed]overlay:把处理好的叠加图放在底图上面,叠加图保持彩色,底图则同步渐变灰度和模糊。-c:v libx264 -crf 23:指定用H.264编码器输出,crf=23是默认的质量参数,数值越小画质越好,你可以根据需要调整。
另外你提到的那篇处理视频模糊的内容,它是针对动态视频帧的,而我们这里是用单张图片循环,再通过时间变量t来控制滤镜参数随时间变化,本质思路是相通的,只是把视频帧换成了循环的图片而已。
备注:内容来源于stack exchange,提问作者bilogic




