我无法让ffmpeg的drawtext视频过滤器在drawtext的“text =”参数中绘制撇号/单引号,即使我将它们转义。双引号工作正常,从文件加载的文本中的撇号(例如textfile =“example.txt”)工作正常。这是一个错误吗?
e.g。
ffmpeg -i test.mpg -vf drawtext="apostrophes don't print" ...
ffmpeg -i test.mpg -vf drawtext="even when they\'re escaped" ...
答案 0 :(得分:20)
特殊角色逃脱就像暴力:如果他们没有解决你的问题,你的使用就不够了。
ffmpeg -i test.mpg -vf drawtext=text="It\\\\\'s so easy"
生成包含撇号的文本叠加层。文本被解析了几次,所以你不仅要逃避引用,你还必须逃避逃避报价的斜线。两次。
在这种情况下,使用文本文件的替代方法可能是更好的方法。
答案 1 :(得分:6)
我能够将Unicode \ u2019 插入到参数字符串中,它适用于单右引号。
答案 2 :(得分:0)
这可能与魔术引号有关。通过我在Windows上使用Windows命令行和MinGW进行的一系列测试,我每次遇到同样的问题。由于ffmpeg drawtext使用Freetype(我猜这是启用魔术引号的地方)我怀疑要禁用魔术引号还有很多工作要做。我不确定是否有办法在命令行中删除添加的斜杠,因为我看到的所有东西都涉及PHP脚本。我可能是错的,因为我不是PHP大师,但我不知道如何将它们集成到ffmpeg命令中。
答案 3 :(得分:0)
如果有人需要这个用于python,这个转义函数对我有用(基于上面的https://ffmpeg.org/ffmpeg-utils.html#Quoting-and-escaping +多次转义建议):
return“'”+ text.replace(“:”,“\\:”)。replace(“'”,“'\\\\\\''”)+“'”
答案 4 :(得分:0)
//这对我有用
public function replaceSpecialFfmpegChars($text)
{
return str_replace(
":",
"\\\\\\\\\\\:",
str_replace(
"%",
"\\\\\\\\\\\%",
str_replace(
"'",
"'\\\\\\\\\\\\''",
str_replace(
"\"",
"\\\\\\\\\\\"",
str_replace(
"\\",
"\\\\\\\\\\\\\\\\",
$text
)
)
)
)
);
}
答案 5 :(得分:0)
只需将您的文本放入文件中,例如myText.txt并使用textfile
选项:
->myText.txt
这是我的文字,带有特殊字符:,(,),'
然后代替:
ffmpeg -i test.mpg -vf drawtext="This is my text with special characters :,(,),'"
使用以下命令:
ffmpeg -i test.mpg -vf textfile=textFile.txt
答案 6 :(得分:0)
如果您通过 Python
传递字符串,以下对我有用:
txt = 'it\'s good!'
txt = txt.replace('\'', '\'\\\\\\\\\\\'\'')