You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FFmpeg实现文本在指定Y轴范围内滚动?

实现FFmpeg文本在指定Y轴范围内滚动

可以实现,下面提供两种直接可用的方案:

方法一:直接修改drawtext的Y轴表达式

通过嵌套的if条件表达式,精准控制文本在指定时间段内仅在目标Y轴区间滚动,到达边界后立即移出画面。

假设你需要的滚动参数:

  • 起始位置(底部边界):y=400(距离原视频底部140像素)
  • 终止消失位置(顶部边界):y=100(距离原视频顶部100像素)
  • 滚动速度:40像素/秒
  • 延迟2秒开始滚动

对应的FFmpeg命令:

ffmpeg -i vid.mp4 -vf "drawtext=fontfile=tahoma.ttf:fontsize=20:fontcolor=green:x=(w-text_w)/2+20:y=if(lt(t\,2)\,400\,if(lt(t\,9.5)\,400-40*(t-2)\,-text_h)):textfile=scroll.txt:bordercolor=white:borderw=1" -c:v libx264 -y -preset ultrafast scrolling.mp4

表达式逻辑:

  • lt(t\,2)\,400:前2秒文本固定在y=400的位置
  • lt(t\,9.5)\,400-40*(t-2):2秒到9.5秒期间,文本以40像素/秒向上滚动(9.5=2+(400-100)/40,即滚动完300像素的耗时)
  • -text_h:超过9.5秒后,将文本位置设为负的文本高度,确保完全移出画面

方法二:透明视频合成法(更灵活)

先在透明背景视频上生成独立的滚动文本层,再叠加到原视频上,适合需要单独调整文本层的场景:

  1. 生成与原视频匹配的透明背景视频
# 先获取原视频时长
VIDEO_DURATION=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 vid.mp4)
# 创建带透明通道的背景视频
ffmpeg -f lavfi -i color=c=black@0:s=960x540:r=30:duration=$VIDEO_DURATION -c:v qtrle transparent_bg.mov
  1. 在透明视频上添加限定范围的滚动文本
ffmpeg -i transparent_bg.mov -vf "drawtext=fontfile=tahoma.ttf:fontsize=20:fontcolor=green:x=(w-text_w)/2+20:y=if(lt(t\,2)\,400\,if(lt(t\,9.5)\,400-40*(t-2)\,-text_h)):textfile=scroll.txt:bordercolor=white:borderw=1" -c:v qtrle scroll_text.mov
  1. 将文本层与原视频叠加
ffmpeg -i vid.mp4 -i scroll_text.mov -filter_complex "[0:v][1:v]overlay=0:0" -c:v libx264 -y -preset ultrafast final.mp4

调整说明

  • 可根据需求修改start_y(起始Y)、end_y(终止Y)、speed(滚动速度),并重新计算滚动结束时间(公式:2 + (start_y - end_y)/speed)
  • text_h是drawtext滤镜的内置变量,代表文本块高度,用-text_h能确保文本完全移出可见区域
  • 若原视频帧率不是30,需调整透明视频生成命令中的r参数

内容的提问来源于stack exchange,提问作者Yoav Mor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:40:51