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)) }
说明
text_wrap=0:这个参数会告诉drawtext滤镜无论文本多长都保持单行显示,不会自动换行- 文本预处理:通过
replace("\n", "").replace("\r", "")移除文本中的所有换行符,防止因为文本本身带换行导致的多行问题 - 滚动逻辑:原有的x轴表达式
w-(mod($scrollSpeed*n\,w+tw))已经适配长文本滚动,它会让文本从右侧外开始滚动,直到整个文本完全移出左侧,符合单行滚动的需求
内容的提问来源于stack exchange,提问作者sanjay dangar
相关产品推荐
相关产品推荐

