如何在java中转义ffmpeg drawtext过滤器的所有特殊字符

时间:2017-08-03 20:29:00

标签: java string ffmpeg escaping drawtext

有没有人有一个好的方法可以从java中的String转义所有特殊字符(',%,\,:,{,}),这些字符将在ffmpeg drawtext过滤器链中使用?尝试将replaceAll与不同的转义组合一起使用是一种令人沮丧的练习!

String myTextString = "Bob's special\cool mix:stuff @ 40% off"; Runtime.getRuntime().exec(new String[] { "ffmpeg",...., "filter_complex", "drawtext=enable='between(t,0,10)':x=10:y=10:fontfile=Roboto-Black.ttf:text='" + myTextString + "':fontcolor=#a43ddb:fontsize=14", ... });

ffmpeg drawtext filter:https://ffmpeg.org/ffmpeg-filters.html#drawtext-1

2 个答案:

答案 0 :(得分:4)

好吧......在将我的头撞到墙上以获得正确的逃生模式以满足java和ffmpeg之后我想出了这个:

MyDrawTextString.replaceAll("\\\\", "\\\\\\\\\\\\\\\\").replaceAll("'", "'\\\\\\\\\\\\\''").replaceAll("%", "\\\\\\\\\\\\%").replaceAll(":", "\\\\\\\\\\\\:");

看起来很疯狂,但它确实有效!注意:我必须在我的答案中加倍我的反斜杠才能正确显示:-P Dang那些反斜杠。

关键是ffmpeg drawtext需要3个反斜杠来逃避(',%,:)并且单引号也需要包装在第二对单引号中。 Java String需要2个反斜杠来制作一个和java替换所有正则表达式需要有2个反斜杠才能在字符串中创建一个反斜杠。因此,你需要(2 + 2)* 3反斜杠来逃避drawtext过滤器字符串中的事情!

答案 1 :(得分:1)

只需将您的文本放入文本文件(例如myText.txt)并使用textfile选项:

-> myText.txt:

这是我的带有特殊字符的文本:,(,),'

然后代替:

ffmpeg -i test.mpg -vf drawtext="This is my text with special characters :,(,),'"

使用以下命令:

ffmpeg -i test.mpg -vf drawtext=textfile=textFile.txt