如何在 Shell FFmpeg 中转义单引号?
我的环境
- zsh
- Apple clang 版本 13.0.0
我的问题摘要
我想使用 FFmpeg 在视频上绘制一些文本。
我的命令行是由带有 system() 函数的 C 程序发送的。
当我的字符串中有单引号时,文本不会显示,这是有道理的。
我尝试过的方法
- 保持原样 → 不绘制任何文本
- 使用 \' 通常转义 → 不绘制任何文本
- 使用 \\' 进行双重转义 → 不绘制任何文本
- 三重转义等等...
- 使用
\0027
和\xE2\x80\x99
符号 → 文本绘制为“0027”或“xE2x80x99”
我的代码
The generateVideo()函数
void generateVideo(char sourceVideoPath[], char text[], int destinationFileName) {
char line[1000];
sprintf(line, "ffmpeg -i %s -vf \"drawtext=fontfile=/path/to/font/:text='%s':fontcolor=white:fontsize=28:borderw=2.8:x=(w-text_w)/2:y=(h-text_h)/2\" -codec:a copy ../%d.mp4", sourceVideoPath, text, destinationFileName);
system(line);
}
不知道问题是出在FFmpeg还是Shell上,但是暂时无法绘制带引号的文本,很痛苦。
提前谢谢你们了!
My environment
- zsh
- Apple clang version 13.0.0
Summary of my problem
I want to draw some text on a video using FFmpeg.
My command line is sent by a C program with the system() function.
When there is a single quote in my string, the text does not display, which makes sense.
What I've tried
- Leaving it as it is → no text is drawn
- Escaping it normally with \' → no text is drawn
- Double escaping it with \\' → no text is drawn
- Triple escaping it, etc...
- Using the
\0027
and\xE2\x80\x99
notations → text is drawn as "0027" or "xE2x80x99"
My code
The generateVideo() function
void generateVideo(char sourceVideoPath[], char text[], int destinationFileName) {
char line[1000];
sprintf(line, "ffmpeg -i %s -vf \"drawtext=fontfile=/path/to/font/:text='%s':fontcolor=white:fontsize=28:borderw=2.8:x=(w-text_w)/2:y=(h-text_h)/2\" -codec:a copy ../%d.mp4", sourceVideoPath, text, destinationFileName);
system(line);
}
I don't know if the problem comes from FFmpeg or Shell, but it is a pain that I can't draw texts with quotes for the moment.
Thank you guys in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
从你的问题中很难看出问题是什么,但我相信像在文本中的引号之前编码 \ 这样的修复应该可以修复它。如果您从 shell 中运行的命令行开始,然后尝试从 C 代码中使用“system”发出该命令,那么可能会更容易提供帮助。这是一个 main.c,它演示了我认为应该起作用的内容:
It's a little hard to tell from your question what the problem is, but I believe a fix like encoding \ before the quotes in the text should fix it. It might be easier to help if you started from a command line that works from the shell and then tried to issue that command with 'system' from your C code. Here is a main.c that demonstrates what I think ought to work:
请您尝试以下操作:
我不是在开玩笑:)。
使用实际视频文件进行测试。
Would you please try the following:
I'm not joking :).
Tested with an actual video file.