Привет.
Запускаю 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).
Как реализовать правильно?