2013-05-16 22 views
5

Voglio fare un parser per l'output ffmpeg. Ma quando si esegue ffmpeg solo ed esclusivamente tramiteC# Process.Start() più lento della console

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)); 

è 2/3 più lento di avviarlo in un lotto:

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 

Running in C# ha un fps-rate di 130 (CPU: 100%) , ma eseguendolo con il batch ha 400 fps (CPU 75%).

In entrambi i modi la RAM utilizza e sono uguali, #Handels e #Threads. L'impostazione della priorità del processo su Alta/In diretta non risolverà questo problema né eseguirà il processo in un thread separato.

È normale o può essere risolto?

+0

Hai (o qualcun altro) definito un'affinità del processore per il tuo processo di avvio (o uno dei suoi processi principali)? Utilizzare Process Monitor per scoprire se questo è il caso. L'esecuzione solo al 75% potrebbe indicare che il processo utilizza solo 3/4 dei core disponibili. –

+3

Sembra che siano passati argomenti diversi all'eseguibile che si trova in luoghi diversi. Puoi ricontrollare che gli argomenti sono esattamente gli stessi e che usi esattamente lo stesso eseguibile? – oleksii

risposta

3

quando si avvia l'applicazione utilizzando Process.Start, ti manca un interruttore -pass 1 nel prompt dei comandi, può essere che sta influenzando l'uscita.

AFAIK, la velocità & l'output dell'applicazione avviato mediante Process.Start è stessa sarebbe iniziato in circostanze normali.

Ci può essere un cambiamento dell'1% o del 2% nelle prestazioni, ma ciò è dovuto principalmente alla CPU, all'affinità di processo e alle cose relative al software.

+0

La colpa su di me, hai ragione. L'ho appena perso. Ora i fps sono quasi gli stessi. Grazie. – gu471

Problemi correlati