0

我有一个视频文件列表,我想用 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次时,它打开了太多进程。我想一次只打开一个进程,完成后,转到下一个。

4

2 回答 2

0

之前WaitForExit,添加此命令

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

这将在过程完成后起作用。我通常使用新线程。

于 2014-04-21T07:43:50.857 回答
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();
}
于 2013-01-31T23:02:58.747 回答