ffmpeg single quote in drawtext

£可爱£侵袭症+ 提交于 2019-11-30 07:12:09

问题


I haven't been able to get ffmpeg's drawtext video filter to draw apostrophes/single quotes when they are in drawtext's "text=" parameter, even when I escape them. Double quotes work fine, and apostrophes in text loaded from a file (e.g. textfile="example.txt") work fine. Is this a bug?

e.g.

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

回答1:


Special character escapes are like violence: if they're not solving your problem, you're not using enough.

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

Produces a textual overlay that includes an apostrophe. The text is being parsed a couple times, so you not only have to escape the quote, you also have to escape the slash escaping the quote. Twice.

Your alternative of using a textfile might be a better method in this situation.




回答2:


I was able to insert Unicode \u2019 into argument string and it worked for single right quote.




回答3:


This is probably something to do with magic quotes. Through a bunch of testing I just did using Windows Command Line and MinGW on Windows, I ran into the same problem every time. Since ffmpeg drawtext uses Freetype (I would guess this is where magic quotes are enabled) I doubt there's much to be done to disable magic quotes. I'm not sure there's a way to remove the added slashes in the command line either, as everything I've seen involves PHP scripts. I could be wrong, since I'm no PHP guru, but I'm not aware of how to integrate them into an ffmpeg command.




回答4:


In case someone needs this for python, this escape function is working for me (based on https://ffmpeg.org/ffmpeg-utils.html#Quoting-and-escaping + multi-escaping advice above):

return "'" + text.replace(":", "\\:").replace("'", "'\\\\\\''") + "'"



来源:https://stackoverflow.com/questions/10725225/ffmpeg-single-quote-in-drawtext

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!