Я пытаюсь запустить процесс на Mac и Windows (используя Unity), чтобы запустить FFMPEG для преобразования видео в видео .ogv. Мой код выглядит следующим образом:C# Начало процесса на Mac - FFMPEG - Код выхода 1
string command = "ffmpeg -i '" + filepath + "' -codec:v libtheora -qscale:v 10 -codec:a libvorbis -qscale:a 10 -y '"+workingDir+"/ogv_Video/"+System.IO.Path.GetFileNameWithoutExtension(filepath)+".ogv'";
UnityEngine.Debug.Log("Command: "+command);
try{
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo (workingDir+"/..", command);
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.FileName =workingDir+"/ffmpeg";
//Process.Start (startInfo);
Process p = Process.Start(startInfo);
p.EnableRaisingEvents = true;
string strOutput = p.StandardOutput.ReadToEnd();
UnityEngine.Debug.Log ("Running..."+strOutput);
p.WaitForExit();
UnityEngine.Debug.Log ("Got here. "+strOutput);
int exitCode = p.ExitCode;
UnityEngine.Debug.Log ("Process exit code = "+exitCode);
}
catch(Exception e) {
UnityEngine.Debug.Log ("An error occurred");
UnityEngine.Debug.Log ("Error: "+e);
}
Эта команда выполняет и не вызывает никаких исключений. Тем не менее, он завершается мгновенно и печатает Код выхода 1, который является «Catchall для общих ошибок» - это кажется не слишком полезным!
Что я делаю неправильно с моим кодом, пожалуйста?
Вы заметите, что мой код полностью распечатывает команду. Если я скопирую эту команду и вставляю ее в терминал, она работает абсолютно нормально.
Это может помочь http://answers.unity3d.com/questions/161444/how-to-use-processstart-with-arguments-on-osx-in-a.html – Takarii
@Takarii Спасибо за ваш комментарий - к сожалению, я уже делаю это с помощью строки 'startInfo.FileName = workingDir +"/ffmpeg ";' У меня есть копия FFMPEG, хранящаяся в рабочем каталоге проекта (и, в конечном счете, сборка), чтобы я мог гарантировать, где он находится , Я также попытался просто ссылаться на ffmpeg без имени пути до него, но это не сработало –
. Я не очень разбираюсь в единстве, но C# - это моя область. Я знаю, что если вы используете 'system.diagnostics.process.start()' метод, можно использовать в osx, но вам нужно использовать абсолютный путь к программе или файлу – Takarii