ffmpeg 无间隙滚动文本

ffmpeg 无间隙滚动文本

我正在使用此命令在视频上滚动文本

"drawbox=y=ih-108:[email protected]:\
width=iw:height=48:t=fill, \
drawtext=textfile=file.txt: \ 
fontfile=OpenSans-Regular.ttf: \
y=h-line_h-65:\
x=w-mod(max(t-1.5\,0)*(w+tw)/18.5\, (w+tw)): \
fontcolor=white:fontsize=36" \

此滚动以有间隙的方式循环运行。当视频上的所有文本都滚动完后 [存在间隙],它会重新开始滚动。

我希望滚动能够连续运行而没有任何间隙,就像在这个视频中一样 - https://www.youtube.com/watch?v=Z0ZpLAgpghk

是否有其他过滤器可以实现这一点,或者我如何修改表达式x=以获得所需的输出?

答案1

您可以通过链接两个 drawtext 过滤器来实现这一点

"drawbox=y=ih-108:[email protected]:\
width=iw:height=48:t=fill, \
drawtext=textfile=file.txt: \ 
fontfile=OpenSans-Regular.ttf: \
y=h-line_h-65:\
x=w-mod(max(t-START_TIME_OFFSET\,0)*(SPEED)\, 2*(tw+MARGIN)): \
fontcolor=white:fontsize=36, \
drawtext=textfile=file.txt: \ 
fontfile=OpenSans-Regular.ttf: \
y=h-line_h-65:\
x=w-mod(max(t-(tw+MARGIN)/(SPEED)-START_TIME_OFFSET\,0)*(SPEED)\, 2*(tw+MARGIN)): \
fontcolor=white:fontsize=36"

START_TIME_OFFSET是文本出现的初始时间,例如1.5秒。
SPEED是每秒一个字符的滚动距离,例如100像素或宽度的 1/10,。w/10
MARGIN一次滚动的结束与下一次滚动的开始之间的距离,例如100像素或比例距离w/5

对于此方法,文本必须等于或宽于框架宽度。

相关内容