使用FFMPEG(c#应用程序)向视频添加文本
尝试使用以下命令通过c#脚本使用FFMPEG向视频添加文本使用FFMPEG(c#应用程序)向视频添加文本,c#,ffmpeg,C#,Ffmpeg,尝试使用以下命令通过c#脚本使用FFMPEG向视频添加文本 ffmpeg -i input.mp4 -vf drawtext="\text='Stack Overflow': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: x=w-tw-10:y=h-th-10" -codec:a copy output.mp4 当从cmd运行它时,它可以工作,但当我在这里实现它时: public void AddNewLabel(st
ffmpeg -i input.mp4 -vf drawtext="\text='Stack Overflow': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: x=w-tw-10:y=h-th-10" -codec:a copy output.mp4
当从cmd运行它时,它可以工作,但当我在这里实现它时:
public void AddNewLabel(string label)
{
//string video = "input.mp4";
string filter = "input.mp4 -vf drawtext=\"\text='sampletext': fontcolor=white: fontsize=24: box=1: boxcolor=black: x=w-tw-10:y=h-th-10\"";//problemm is this line
string args = $"/c ffmpeg -i {filter} -codec:a copy output.mp4";
ProcessStartInfo startInfo = new ProcessStartInfo
{
CreateNoWindow = false,
FileName = "cmd.exe",
WorkingDirectory = outputpath,
Arguments = args
};
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit();
}
}
输出是无法打开的0kb mp4文件。当我删除过滤器中input.mp4之后的所有内容时,输出正常。我可能做错了什么?在使用
args
之前,为什么不将其写入控制台,以便您可以准确地看到发送到命令行的内容:
Console.WriteLine($"Args={args}");
ProcessStartInfo startInfo = new ProcessStartInfo
drawtext=\“\text
需要是drawtext=\”\\text
参见小提琴:
输出:
input.mp4-vf drawtext=“ext='sampletext':fontcolor=white:fontsize=24:box=1:boxcolor=black:x=w-tw-10:y=h-th-10”
对
input.mp4-vf drawtext=“\text='sampletext':fontcolor=white:fontsize=24:box=1:boxcolor=black:x=w-tw-10:y=h-th-10”
\t
是制表器的转义符(也称为“”。这就是为什么你需要在这里转义转义字符本身。这是通过将其加倍来完成的=>\\t
正如@Jawad正确指出的那样:有另一种方法可以实现同样的目标: “”: @特殊字符用作逐字标识符。它可以通过以下方式使用:
string filename1 = @"c:\documents\files\u0066.txt";
您似乎正在启动一个命令shell(cmd.exe),只是为了运行ffmpeg。为什么不直接运行ffmpeg呢?我的任务要求我创建一个c#应用程序,用户可以在其中向列表中输入文本,并将其添加到所选视频的角落。如果我从命令行运行ffmpeg,我可以这样做,但我需要它通过c#app工作。我的意思是,为什么不使用“ffmpeg”作为
文件名和args
作为参数属性?可能“\text…”有问题吗\t是制表器。如果你问我的话,它应该是drawtext=\“\\text=
。看到了吧。制表器是什么?你也可以使用@来定义字符串文字。string filter=@“input.mp4-vf drawtext=”“text='samplet…
@Jawad绝对正确。但是你也必须改变字符串的其他部分。因为OP问“什么是制表器”,我不想开始对做同样事情的另一种方法感到困惑。我投了更高的票,因为这是正确的答案。我只是在建议其他方法:)我很感激@JawadOh,我现在明白了。谢谢大家的帮助!