You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用FFmpeg将两张图片(最后一帧与叠加图)制作成5秒片尾滚动效果

如何使用FFmpeg将两张图片(最后一帧与叠加图)制作成5秒片尾滚动效果

我来帮你完善这个FFmpeg命令,刚好能实现你想要的所有效果——底图从彩色渐变到灰度,同时模糊程度随时间增强,叠加图则慢慢淡入并保持彩色,全程刚好5秒。

先给你完整的可直接运行的命令(注意替换frame.pngoverlay.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

火山引擎 最新活动