Autor Beitrag
gu471
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 15.05.13 17:43 
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
ausblenden 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:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 16.05.13 14:57 
Problem gelöst. Ich hatte in C# vergessen den pass 1 mit anzugeben
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 16.05.13 15:01 
Der Vollständigkeit halber
stackoverflow.com/qu...-slower-than-console

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