2012-06-11 4 views
1

Я работаю над написанием программы для пакетного конвертирования видеофайлов с использованием HandbrakeCLI в качестве конвертера. У меня есть большая часть из них, и я фактически работаю над передачей файла Handbrake сейчас. Я создаю новый процесс с расположением HandbrakeCLI и передаю аргументы. Я также делаю так, чтобы он выполнялся в одной оболочке. Он вращается, а затем начинает переходить к конвертации и получает до трех кадров или около того и убивает себя. Я использую Visual Studio 12 в Windows 8 64 бит. Вот мой код:Самопроизвольное убийство

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.

Edit: Исправлен код

ответ

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

Я думаю, вы действительно не хотите продолжить!

Похоже, что это неправильно для начала.

+0

Это не похоже на проблему - сначала посмотрите на цикл, вы дойдете до этого момента только при успешном преобразовании всех видеороликов. – Bond

+0

Это в моем цикле while после итерации по всем видео. Этот параметр предназначен, если пользователь хочет запустить преобразования, а затем в конце увидеть, есть ли новые файлы в каталоге, и если установлено значение true, они будут перебирать их. В противном случае файлы просто запускаются один раз, и программа завершается. – Rumel

+0

Вы правы, хотя я забыл, что второй продолжит преобразование вне if, если установлено значение true. Я должен это исправить. – Rumel