在 ffmpeg/drawtext 中从右向左滚动

在 ffmpeg/drawtext 中从右向左滚动

我已经成功使用了这个问题的答案: 使用 FFMPEG drawtext 过滤器从左到右循环擦除文本

但我需要将滚动方向从右改为左。我只是在尝试一些选项时遇到困难,所以希望这里有人能帮忙。

答案1

调整链接线程中的答案:

-vf "drawtext=text=string1:fontfile=foo.ttf:y=h-line_h-10:x=w-(t-4.5)*w/5.5:fontcolor=white:fontsize=40:shadowx=2:shadowy=2"

滚动将从t= 4.5 秒开始,并且字符将在5.5几秒内滚动整个宽度。

编辑

此曲循环播放。

-vf "drawtext=text='abcd':fontfile=bpmono.ttf:y=h-line_h-10:x=w-mod(max(t-4.5\,0)*(w+tw)/5.5\,(w+tw)):fontcolor=ffcc00:fontsize=40:shadowx=2:shadowy=2"

答案2

对我来说这是可行的(从 Windows 上的文本文件读取文本):

-vf "drawtext=fontcolor=white:fontsize=40:fontfile='C\:\\Windows\\Fonts\\arial.ttf':textfile='C\:\\text.txt':reload=1:y=h-line_h-52:x=w-(mod(4*n\,w+tw)-tw/40)"

相同,但带有背景框:

-vf "drawtext=fontcolor=white:fontsize=40:fontfile='C\:\\Windows\\Fonts\\arial.ttf':textfile='C\:\\text.txt':reload=1:y=h-line_h-52:x=w-(mod(4*n\,w+tw)-tw/40),drawbox=y=ih-88:[email protected]:width=iw:height=48:t=max"

:D

答案3

x=if(eq(t\,0)\,w\,if(lt(x\,(0-tw))\,w\,x-4))

这全是关于设置 x 的值。我喜欢 Mulvya 的答案,如果您希望文本在固定的秒数内滚动视频帧,这个答案很好。然而,无论视频的宽度如何,我都希望速度恒定。

我开始if(lt(x,(0-tw)),w,x-1)

这个想法是从视频宽度 w 开始,然后不断减少 x 的值,直到它小于 0-text_w。此时文本消失。

但它不起作用。x 的默认值是 0,我需要在开始时将其设置为 w。所以我想到了这个 -

if(eq(t,0),w,if(lt(x,(0-tw)),w,x-1))

x-1 对我来说太慢了,所以我把它改成了 x-4。

在命令中使用 , 之前,请先退出x=if(eq(t\,0)\,w\,if(lt(x\,(0-tw))\,w\,x-4))

与此相反,从左边开始,然后向右走

if(eq(t,0),(0-tw),if(gt(x,(w+tw)),(0-tw),x+4))

相关内容