如何调整FFmpeg drawtext滤镜,让文字从中心/右侧开始左移滚动
解决FFmpeg文字从中心/右侧开始滚动的问题
我看了你的需求,当前命令里的x=-200*t确实会让文字从左侧边缘开始向左移动,导致开头内容直接移出视野。下面给你两种调整方案,分别实现从右侧开始滚动和从中心开始滚动的效果:
方案1:文字从右侧开始,向左滚动(推荐,确保开头文字完全进入视野)
修改后的FFmpeg命令如下:
echo shell_exec('ffmpeg -loop 1 -i slide2.jpg -vf scale=-2:1080,drawtext="textfile=text.txt:expansion=normal:fontfile=FreeSerif.otf: y=h-line_h-20:x=w + 100 - 200*t: fontcolor=white: fontsize=50" -pix_fmt yuv420p -t '.$words_count.' -movflags +faststart textover10.mp4 -report');
参数解释:
x=w + 100 - 200*t:这里的w代表视频宽度,100是额外的缓冲距离(避免文字一开始就贴在边缘)。当t=0时,文字位于视频右侧100像素的位置,随着时间t增加,x值逐渐减小,文字就会平滑向左滚动,完整进入视野后再慢慢移出左侧。- 你可以根据需要调整
200这个速度值(数字越大滚动越快),或者修改100来调整文字初始位置的缓冲距离。
方案2:文字从视频中心开始,向左滚动
如果希望文字从中心位置出发向左滚动,用这个命令:
echo shell_exec('ffmpeg -loop 1 -i slide2.jpg -vf scale=-2:1080,drawtext="textfile=text.txt:expansion=normal:fontfile=FreeSerif.otf: y=h-line_h-20:x=(w - text_w)/2 - 200*t: fontcolor=white: fontsize=50" -pix_fmt yuv420p -t '.$words_count.' -movflags +faststart textover10.mp4 -report');
参数解释:
x=(w - text_w)/2 - 200*t:(w - text_w)/2会自动计算出文字在视频水平居中的位置,当t=0时文字刚好在中心,之后随着t增加,x值减小,文字向左滚动。- 同样可以调整
200来改变滚动速度。
额外提示:
- 如果你的
text.txt里是多行文字,可能需要调整y参数或者添加line_spacing来优化垂直位置。 - 可以加上
shadowcolor=black:shadowx=2:shadowy=2给文字加阴影,提升在背景图上的可读性。
内容的提问来源于stack exchange,提问作者Femzy




