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回呼び出すと、あまりにも多くのプロセスが開かれます。一度に 1 つのプロセスだけを開き、完了したら次のプロセスに進みます。

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 に答える