FFMPEG in For Schleife

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von DTF.

    FFMPEG in For Schleife

    Hi,

    Ich möchte FFMPEG in einer For Schleife mehrfach ausführen. Das habe ich wie folgt versucht:

    VB.NET-Quellcode

    1. Private Function RunBatch(prog As String, parm As String) As Boolean
    2. Try
    3. Dim myProcess = New Process()
    4. myProcess.StartInfo.FileName = prog
    5. myProcess.StartInfo.Arguments = parm
    6. myProcess.Start()
    7. myProcess.WaitForExit(100)
    8. Catch ex As Exception
    9. MsgBoxDark.Show("RUNBATCH " & prog & " " & parm & NewLine2 & ex.Message)
    10. Return False
    11. End Try
    12. Return True
    13. End Function


    Ich dachte, dass nach dem Start dannn auf das Ende von FFMPEG maximal 100 Sekunden gewartet wird.

    Tatsächlich rennt das Programm aber einfach weiter, was dazu führt, dass mein FFMPEG mehrfach parallel in verschiedenen CMD Fenstern ausgeführt wird. Da hab ich wohl etwas falsch verstanden.

    Um es noch einmal klar zu sagen: ich möchte, dass die FFMPEG Aufrufe "einer nach dem anderen" ausgeführt werden.

    Ich hoffe, ich habe mein Anliegen klar machen können. Kann mir jemand nachsichtig helfen?

    LG
    Peter

    Peter329 schrieb:

    VB.NET-Quellcode

    1. Dim myProcess = New Process()
    Diese Instanz sollte außerhalb der Prozedur in der Klasse liegen.
    Sieh Dir mal im TaskManager an, wie viele Kernels eine ffmpeg-Instanz auslastet.
    Danach überlege Dir, wie viele ffmpeg-Instanzen Du parallel zueinander laufen lassen willst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Bluespide

    Jau .... das sind MILIsekunden ... verdammt, das habe ich doch glatt überlesen! Jetzt schnackelt die Sache. Herzlichen Dank für deinen nachsichtigen Rat. :)

    @RFG

    "Diese Instanz sollte außerhalb der Prozedur in der Klasse liegen."

    Jau, das habe ich mir eigentlich auch schon gedacht ... habe ich gemacht. Hier ist mein aktuelles Coding:

    VB.NET-Quellcode

    1. Dim myProcess As Process = New Process()
    2. Private Function RunBatch(prog As String, parm As String) As Boolean
    3. Try
    4. Dim info As ProcessStartInfo = New ProcessStartInfo(prog, parm)
    5. myProcess.StartInfo = info
    6. myProcess.Start()
    7. If Not myProcess.WaitForExit(100000) Then
    8. MsgBoxDark.Show("prog: " & prog & " has timed out" & NewLine2 &
    9. "parm: " & parm)
    10. Return False
    11. End If
    12. Catch ex As Exception
    13. MsgBoxDark.Show("RUNBATCH " & prog & " " & parm & NewLine2 & ex.Message)
    14. Return False
    15. End Try
    16. Return True
    17. End Function


    Jetzt laufen die einzelnen FFMPEG Aufgaben der Reihe nach ab und ich kann dabei "zuschauen" ...

    Was ich jetzt noch gern hätte: wie kann ich denn die einzelnen FFMPEG Ausgaben in einen File schreiben ? Ich habe das mit der Umleitung " .... > test.txt" versucht .... die Ausgabe Datei wird zwar erstellt aber sie ist leider leer ?

    Das sollte doch zu machen sein ...

    LG
    Peter

    parm & " > test.txt"

    versucht ... aber das funktioniert nicht. "test.txt" wird zwar erstellt ist aber leer. Ich vermute mal, dass ich die Ausgabe irgendwie anders zuordnen muss.

    LG
    Peter
    @Peter329 Hast Du dies getan:

    RodFromGermany schrieb:

    Sieh Dir mal im TaskManager an, wie viele Kernels eine ffmpeg-Instanz auslastet.
    Nein. Ich weiß.
    Alle Kernels sind von einer einzigen ffmpeg-Instanz zu 100 % ausgelastet.

    Wenn Du das verinnerlichst, lässt Du nur eine einzige ffmpeg-Instanz laufen :!:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Wenn Du das verinnerlichst, lässt Du nur eine einzige ffmpeg-Instanz laufen


    Also ich habe mir das mir der Ressourcen Nutzung von FFMPEG schon angesehen. Aufgrund meines Fehlers

    VB.NET-Quellcode

    1. myProcess.WaitForExit(100)


    hat die Schleife nicht gewartet ... und damit sind rund 30 FFMPEG Konvertierungen auf einen Schlag angelaufen. Danach war mit meinem PC erst mal eine ganze Weile nix mehr los. :)

    Das war der Grund, weshalb ich mich an das Forum gewandt habe.

    Jetzt habe ich die Sache zu

    VB.NET-Quellcode

    1. If Not myProcess.WaitForExit(100000) Then ... Return False


    abgeändert. Damit wird bis zu 100 Sekunden gewartet ... und wenn das nicht ausreicht, wird die FOR Schleife aufgrund des "Return False" verlassen.

    Die For Schleife ist damit beendet, die FFMPEG Box läuft aber noch! Die kann ich dann bei Bedarf manuell vorzeitig beeenden oder das Ende abwarten.

    Mein VB Programm ist restartfähig, d.h. nach einem Neustart macht es automatisch da weiter, wo es zuvor beendet wurde. Natürlich starte ich mein Programm erst, wenn die laufende FFMPEG Box normal oder abnormal beendet wurde.

    Mit anderen Worten, es wird maximal EINE FFMPEG Instanz parallel gestartet.

    Das müsste doch das sein, was du hier angemahnt hast ? Oder habe ich etwas übersehen?

    Ansonsten ist meine Frage noch offen, wie ich die Ausgabe in eine Datei umleiten kann.

    LG
    Peter

    Peter329 schrieb:

    Ansonsten ist meine Frage noch offen, wie ich die Ausgabe in eine Datei umleiten kann.


    DTF schrieb:

    Ich denke du gehst da falsch ran. Warum redirectest du nicht den Standart In- und Out-put? Starte ffmpeg gib im was zu tun, werte den Output aus. Wenn fertig, nächsten Input machen.


    Wenn du den Output liest, kannst ihn auch selbst sonstwo hin schreiben. Arbeitest du so wie ich empfohlen hab, dann sparst du auch das warten, musst dann auch nicht wie jetzt u.U. dein Programm neu starten.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Ich klinke mich hier nochmal kurz ein. @Peter329 Findest Du nicht auch das das ein ziehmlicher Krampf per ffmpeg ist? Also ich schon. Ich möchte evtl. nochmal daran erinnern, das ab WinVista die MediaFoundation zum konvertieren, zusammenfügen usw zur Verfügung steht. Die MediaFoundation liefert Dir auch entsprechende Events auf die Du reagieren kannst und Infos zu den Audio- und Videodateien/Streams. Ab Win10 steht Dir zusätzlich die WinRT zur Verfügung die Dir ebenfalls die Möglichkeiten bietet, Audio- und Videodateien zu konvertieren usw. Man muss sich nur mit den in Windows vorhandenen Schnittstellen beschäftigen.
    Mfg -Franky-

    -Franky- schrieb:

    ziehmlicher Krampf per ffmpeg ist


    Also wenn man damit umgehen kann ist das garnicht so verkrampfend. Ich hab mittlerweile einen Stapel von Batchdateien für verschiedene Szenarien. Brauch sie nur kopieren und starten. FFPmeg ist wie der VLC, frisst wirklich alles. Weis nicht wie mächtig die Windows Boardmittel da sind, aber FFMpeg ist IMO das nunplusultra. Zudem sammelt Windows immer mehr Daten, wer weis an welchen Stellen überall, gerade die Mediainterfaces wären die Perfekte Quelle dafür, daher hab ich da schon Bedenken, wie bei vielen Sachen von MS. Oh, der konvertiert viele Videos, Titel sind von Filmen. Raubkopierer? Der kriegt jetzt werbung von Streaming Apps. Hat er "Gelegentlich Vorschläge im Startmenu anzeigen" aktiv? Den zieh ich jetzt die App von Streamingdienst... drauf....... MS bekommt dann evtl. einen Penny Provision, MS Ceo ist glücklich, User wundert sich: Wo kommt das denn jetzt her?
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „DTF“ ()

    DTF schrieb:

    Warum redirectest du nicht den Standart In- und Out-put? Starte ffmpeg gib im was zu tun, werte den Output aus. Wenn fertig, nächsten Input machen.


    na ja, das klingt ja ganz vernünftig ... nur ist mir die Anleitung WAS ich denn da genau tun soll nicht so ganz verständlich ...

    Wie gebe ich denn dem FFMPEG das was zu tun ist ? Wie kann ich darauf im Fehlerfall reagieren (wenn z.B. ein File nicht konvertiert, dann macht es ja keinen Sinn die Files zu verketten und ich hätte auch noch gern eine vernünftige Fehlermeldung welcher File scheitert ) ... ich bin mir nicht so ganz sicher, ob sich mit deiner Technik meine Anforderungen erfüllen lassen ...

    @Franky

    Deinen Hinweis auf die Media Foundation habe ich schon zur Kenntnis genommen ... aber das werde ich dann erst beim nächsten Projekt in Angriff nehmen. Nachdem mein Konvertierer recht gut funktioniert will ich da jetzt nicht mehr alles über den Haufen werden.

    Es sollte doch eine einfache Möglichkeit geben den Output von meinem Process.Start in einen File zu bekommen ... ? Das ist eigentlich der einzige offene Wunsch den ich noch habe ...

    LG
    Peter

    Peter329 schrieb:

    Es sollte doch eine einfache Möglichkeit geben den Output von meinem Process.Start in einen File zu bekommen ... ?


    Wenn das wie mit Batch > outputfile.txt 2> errorfile.txt nicht klappt.

    Der Standart Output ist das was du willst, für Fehler: ProcessStartInfo.RedirectStandardError. Suche nach: ProcessStartInfo.RedirectStandardOutput, ich wette hier im Forum wirst du fündig.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    DTF schrieb:

    Ich hab mittlerweile einen Stapel von Batchdateien für verschiedene Szenarien. Brauch sie nur kopieren und starten.
    Das ist ein kleiner Unterschied zu "aus einer NET-Anwendung heraus"

    DTF schrieb:

    FFPmeg ist wie der VLC, frisst wirklich alles.
    In dem Punkt gebe ich Dir vollkommen Recht. Die MediaFoundation kann nicht alles lesen oder schreiben. MP4 ist aber für die MF kein Problem.

    DTF schrieb:

    Zudem sammelt Windows immer mehr Daten, wer weis an welchen Stellen überall, gerade die Mediainterfaces wären die Perfekte Quelle dafür,...
    Jetzt malst aber ein sehr dunkles Szenario. Dann verwendest Du das falsche OS wenn Du solche Bedenken hast. ;) Entsprechende Daten könntest auch schon beim erstellen oder kopieren von Audio- oder Videodateien auslesen. Von daher....
    Mfg -Franky-

    -Franky- schrieb:

    Dann verwendest Du das falsche OS wenn Du solche Bedenken hast.


    Aufgrund mangelnder Alternativen. Ich verwende auch O&O Shutup, das macht Windows schweigsamer. Spielen und entwickeln geht zwar auch auf Linux, aber da ist Windows IMO einfach besser, sowohl zum spielen , auch da ich hauptsächlich für Windoss Software schreibe. Hab auch schon über eine Hardware Firewall für daheim nachgedacht um den Großteil der MS-IPs zu blocken, aber da könnte es Probleme mit Windows-Updates geben, Sicherheitsupdates will ich dann doch haben.

    Ein wenig übertrieben was ich jetzt sage, aber ich traue Firmen zu, wenn sie feststellen könnten mit welcher Hand wir uns den Hintern abwischen, erfinden die glatt Links- und Rechts-händerklopapier. Genauso wie diese Greenwashing-Labels die uns vergauckeln, das ein Produkt Klimaneutral ist(weil das Thema Klima aktuell sehr Viral ist und die einen guten Eindruck machen wollen), was nachweislich einfach unwahr ist in fast allen Fällen.(Gucke dazu mal nach der Reportage von ZDF Frontal vom letzten Dezember) . Blos alle zum kaufen von Dingen animieren die keiner wirklich braucht und Geld schaufeln, aber gleich mit einem Radlader wie sie in Tagebaus eingesetzt werden.

    Das einzige wo ich Telemetry zulasse, ist Visual Studio. Wann ich arbeite, wie viel, an was, das kann MS ruhig wissen um VS zu verbessern, da habe ich Hoffnung das VS dadurch noch besser wird. Aber die Windows-Telemetry hat Windows IMO nicht wirklich besser gemacht. Nein MS weis dadurch was für Software drauf ist und dann packen die deren Eigenbräu nicht deinstallierbar ins OS, das ist kein Forschritt. Im Gegenteil, das ist Gefährlich. Beispeil MS-Paint und Paint.NET, da MS Paint verbessert wurde und nun auch Layer unterstützt, wird Paint.NET möglicherweise irgendwann eingestampft. So wird es weniger und weniger Alternativen geben und MS noch mächtiger.

    -Franky- schrieb:

    Entsprechende Daten könntest auch schon beim erstellen oder kopieren von Audio- oder Videodateien auslesen. Von daher....


    Durchaus, aber dann fehlt Kontext. Man darf es Datenkraken auch nicht zu einfach machen. Auch wenn die Nutzung von FFMpeg durchaus auch Kontext schafft. Aber stream er die Datei damit? Konvertiert er sie damit? Alles kann MS da auch nicht erfassen, das bei allen möglichen Dateietypen und 3rd Party Programmen zu erfassen wäre nicht wirklich so trivial, als wie es bei den Windowsinternen Dingen wäre.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 10 mal editiert, zuletzt von „DTF“ ()