Добавить текст к видео с помощью FFMPEG (c# приложение) - PullRequest
0 голосов
/ 03 февраля 2020

Попытка добавить текст к видео с помощью FFMPEG с помощью сценария c# с помощью следующей команды

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();
        }
    }

Вывод - файл mp4 размером 0 КБ, который нельзя открыть. Когда я удаляю все после input.mp4 в фильтре, вывод в порядке. Что я могу делать не так?

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

drawtext=\"\text должно быть drawtext=\"\\text

См. Fiddle: https://dotnetfiddle.net/sE7w9L

Выход:

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 - escape для табулятора (он же" tab"). Вот почему вам нужно убежать от самого побега, здесь. Это делается путем удвоения = = * \\t


Как правильно заметил @Jawad: есть еще один способ достичь той же цели: " Идентификатор дословно ":

Специальный символ @ служит буквенным идентификатором. Его можно использовать следующими способами:

  1. Включение ключевых слов C# в качестве идентификаторов. [...]

  2. Чтобы указать, что строковый литерал должен интерпретироваться дословно. [...]

Пример:

string filename1 = @"c:\documents\files\u0066.txt";
0 голосов
/ 03 февраля 2020

Непосредственно перед использованием args, почему бы не записать его в консоль, чтобы вы могли видеть точно , что отправляется в командную строку:

Console.WriteLine($"Args={args}");
ProcessStartInfo startInfo = new ProcessStartInfo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...