Вы должны войти, чтобы создавать сообщения и темы.

FFmpeg потоковый ввод файлов.

Здравствуйте. Не могу передать mp4 файл в качестве входного файла через поток в ffmpeg процесс.
Сначала я преобразую видеофайл в массив байтов и передаю в метод PipeTest.

var vProcessor = new VideoProcessor();

var stream = File.OpenRead(@"C:\supertest\video.mp4");
var fileBytes = new byte[stream.Length];
stream.Read(fileBytes, 0, fileBytes.Length);
stream.Close();

await vProcessor.PipeTest(fileBytes, TimeSpan.FromMilliseconds(1500), @"C:\supertest\PipeScreen.png" style="color: #25d39d !important");

Далее сам метод PipeTest

public async Task PipeTest(byte[] data, TimeSpan frameTime, string outFile)
{
        var proc = new Process();
        proc.StartInfo.FileName = _ffmpeg;
        proc.StartInfo.Arguments = $"-i - -codec copy C:\\supertest\\qqq.mp4";
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.RedirectStandardInput = true;
        proc.StartInfo.RedirectStandardOutput = false;
        proc.Start();

        proc.StandardInput.BaseStream.Write(data);

        await proc.WaitForExitAsync();
}

ffmpeg в логах выдает ошибку 

[mov,mp4,m4a,3gp,3g2,mj2 @ 000002314aa4b1c0] stream 0, offset 0x30: partial file
pipe:: Invalid data found when processing input

Помогите пожалуйста как исправить это.

Моя идея заключается в том чтобы передавать данные в ffmpeg в поток в StandartInput и получать обработанные им файлы в поток из StandartOutput.
Все выходные перерыл интернет, нигде нету решения.

 

👋Привет. Пока не пользовался ffmpeg, но погуглил. Подозреваю то, что ты ищешь, документация. Я вижу тут неправильные входные аргументы "-i - ...". Должно быть "i- pipe:" или "i-pipe:0" на входе, ну и вероятно на выходе тоже "i- pipe:" или "i-pipe:1"(методом проб) . А причем здесь "-codec copy" я без понятия. Удачи.

Лайкнул Overd
Overd
Цитата: Viсtor от 27.12.2022, 11:34

👋Привет. Пока не пользовался ffmpeg, но погуглил. Подозреваю то, что ты ищешь, документация. Я вижу тут неправильные входные аргументы "-i - ...". Должно быть "i- pipe:" или "i-pipe:0" на входе, ну и вероятно на выходе тоже "i- pipe:" или "i-pipe:1"(методом проб) . А причем здесь "-codec copy" я без понятия. Удачи.

Добрый день, я вдоль и поперек перерыл документацию, как обрабатывать подобные случае там не написано. Насчет аргументов "-i pipe:0" тоже самое самое что и
"-i -", разницы нету. Проблема оказалось в том что я неправильно передавал поток в StandartInput