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

使用squish()实现文本淡入淡出遇问题:淡入无效求排查

问题分析与解决方案

你对FFmpeg中squish()函数的行为理解有误,导致淡入表达式逻辑反转了。

先明确squish(x)的计算规则:

squish(x)会将输入值钳位在0到1之间:

  • 当x < 0时,返回0
  • 当0 ≤ x ≤ 1时,返回x本身
  • 当x > 1时,返回1

你的现有命令实际效果:

  1. 你认为正常的“淡出”命令:
ffplay -f lavfi -i color=#dddddd:s=640x480 -vf "drawtext='text=TEST:x=(w-text_w)/2:y=(h-text_h)/2:fontsize=200:alpha=squish(t-3)'"

实际是淡入效果:

  • 0-3秒:文本完全透明
  • 3-4秒:文本从透明逐渐变为完全显示
  • 4秒后:文本保持完全显示
  1. 你认为无效的“淡入”命令:
ffplay -f lavfi -i color=#dddddd:s=640x480 -vf "drawtext='text=TEST:x=(w-text_w)/2:y=(h-text_h)/2:fontsize=200:alpha=1-squish(t-3)'"

实际是淡出效果:

  • 0-3秒:文本完全显示
  • 3-4秒:文本从完全显示逐渐变为透明
  • 4秒后:文本保持完全透明

正确的淡入淡出命令:

1. 0秒开始,3秒内完成淡入(文本从透明到显示):

ffplay -f lavfi -i color=#dddddd:s=640x480 -vf "drawtext='text=TEST:x=(w-text_w)/2:y=(h-text_h)/2:fontsize=200:alpha=squish(t/3)'"

效果:

  • 0-3秒:alpha从0→1,文本逐渐显现
  • 3秒后:alpha保持1,文本完全显示

2. 3秒开始,1秒内完成淡出(文本从显示到透明):

ffplay -f lavfi -i color=#dddddd:s=640x480 -vf "drawtext='text=TEST:x=(w-text_w)/2:y=(h-text_h)/2:fontsize=200:alpha=1-squish(t-3)'"

(就是你之前的“淡入”命令,它本身是正常的淡出效果)

3. 3秒开始,1秒内完成淡入(文本从透明到显示):

ffplay -f lavfi -i color=#dddddd:s=640x480 -vf "drawtext='text=TEST:x=(w-text_w)/2:y=(h-text_h)/2:fontsize=200:alpha=squish(t-3)'"

(就是你之前的“淡出”命令,它本身是正常的淡入效果)

总结:

你没有操作错误,也不存在bug,只是对squish()函数的输出逻辑理解反了,导致淡入淡出的表达式写反了。

内容的提问来源于stack exchange,提问作者Alessandro U. Viretta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:23:18