FFmpeg потоковый ввод файлов.
Цитата: Overd от 19.12.2022, 09:02Здравствуйте. Не могу передать 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");Далее сам метод 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.
Все выходные перерыл интернет, нигде нету решения.
Здравствуйте. Не могу передать 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.
Все выходные перерыл интернет, нигде нету решения.
Цитата: Viсtor от 27.12.2022, 11:34👋Привет. Пока не пользовался ffmpeg, но погуглил. Подозреваю то, что ты ищешь, документация. Я вижу тут неправильные входные аргументы "-i - ...". Должно быть "i- pipe:" или "i-pipe:0" на входе, ну и вероятно на выходе тоже "i- pipe:" или "i-pipe:1"(методом проб) . А причем здесь "-codec copy" я без понятия. Удачи.
👋Привет. Пока не пользовался ffmpeg, но погуглил. Подозреваю то, что ты ищешь, документация. Я вижу тут неправильные входные аргументы "-i - ...". Должно быть "i- pipe:" или "i-pipe:0" на входе, ну и вероятно на выходе тоже "i- pipe:" или "i-pipe:1"(методом проб) . А причем здесь "-codec copy" я без понятия. Удачи.
Цитата: Overd от 13.01.2023, 22:18Цитата: 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
Цитата: 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