Как мне настроить вывод ffmpeg pipe? - PullRequest
0 голосов
/ 13 сентября 2018

Мне нужно прочитать вывод ffmpeg как трубу. Вот пример кода:

    public static void PipeTest()
    {
        Process proc = new Process();
        proc.StartInfo.FileName = Path.Combine(WorkingFolder, "ffmpeg");
        proc.StartInfo.Arguments = String.Format("$ ffmpeg -i input.mp3 pipe:1");
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.RedirectStandardInput = true;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.Start();

        FileStream baseStream = proc.StandardOutput.BaseStream as FileStream;
        byte[] audioData;
        int lastRead = 0;

        using (MemoryStream ms = new MemoryStream())
        {
            byte[] buffer = new byte[5000];
            do
            {
                lastRead = baseStream.Read(buffer, 0, buffer.Length);
                ms.Write(buffer, 0, lastRead);
            } while (lastRead > 0);

            audioData = ms.ToArray();
        }

        using(FileStream s = new FileStream(Path.Combine(WorkingFolder, "pipe_output_01.mp3"), FileMode.Create))
        {
            s.Write(audioData, 0, audioData.Length);
        }
    }

Это лог от ffmpeg, первый файл читается:

Ввод # 0, mp3, из 'norm.mp3': Метаданные: кодировщик: Lavf58.17.103 Продолжительность: 00: 01: 36,22, начало: 0,023021, битрейт: 128 кбит / с Поток № 0: 0: Аудио: mp3, 48000 Гц, стерео, fltp, 128 кбит / с Метаданные: кодировщик: Lavc58.27

Тогда труба:

[NULL @ 0x7fd58a001e00] Невозможно найти подходящий выходной формат для '$' $: Неверный аргумент

Если я запускаю «-i input.mp3 pipe: 1», журнал выглядит так:

Невозможно найти подходящий выходной формат для 'pipe: 1' pipe: 1: Invalid Аргумент

Как мне установить правильный вывод? И как ffmpeg вообще знать, что это за формат вывода?

1 Ответ

0 голосов
/ 13 сентября 2018

Похоже, в "$ ffmpeg -i input.mp3 pipe:1" есть опечатка.Если вы просто хотите вызвать ffmpeg с такими параметрами, как -i и т. Д., Пропустите символ $. Просто "ffmpeg -i input.mp3 pipe:1". .Вы уже передаете основное имя программы в StartInfo.FileName.Так что вы, вероятно, тоже должны об этом забыть.Попробуйте просто "-i input.mp3 pipe:1" как ваш Arguments.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...