2012-06-11 282 views
1

我正在编写一个程序,使用HandbrakeCLI作为转换器批量转换视频文件。我已经完成了大部分工作,现在我正在将文件传递给Handbrake。我用HandbrakeCLI的位置创建一个新进程并传递参数。我也使它在同一个shell中执行。它旋转起来,然后开始通过转换,并达到三帧左右,并杀死自己。我在Windows 8 64位上使用Visual Studio 12。这里是我的代码:进程死亡本身

static void EncodeVideos() 
    { 
     var continueConverting = true; 

     while (continueConverting) 
     { 
      var converted = 0; 
      if (settings.Optimize == true) 
      { 
       videos = videos.OrderBy(x => x.InputSize).ToList(); 
      } 

      foreach (var v in videos) 
      { 
       if (!v.AlreadyConverted()) 
       { 
        v.CreateOutputPath(); 
        var input = String.Format("-i \"{0}\" ", v.InputPath); 
        var output = String.Format("-o \"{0}\" ", v.OutputPath); 
        var preset = String.Format("-Z {0}", settings.Preset); 
        var convertString = String.Format(" {0} {1} {2}", input, output, preset); 
        //Converting is not working correctly yet. 
        var p = new Process(); 
        p.StartInfo = new ProcessStartInfo(settings.HandBrakeLocation, convertString) 
        { 
         UseShellExecute = false, 
        }; 
        p.Start(); 
        p.WaitForExit(); 
        converted++; 
       } 
      } 

      if (settings.Loop == true) 
      { 
       if (converted == 0) 
       { 
        continueConverting = false; 
       } 
      } 
      else 
      { 
       continueConverting = false; 
      } 
     } 
    } 

如果您想对代码的情况下,我已经把它全部在GitHub上,你可以找到它的Github

编辑:固定码

回答

1
if (settings.Loop == true) 
      { 
       if (converted == 0) 
       { 
        continueConverting = false; 
       } 
       continueConverting = false; 
      } 
      else 
      { 
       continueConverting = false; 
      } 

我猜你真的不想继续转换!

看起来这是不正确的开始。

+0

它看起来不是问题 - 首先看到循环,只有在所有视频成功转换后才能达到此点 – Bond

+0

迭代完所有视频后,这些都在我的while循环中。该设置适用于用户想要运行转换的情况,最后查看目录中是否有新文件,如果设置为true,则会覆盖它们。否则,文件只运行一次,程序退出。 – Rumel

+0

虽然你是对的,但我忘记了第二个继续转换之外如果设置为true。我必须去解决这个问题。 – Rumel