在drawtext中使用ffmpeg单引号

时间:2012-05-23 17:48:21

标签: ffmpeg escaping drawtext

我无法让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" ...

7 个答案:

答案 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('\'', '\'\\\\\\\\\\\'\'')