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

添加淡入效果后FFmpeg无法叠加PNG至视频问题求助

FFmpeg添加Logo淡入效果失败的解决思路

问题背景

以下FFmpeg代码可在40秒视频的第35秒开始叠加PNG Logo至视频结束,素材和图片均有效:

ffmpeg -i out.mp4 -i "C:\Users\josesevilla\Pictures\Logo_OAG_fondo_transparente.png" -filter_complex "[1:v] scale=iw*0.2:ih*0.2 [logo];[0:v][logo] overlay=(main_w - overlay_w)/2: main_h*2/3:enable='gte(t,35)'" outoverlay4.mp4

但尝试添加淡入效果时,以下代码导致Logo完全不显示:

ffmpeg -i out.mp4 -i "C:\Users\josesevilla\Pictures\Logo_OAG_fondo_transparente.png" -filter_complex "[1:v] scale=iw*0.2:ih*0.2, fade=t=in:st=35:d=3:alpha=1 [logo];[0:v][logo] overlay=(main_w - overlay_w)/2: main_h*2/3-overlay_h/2:enable='between(t,35,40)'" outoverlay5.mp4

尝试过enable='gte()'、enable='between()'等参数组合,调整触发时间均无效;仅将alpha设为0时能看到对应时间段的轮廓,但淡入效果仍不生效。参考其他方案(如下方代码)后问题仍未解决:

ffmpeg -i out.mp4 -loop 1 -t 3 -i "C:\Users\josesevilla\Pictures\Logo_OAG_fondo_transparente.png" -filter_complex "[1:v] scale=iw*0.2:ih*0.2,fade=t=in:st=5:d=3:alpha=1[logo];[0:v][logo]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2"  output5.mp4

使用的FFmpeg版本:
ffmpeg version 2024-05-13-git-37db0454e4-essentials_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers built with gcc 13.2.0 (Rev5, Built by MSYS2 project)

解决思路

核心原因

PNG作为单帧输入,默认仅持续1帧时长,fade滤镜的st=35是相对于PNG自身的时间轴,而非主视频时间轴。主视频播放到35秒时,PNG流已经结束,因此滤镜无法作用,Logo自然不显示。

修正方案1:为PNG添加循环播放

在PNG输入参数中加入-loop 1,让PNG无限循环播放,使其时间轴与主视频对齐,这样fade滤镜的时间参数就能对应主视频的时间点:

ffmpeg -i out.mp4 -loop 1 -i "C:\Users\josesevilla\Pictures\Logo_OAG_fondo_transparente.png" -filter_complex "[1:v] scale=iw*0.2:ih*0.2, fade=t=in:st=35:d=3:alpha=1 [logo]; [0:v][logo] overlay=(main_w - overlay_w)/2:main_h*2/3-overlay_h/2:enable='gte(t,35)'" outoverlay5.mp4

说明:-loop 1让PNG持续输出帧,主视频35秒时PNG流仍在播放,fade滤镜可正常修改其alpha通道,实现3秒淡入效果。

修正方案2:直接通过overlay滤镜控制alpha值

无需使用fade滤镜,通过overlay的alpha参数结合时间表达式,直接控制Logo的透明度变化:

ffmpeg -i out.mp4 -i "C:\Users\josesevilla\Pictures\Logo_OAG_fondo_transparente.png" -filter_complex "[1:v] scale=iw*0.2:ih*0.2 [logo]; [0:v][logo] overlay=(main_w - overlay_w)/2:main_h*2/3-overlay_h/2:enable='gte(t,35)' :alpha='if(gte(t,35), if(lte(t,38), (t-35)/3, 1), 0)'" outoverlay5.mp4

说明:表达式逻辑为:

  • 35秒前:alpha=0(不显示)
  • 35-38秒:alpha从0线性增长到1(淡入过程)
  • 38秒后:alpha=1(完全显示)

额外注意事项

  • 确认PNG图片本身带有透明通道(原代码可正常叠加,此条件已满足)
  • 检查命令语法,避免多余符号(如原问题中第一个代码末尾的.)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:20:07