12

当它们在drawtext的“text =”参数中时,即使我转义它们,我也无法让ffmpeg的drawtext视频过滤器绘制撇号/单引号。双引号工作正常,从文件加载的文本中的撇号(例如 textfile="example.txt")工作正常。这是一个错误吗?

例如

ffmpeg -i test.mpg -vf drawtext="apostrophes don't print" ...
ffmpeg -i test.mpg -vf drawtext="even when they\'re escaped" ...
4

8 回答 8

31

特殊字符逃逸就像暴力:如果它们不能解决您的问题,那么您使用的不够多。

ffmpeg -i test.mpg -vf drawtext=text="It\\\\\'s so easy"

生成包含撇号的文本覆盖。文本被解析了几次,所以你不仅要转义引号,还必须转义转义引号的斜线。两次。

在这种情况下,您使用文本文件的替代方法可能是更好的方法。

于 2012-05-24T00:08:23.290 回答
8

我能够将 Unicode \u2019插入参数字符串,它适用于单右引号。

于 2014-11-16T22:51:27.227 回答
3

如果有人需要这个 python,这个转义函数对我有用(基于https://ffmpeg.org/ffmpeg-utils.html#Quoting-and-escaping + 上面的多转义建议):

返回 "'" + text.replace(":", "\\:").replace("'", "'\\\\\\''") + "'"

于 2015-11-10T03:55:39.840 回答
2

// 这对我有用

public function replaceSpecialFfmpegChars($text)
    {
        return str_replace(
            ":",
            "\\\\\\\\\\\:",
            str_replace(
                "%",
                "\\\\\\\\\\\%",
                str_replace(
                    "'",
                    "'\\\\\\\\\\\\''",
                    str_replace(
                        "\"",
                        "\\\\\\\\\\\"",
                        str_replace(
                            "\\",
                            "\\\\\\\\\\\\\\\\",
                            $text
                        )
                    )
                )
            )
        );
    }
于 2020-05-18T05:39:46.433 回答
0

这可能与魔术引号有关。通过我刚刚在 Windows 上使用 Windows 命令行和 MinGW 进行的一系列测试,我每次都遇到同样的问题。由于 ffmpeg drawtext 使用 Freetype(我猜这是启用魔术引号的地方),我怀疑要禁用魔术引号还有很多工作要做。我也不确定是否有办法删除命令行中添加的斜杠,因为我所看到的所有内容都涉及 PHP 脚本。我可能是错的,因为我不是 PHP 专家,但我不知道如何将它们集成到 ffmpeg 命令中。

于 2012-05-23T20:45:38.143 回答
0

在 node.js 中,我可以在这一行的文本中添加一个冒号。

let surahTxt = "QURAN " + chapterNo + "\\:"+ from + "-" + to ;

后来这个变量与drawtext一起使用

于 2021-11-01T07:54:54.563 回答
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

于 2020-09-27T16:11:23.817 回答
0

如果您通过 传递字符串Python,则以下内容对我有用:

txt = 'it\'s good!'
txt = txt.replace('\'', '\'\\\\\\\\\\\'\'')
于 2021-02-17T12:46:39.173 回答