Мне нужно прочитать вывод 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 вообще знать, что это за формат вывода?