![在 ffmpeg/drawtext 中从右向左滚动](https://linux22.com/image/1480602/%E5%9C%A8%20ffmpeg%2Fdrawtext%20%E4%B8%AD%E4%BB%8E%E5%8F%B3%E5%90%91%E5%B7%A6%E6%BB%9A%E5%8A%A8.png)
我已经成功使用了这个问题的答案: 使用 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))