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

ffmpeg overlay滤镜y轴rand表达式报错,如何正确设置?

解决FFmpeg overlay滤镜中rand()函数报错问题

问题背景

使用FFmpeg的overlay滤镜为视频添加滚动水印时,x轴表达式可正常运行:

ffmpeg -hide_banner -i HLS_540.ts -i out.png -filter_complex "[0:v][1:v]overlay=x='-w+400+100*mod(t\,(W+w-400)/100)':y=250" out.mp4

但为y轴设置包含rand()的表达式时出现报错,执行命令:

ffmpeg -hide_banner -i HLS_540.ts -i out.png -filter_complex "[0:v][1:v]overlay=x='-w+400+100*mod(t\,(W+w-400)/100)':y='if(eq(mod(t\,5)\,0)\,rand(0\,100)\,y)'" out.mp4

报错信息:

[Parsed_overlay_0 @ 000002438ba6d880] [Eval @ 000000cf5a3fe2e0] Unknown function in 'rand(0,100),y)'
[Parsed_overlay_0 @ 000002438ba6d880] Error when evaluating the expression 'if(eq(mod(t,5),0),rand(0,100),y)' for y
[Parsed_overlay_0 @ 000002438ba6d880] Failed to configure input pad on Parsed_overlay_0

而在ffplay的drawtext滤镜中使用类似rand()表达式可正常运行:

ffplay -f lavfi -i "color=color=yellow" -vf "drawtext=text='s':x=if(eq(mod(t\,5)\,0)\,rand(0\,(W-tw))\,x+0.03*mod(t\,5)):y=if(eq(mod(t\,5)\,0)\,rand(0\,(H-th))\,y)"

环境:Windows 11、Git-Bash,FFmpeg版本N-104863-g6cf55b9da2-20211213

报错原因

overlay滤镜的表达式求值器默认未启用随机函数支持,而drawtext滤镜自身集成了对rand()的支持,因此会出现前者报错后者正常的差异。

解决方法

在overlay滤镜中添加enable_rand_expr=1参数,启用随机函数支持。修改后的命令如下:

ffmpeg -hide_banner -i HLS_540.ts -i out.png -filter_complex "[0:v][1:v]overlay=x='-w+400+100*mod(t\,(W+w-400)/100)':y='if(eq(mod(t\,5)\,0)\,rand(0\,100)\,y)':enable_rand_expr=1" out.mp4

说明

  • enable_rand_expr=1:开启overlay滤镜的随机表达式支持,让rand()函数可以被正常解析
  • 保留原有的x轴滚动逻辑和y轴的随机位置切换逻辑,确保水印在x轴滚动的同时,每5秒随机切换一次y轴位置

内容的提问来源于stack exchange,提问作者LF-DevJourney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:20:07