c-如何在Shell FFmpeg中转义单引号



我的环境

  • zsh
  • Apple clang 13.0.0版

我的问题摘要

我想用FFmpeg在视频上画一些文字。

我的命令行是由一个带有system((函数的C程序发送的。

当我的字符串中有一个引号时,文本不会显示,这是有道理的。

我尝试过的

  • 保持原样→未绘制任何文本
  • 用"正常逃离→未绘制任何文本
  • 用\\'对其进行双重转义→未绘制任何文本
  • 三次逃脱,等等
  • 使用027xE2x80x99符号→文本被绘制为";0027";或";xE2x80x99">

我的代码

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,但我暂时无法用引号绘制文本,这让我很痛苦。

提前谢谢大家!

从你的问题中很难判断出问题是什么,但我相信像在文本中的引号之前进行编码这样的修复应该可以解决它。如果你从shell中的命令行开始,然后尝试从C代码中发出带有"system"的命令,可能会更容易提供帮助。这里有一个main.c,它演示了我认为应该工作的内容:

#import <stdio.h>
#import <stdlib.h>
int main(int argc, char **argv) {
char *sourceVideoPath = "video";
char *text = "text \'quoted\' text";
int destinationFileName = 10;
char line[1000];
sprintf(line, "echo 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);
}

请尝试以下操作:

#include <stdio.h>
#include <stdlib.h>
int main()
{
char *sourceVideoPath = "video.mp4";
char *text = "'text '\\\\\''quoted'\\\\\'' text'";
char *destinationFileName = "with_text.mp4";
char line[1000];
sprintf(line, "ffmpeg -i "%s" -vf "drawtext=fontfile=/path/to/fonts/font.ttf:text=%s:fontcolor=white:fontsize=28:borderw=2.8:x=(w-text_w)/2:y=(h-text_h)/2" -codec:a copy "%s"", sourceVideoPath, text, destinationFileName);
system(line);
}

我不是在开玩笑:(。使用实际的视频文件进行测试。

相关内容

  • 没有找到相关文章

最新更新