FFmpeg. Чтение и запись нескольких файлов из потока
Проблема следующая. Мне надо конвертировать видео в набор картинок через процесс ffmpeg. Раньше я успешно это делал при помощи следующего кода:
public void VideoToImages1()
{
var inputFile = @"D:\testVideo.avi";
var outputFilesPattern = @"D:\image%03d.jpg";
using var process = new Process
{
StartInfo = new ProcessStartInfo
{
UseShellExecute = false,
CreateNoWindow = true,
Arguments = $"-y -i {inputFile} {outputFilesPattern}",
FileName = "ffmpeg.exe"
},
EnableRaisingEvents = true
};
process.Start();
process.WaitForExit();
}
Теперь же мне необходимо передавать видео через входной Stream и получать данные из выходного Stream. Для этого у меня следующий код. Он полностью рабочий так как я использовал его для конвертации видео и успешно передавал входные данные через Stream и получал выходные данные в через Stream и создавал корректный файл.
public void VideoToImages2()
{
var inputFile = @"D:\testVideo.avi";
var outputFile = @"D:\resultImages.png";
var process = new Process
{
StartInfo = new ProcessStartInfo
{
RedirectStandardInput = true,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true,
Arguments = "-y -i - -f image2 -",
FileName = _ffmpeg
},
EnableRaisingEvents = true
};
process.Start();
//Write input data to input stream
var inputTask = Task.Run(() =>
{
using (var input = new FileStream(inputFile, FileMode.Open))
{
input.CopyTo(process.StandardInput.BaseStream);
process.StandardInput.Close();
}
});
//Read multiple files from output stream
var outputTask = Task.Run(() =>
{
//Problem here
using (var output = new FileStream(outputFile, FileMode.Create))
process.StandardOutput.BaseStream.CopyTo(output);
});
Task.WaitAll(inputTask, outputTask);
process.WaitForExit();
}
Проблема здесь в том что вместо того чтобы создать файлы в директории по указанному паттерну он возвращает эти файлы в потоке. В итоге я не знаю записать все файлы из Stream и как этот выходной обрабатывать так как он содержит множество файлов. В данный момент у меня создается лишь 1 картинка. Помогите пожалуйста.