Задать вопрос
@OM1

Как получить поток из ffmpeg?

Привет.
Запускаю ffmpeg:

var process = new Process
            {
                StartInfo =
                {
                    FileName = "ffmpeg.exe",
                    Arguments = $"-i D:/0.mp4 -vf fps=1/5 -c:v png -f image2pipe pipe:1",
                    UseShellExecute = false,
                    CreateNoWindow = true,
                    RedirectStandardInput = true
                }
            };
            process.Start();
            var ffmpegIn = process.StandardInput.BaseStream;


Пытаюсь прочитать поток:

byte[] data = new byte[1000];
            int bytesRead = 0;
            int chunkSize = 1;
            while (bytesRead < data.Length && chunkSize > 0)
                bytesRead += chunkSize = ffmpegIn.Read(data, bytesRead, data.Length - bytesRead);


Постоянные ошибки с потоком (не поддерживает поиск/чтение/...). Но в консоле символы бегут, как я понимаю, я не правильно читаю поток от мпега.

Или вот пример:

Process p = new Process();

            // Redirect the output stream of the child process.
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;

            //p.StartInfo.FileName = "Write500Lines.exe";

            //p.StartInfo.WorkingDirectory = @"C:\";
            p.StartInfo.FileName = "ffmpeg.exe";
            p.StartInfo.Arguments = @"-i D:/0.mp4 -vcodec png -vframes 1 -f image2pipe pipe:1";

            p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding("CP866");

            p.Start();


Вывод:

ffmpeg version git-2017-12-19-c94b094 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  6.100 / 56.  6.100
  libavcodec     58.  8.100 / 58.  8.100
  libavformat    58.  3.100 / 58.  3.100
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  7.100 /  7.  7.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
Input #0, mpeg, from 'D:/0.mp4':
  Duration: 00:00:42.72, start: 72892.893000, bitrate: 2105 kb/s
    Stream #0:0[0x1e0]: Video: h264 (High), yuv420p(progressive), 1920x1080, 12 fps, 25 tbr, 90k tbn, 24 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Press [q] to stop, [?] for help
Output #0, image2pipe, to 'pipe:1':
  Metadata:
    encoder         : Lavf58.3.100
    Stream #0:0: Video: png, rgb24, 1920x1080, q=2-31, 200 kb/s, 12 fps, 12 tbn, 12 tbc
    Metadata:
      encoder         : Lavc58.8.100 png
frame=    1 fps=0.0 q=-0.0 Lsize=    2420kB time=00:00:00.08 bitrate=237943.6kbits/s speed=0.0921x    
video:2420kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
"WindowsFormsApp_cmd_test_0.exe" (CLR v4.0.30319: WindowsFormsApp_cmd_test_0.exe). Загружено "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ru_b77a5c561934e089\mscorlib.resources.dll". Сборка модуля выполнена без символов.
Программа "[5952] WindowsFormsApp_cmd_test_0.exe" завершилась с кодом 0 (0x0).


Как реализовать правильно?
  • Вопрос задан
  • 996 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы