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?
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. –
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