小编jb_*_*ado的帖子

ffmpeg:使用 zmq 绘制文本淡入/淡出

ffmpeg 中有多种淡入淡出文本的方法。但我只找到了已知实际时间的解决方案。

\n\n

但是,当我不知道当前的运行时间并且想要淡入和淡出文本时,我该怎么办?

\n\n

假设我有一个无尽的流,我想使用zmqsend淡入文本。并且淡入淡出应该立即开始。为此,我的理解是,我需要将一些时间信息存储在变量中并用其进行计算。但是在 ffmpeg 表达式中存储变量是不可能的 - 对吗?

\n\n

为了测试目的,这里有一个播放实例:

\n\n
ffplay -dumpgraph 1 -f lavfi "color=s=512x288:c=black,zmq,drawtext=text=\'\'"\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了使用 zmq 添加一些文本,我现在可以运行:

\n\n
echo Parsed_drawtext_2 reinit text="Hello\\ World,\\ what\xe2\x80\x99s\\ up?" | zmqsend\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者,如果我知道运行时间,10 秒后我希望文本淡入:

\n\n
"text=\'Hello\\ World\':fontsize=:fontcolor=ffffff:alpha=\'if(lt(t,10),0,if(lt(t,11),(t-10)/1,if(lt(t,16),1,if(lt(t,17),(1-(t-16))/1,0))))\'"\n
Run Code Online (Sandbox Code Playgroud)\n\n

我现在的目标是拥有一个可以发送的表达式,以便 ffmpeg 开始淡入文本并在一定时间后淡出。

\n\n

就像是:

\n\n
now=t,if(lt(t,now+10),0,if(lt(t,now+11),(t-(now+10))/1,if(lt(t,now+16),1,if(lt(t,now+17),(1-(t-(now+16)))/1,0))))\n
Run Code Online (Sandbox Code Playgroud)\n\n

有没有办法在表达式中存储变量,或者有其他方法来实现这一点?

\n

ffmpeg drawtext

1
推荐指数
1
解决办法
791
查看次数

标签 统计

drawtext ×1

ffmpeg ×1