Entwickler-Ecke

Sonstiges (.NET) - [4.0] process.start => Geschwindigkeit--


gu471 - Mi 15.05.13 17:43
Titel: [4.0] process.start => Geschwindigkeit--
Moin,

ich habe vor den Output von ffmpeg in einem Form grafisch darzustellen, als Vorlage habe ich ein anderes Projekt genommen, welches den Output schon parst.
Zwischendurch habe ich dann mitbekommen, dass die verarbeiteten fps nur bei 130 liegen, wenn ich ffmpeg über

C#-Quelltext
1:
2:
3:
 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));

starte. Wenn ich ffmpeg "analog" über eine Batch starte, also quasi direkt in der Konsole, dann sind die verarbeiteten fps aber bei 400. Die Konvertierungsoptionen sind natürlich gleich.

Ich habe schon ausprobiert ffmpeg über process.start direkt nach dem Laden des Forms zu starten. Selbes Problem.
Ich habe ffmpeg auch schon versucht in einen eigenen Thread auszulagern. Dito.

Weiß jemand ob es generell so ist, dass Prozesse, die über Process.Start aufgerufen werden, langsamer sind?
Und wie kann ich das Problem beheben?

CPU usage bei der Batch ist bei ca. 75%, bei Ausührung über das Form jedoch bei 100%. (Auch außerhalb der Debugumgebung)
RAM usage ist bei beidem gleich.

Die Batch (einfach Video drauf ziehen) zum direkten Vergleich:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
set FFMPEG="ffmpeg\ffmpeg.exe"
set PASS1OPTS=-async 1 -vf yadif -c:v libx264 -b:v 1024k -r 30 -bf 1 -an 
set PASS2OPTS=-async 1 -vf yadif -c:v libx264 -b:v 1024k -r 30 -acodec mp3 -ab 128k -bf 1

:main
if not "%~f1"=="" goto convert
pause
exit

:convert

set PASS1OUT=-y nul.avi
set PASS2OUT="%~dp1%~n1.avi"

Title %~n1 -- pass 1
%FFMPEG% -y -i %1 %PASS1OPTS% -pass 1 %PASS1OUT%
Title %~n1 -- pass 2
%FFMPEG% -y -i %1 %PASS2OPTS% -pass 2 %PASS2OUT%
del ffmpeg2pass-0.log.mbtree
del ffmpeg2pass-0.log
shift

goto main


Grüße
gu471

P.S. Die Prozesspriorität zu erhöhen hilft auch nicht.


gu471 - Do 16.05.13 14:57

Problem gelöst. Ich hatte in C# vergessen den pass 1 mit anzugeben


Ralf Jansen - Do 16.05.13 15:01

Der Vollständigkeit halber
http://stackoverflow.com/questions/16587560/c-sharp-process-start-slower-than-console

PS. Ein Beispiel dafür das wenn man seinen Code auf das wesentliche reduziert andere die Probleme wesentlich leichter sehen ;)