VB.net und ffmpeg

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von pHaze02.

    VB.net und ffmpeg

    Moinsen,

    also ich arbeite derzeit an einem kleinen Projekt, indem
    ich MP4 Dateien zu MP3 Dateien konvertieren lasse.
    Nun, es klappt auch, jedoch dauert es ewig bis es das komplett konvertiert hat.
    Wenn ich den gleichen Befehl bei mir per CMD ausführe, dauert es bspw.
    bei einem 4 min. Video nur ein paar Sekunden. Per VB dauert
    es mehrere Minuten bis es konvertiert ist.
    Kann mir bitte jemand erklären warum dies so ist?

    Spoiler anzeigen

    Dim proc As New Process()
    proc.StartInfo.UseShellExecute = False
    proc.StartInfo.RedirectStandardInput = True
    proc.StartInfo.RedirectStandardOutput = True
    proc.StartInfo.RedirectStandardError = True
    proc.StartInfo.CreateNoWindow = True
    proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    proc.StartInfo.FileName = Application.StartupPath & "\FF\ff.exe"
    proc.StartInfo.Arguments = " -i """ & FileName & """" & " -vn -f mp3 -ab 192k """ & My.Settings.DLPath & "\" & Key & ".mp3"""
    proc.Start()
    proc.PriorityClass = ProcessPriorityClass.High
    proc.WaitForExit(Timeout)
    If Not proc.HasExited Then
    proc.Kill()
    End If


    Grüße
    @pHaze02 Willkommen im Forum. :thumbup:
    Lass mal das Umlenken der Ausgaben sein, weil Du sie nicht auffängst.
    Dann ist es besser, Du fängst das Excited-Event des Prozesses ab, statt auf seine Beendigung zu warten:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents prc As Process
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. prc = New Process
    5. prc.StartInfo.FileName = "notepad.exe"
    6. prc.EnableRaisingEvents = True
    7. prc.Start()
    8. End Sub
    9. Private Sub prc_exit(sender As Object, e As EventArgs) Handles prc.Exited
    10. MessageBox.Show("Prozess beendet")
    11. End Sub
    12. End Class
    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!

    pHaze02 schrieb:

    somit sind dies auch 3 Prozesse
    Ja und?
    Du solltest ausprobieren, ob die Perdformance der Festplatte oder die der Konvertierung der Flaschenhals ist.
    Teste zunächst, ob 3 Prozesse parallel oder seriell schneller sind.
    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!

    pHaze02 schrieb:

    Der Prozess endet von selber anscheinend garnicht.
    Bei mir tun sie es.
    Poste mal den kompletten Aufruf-Code.
    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!
    So hab ich es getestet.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents prc As Process
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. prc = New Process
    5. prc.StartInfo.UseShellExecute = False
    6. prc.StartInfo.RedirectStandardInput = True
    7. prc.StartInfo.RedirectStandardOutput = True
    8. prc.StartInfo.RedirectStandardError = True
    9. prc.EnableRaisingEvents = True
    10. prc.StartInfo.WindowStyle = ProcessWindowStyle.Normal
    11. prc.StartInfo.FileName = "C:\Users\haze2\Desktop\ff.exe"
    12. prc.StartInfo.Arguments = " -i """ & "C:\Users\haze2\Downloads\Feint - Shockwave (feat. Heather Sommer) [NCS Release].mp4" & """ -vn -f mp3 -ab 192k """ & "C:\Users\haze2\Desktop\Test.mp3"""
    13. prc.Start()
    14. End Sub
    15. Private Sub prc_exit(sender As Object, e As EventArgs) Handles prc.Exited
    16. MessageBox.Show("Prozess beendet")
    17. End Sub
    18. End Class
    @pHaze02

    RodFromGermany schrieb:

    Lass mal das Umlenken der Ausgaben sein, weil Du sie nicht auffängst.
    Lösch diese Zeilen:

    VB.NET-Quellcode

    1. prc.StartInfo.RedirectStandardInput = True
    2. prc.StartInfo.RedirectStandardOutput = True
    3. prc.StartInfo.RedirectStandardError = True
    Ansonsten sieht es bei mir genau so aus.
    Allerdings habe ich einen großen Unterschied, ob ich das auf meinem Desktop oder meinem Laptop laufen lasse, die schnelle Festplatte macht da viel aus.

    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!