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

Android下FFmpeg单行滚动文字遇换行问题求解决方案

解决FFmpeg添加单行滚动长文本自动换行问题

问题出在FFmpeg的drawtext滤镜默认会对超出视频宽度的文本自动换行,要实现纯单行滚动,需要修改滤镜参数并处理文本内容:

关键修改点

  • 给drawtext添加text_wrap=0参数,强制禁用自动换行
  • 确保输入的文本字符串中没有手动换行符(比如\n),如果有需要预先替换为空

修改后的代码

更新addScrollingTextToVideo函数如下:

fun addScrollingTextToVideo(
    videoPath: String,
    text: String,
    fontPath: String,
    outputPath: String
): Array<String> {
    val inputs: ArrayList<String> = ArrayList()
    val scrollSpeed = 5
    val textSize = 40
    // 移除文本中的手动换行符,避免强制换行
    val singleLineText = text.replace("\n", "").replace("\r", "")

    inputs.apply {
        add("-i")
        add(videoPath)
        add("-vf")
        // 添加text_wrap=0禁用自动换行,确保文本始终单行
        add("drawtext=fontfile=$fontPath:text='$singleLineText':fontsize=$textSize:fontcolor=white:x=w-(mod($scrollSpeed*n\\,w+tw)):y=h-text_h-105:text_wrap=0")
        add("-c:a")
        add("copy")
        add(outputPath)
    }

    return inputs.toArray(arrayOfNulls(inputs.size))
}

说明

  1. text_wrap=0:这个参数会告诉drawtext滤镜无论文本多长都保持单行显示,不会自动换行
  2. 文本预处理:通过replace("\n", "").replace("\r", "")移除文本中的所有换行符,防止因为文本本身带换行导致的多行问题
  3. 滚动逻辑:原有的x轴表达式w-(mod($scrollSpeed*n\,w+tw))已经适配长文本滚动,它会让文本从右侧外开始滚动,直到整个文本完全移出左侧,符合单行滚动的需求

内容的提问来源于stack exchange,提问作者sanjay dangar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:22:58