2010-03-23 2 views
3

Я хочу сделать что-то вроде этогоКак я могу выполнить stdout/stderr в .NET?

ffmpeg -i audio.mp3 -f flac - | oggenc2.exe - -o audio.ogg 

я знаю, как сделать ffmpeg -i audio.mp3 -f flac, используя класс процесса в .NET, но как я труба это oggenc2?

Любой пример того, как это сделать (он не должен быть ffmpeg или oggenc2), будет в порядке.

+0

Вы вызываете процесс из .NET-приложения или пытаетесь реплицировать этот формат аргументов для собственного консольного приложения? –

+0

Что вы имеете в виду, повторяя этот аргумент? вы хотите принять такие аргументы, как ffmpeg/oggenc2? нет, я бы назвал это fron моим .NET-приложением – 2010-03-23 17:08:52

ответ

4

ОК, я написал следующий код, чтобы сделать это:

Process ffmpeg = new Process 
    { 
     StartInfo = new ProcessStartInfo 
     { 
      FileName = "ffmpeg.exe", 
      Arguments = "-i audio.mp3 -f flac -", 
      UseShellExecute = false, 
      RedirectStandardOutput = true, 
      WindowStyle = ProcessWindowStyle.Hidden 
     } 
    }; 
    Process oggenc2 = new Process 
    { 
     StartInfo = new ProcessStartInfo 
     { 
      FileName = "oggenc2.exe", 
      Arguments = "- -o audio.ogg", 
      UseShellExecute = false, 
      RedirectStandardInput = true, 
      WindowStyle = ProcessWindowStyle.Hidden 
     } 
    }; 

    ffmpeg.Start(); 
    oggenc2.Start(); 

    int bufferLength = 4096; 
    var input = oggenc2.StandardInput.BaseStream; 
    var output = ffmpeg.StandardOutput.BaseStream; 

    using (BinaryWriter writer = new BinaryWriter(input)) 
    { 
     using (BinaryReader r = new BinaryReader(output)) 
     { 
      byte[] buffer = new byte[bufferLength]; 
      int bytesRead; 
      do 
      { 
       bytesRead = r.Read(buffer, 0, bufferLength); 
       writer.Write(buffer, 0, bytesRead); 
      } while (bytesRead > 0); 
     } 
    } 

    ffmpeg.WaitForExit(); 

Надежда, это помогает.

+0

потрясающий ответ спасибо! : | !! :) – 2010-03-23 18:29:41

 Смежные вопросы

  • Нет связанных вопросов^_^