我試圖從命令行應用程序中使用ffmpeg庫將一些avi文件轉換爲mkv。我做了一個方法,可以讓我做到這一點:System.Diagnostics.Process程序繼續運行
public bool convertAvitoMkv(string path, string sourceName, string destName)
{
bool returncode = false;
try
{
string comando = string.Format("-i {0} -c:v libx264 -crf 19 -preset slow -c:a libfaac -b:a 192k -ac 2 {1}", string.Format("{0}\\{1}",path,sourceName), string.Format("{0}\\{1}",path,destName) + ".mkv");
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "ffmpeg.exe";
startInfo.WorkingDirectory = programPath;
startInfo.CreateNoWindow = true;
startInfo.Arguments = comando;
process.StartInfo = startInfo;
process.Start();
while (!process.HasExited)
{
process.Kill();
//continue hasta que termine la ejecucion
}
returncode = process.HasExited;
}
catch (Exception ex)
{
}
return returncode;
}
以前的版本沒有的,而(!process.HasExited),但我說,因爲我注意到,有很多的ffmpeg的實例。 EXE運行,我不得不手動關閉。我如何保證每次轉換都已完成,並且ffmpeg的每個實例都已關閉? 關於
當您嘗試手動轉換相同的文件時(通過直接從命令行運行它),ffmpeg是否會掛起? – xxbbcc
啓動它後,你正在殺死進程 - 啓動一個進程是一個漫長而耗時的過程,調用'Start'後'HasExited'幾乎保證爲'false'。你應該使用'Process.WaitForExit'來代替。 https://msdn.microsoft.com/en-us/library/ty0d8k56%28v=vs.110%29.aspx – xxbbcc
原來的行while(!process.HasExited) { process.Kill(); } 不在那裏。我在任務管理器上看到很多ffmpeg進程後添加了這些進程,以避免這種情況,但它沒有工作 – edotom