FFMPEG过程太多了

时间:2013-01-31 22:21:26

标签: c# loops process ffmpeg

我有一个视频文件列表,我想用ffmpeg转换它们。这是我的代码:

    public static void ConvertToMp3(String inputPath, String title)
    {
        String outputpath = "\"D:\\Mp3\\" + title + ".mp3\"";

        String _out;
        Process p = new Process();

        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardInput = true;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.RedirectStandardError = true;
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        p.StartInfo.FileName = "ffmpeg";
        p.StartInfo.Arguments = " -i \"" + inputPath + "\" -vn -f mp3 -ab 192k " + outputpath;

        p.Start();
        p.StandardOutput.ReadToEnd();
        _out = p.StandardError.ReadToEnd();
        p.WaitForExit();

        if(!p.HasExited)
            p.Kill();

        Console.WriteLine(_out);   
    }

它工作正常,但是当我在 n 次循环中调用此函数时,它会打开太多进程。我想一次只打开一个进程,当它完成时,转到下一个进程。

2 个答案:

答案 0 :(得分:0)

如果小于x(示例中为2)

,请检查进程计数并仅执行代码
int process = 0;
foreach (System.Diagnostics.Process myProc in System.Diagnostics.Process.GetProcesses())
{
   if (myProc.ProcessName == "process name")
      process++;

   if (process < 2)
      p.Start();
}

答案 1 :(得分:0)

WaitForExit之前,添加此命令

p.Exited += (sender, e) =>
            {
               // Thread.Sleep(1000 * 60);
               // Thread thread = new Thread(() => callProcess());
               // thread.Start();                    
            };

当流程结束时,这将有效。我通常使用新线程。