我有一个视频文件列表,我想用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 次循环中调用此函数时,它会打开太多进程。我想一次只打开一个进程,当它完成时,转到下一个进程。
答案 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();
};
当流程结束时,这将有效。我通常使用新线程。