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.