2013-05-16 49 views
5

我想爲ffmpeg輸出製作解析器。但是,僅僅只能通過C#Process.Start()比控制檯慢

strCmdText = "-y -i \"" + path + "\""; 
strCmdText += " -async 1 -vf yadif -c:v libx264 -b:v 1024k -r 30 -bf 1 -an nul.avi"; 
Process.Start(new ProcessStartInfo("lib\\ffmpeg.exe", strCmdText)); 

運行ffmpeg的時候,它比開始它在一個批次2/3慢:

set FFMPEG="ffmpeg\ffmpeg.exe" 
%FFMPEG% -y -i %1 -async 1 -vf yadif -c:v libx264 -b:v 1024k -r 30 -bf 1 -an -pass 1 nul.avi 

運行在C#中有130的FPS率(CPU:100%) ,但運行與批處理它有400 fps(CPU 75%)。

在這兩種方式RAM使用和是相同的#Handels和#Threads。 將進程優先級設置爲High/Live不會解決此問題,也不會在單獨的線程中運行該進程。

這是正常的,還是可以修復?

+0

您(或其他人)爲您的啓動過程(或其任何父進程)定義了處理器親緣關係嗎?使用進程監視器來查明是否是這種情況。僅運行在75%可能表明該過程僅使用3/4可用內核。 –

+3

您似乎有不同的參數傳遞給位於不同位置的可執行文件。你可以仔細檢查參數是否完全相同,並且你使用完全相同的可執行文件? – oleksii

回答

3

當您使用Process.Start啓動應用程序時,您在命令提示符中缺少-pass 1開關,可能會影響輸出。

AFAIK,速度&通過Process.Start開始的應用程序的輸出與在正常情況下啓動的應用程序的輸出相同。

性能可能會有1%或2%的變化,但這主要是由於cpu,進程親和性以及與hardward相關的事情。

+0

責備我,你是對的。我錯過了它。 現在fps幾乎相同。 謝謝。 – gu471