Kommandozeilenausgabe "abgreifen"
-
Hallo!
Ich lese mit folgendem Code die Ausgabe von ffmpeg.exe aus:Dim p As New Process p.StartInfo.UseShellExecute = False p.StartInfo.RedirectStandardOutput = True p.StartInfo.Arguments = "-i C:\test.mp4" p.StartInfo.WorkingDirectory = Application.StartupPath p.StartInfo.FileName = Application.StartupPath & "\ffmpeg.exe" p.Start() Dim sr As IO.StreamReader = p.StandardOutput Dim sb As New System.Text.StringBuilder("") Dim input As Integer = sr.Read Do Until input = -1 sb.Append(ChrW(input)) input = sr.Read Loop
Das Problem ist, dass er dann nichts ausgibt. Wenn ich ein anderen Parameter (z.b. -L für 'License') nehme, funktionierts. Und das "-i C:\test.mp4" funktioniert, weiß ich auch, weil ichs mit ner Batch Datei probiert habe (also "ffmpeg.exe -i C:\test.mp4").
Vielleicht ist jemand so nett, und probiert das mal kurz, und guckt, worans liegen könnte. Wäre wirklich nett!
Christoph
-
Hmm ich hab mir mal die doku kurz durchgelesen.Leite doch die Ausgabe einfach über eine Pipe in eine Datei um und zieh dir dann die Infos.
Oder du verwendest die ffmpeg Gui:
http://thilobrai.onlinehome.de/ffmpegGUI.htm
-
Firefighter schrieb:
Hmm ich hab mir mal die doku kurz durchgelesen.Leite doch die Ausgabe einfach über eine Pipe in eine Datei um und zieh dir dann die Infos.
Oder du verwendest die ffmpeg Gui:
http://thilobrai.onlinehome.de/ffmpegGUI.htmNein! Warum in eine Datei umleiten und anschliessend parsen, wenn der Output direkt in den Stream umgeleitet werden kann!
-
ACHSO!!! Naklar, tja man sollte die Doku richtig lesen -.-
:D:D
Danke dir.
-
Aber ebendas funktioniert ja leider nicht
-
Firefighter schrieb:
ACHSO!!! Naklar, tja man sollte die Doku richtig lesen -.-
:D:D
Danke dir.Hat gar nix mit Doku zu tun. Jedenfalls nicht mit der von ffmpeg...
-
So. Jetzt haben wir uns schön einmal im Kreis gedreht
Vielleicht fällt jetzt jemandem ein, warum die Lösung oben mit ffmpeg.exe nicht funktioniert?
Hat das vielleicht was damit zu tun, dass die Ausgabe ein wenig Zeit braucht, bis sie erscheint? Und die do-Schleife deswegen meint, dass (noch) nichts ausgegeben wurde?
-
Warte doch bis ffmpeg sich wieder beendet hat, mit WaitForExit(..).
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.waitforexit.aspxEdit:
Und für Lesen vom Stream würde ich ReadLine(..) oder ReadToEnd(..) benutzen:
http://msdn.microsoft.com/en-us/library/system.io.streamreader.readline.aspx
http://msdn.microsoft.com/en-us/library/system.io.streamreader.readtoend.aspx
-
Die aktuelle Variante sieht so aus:
Dim p As New Process p.StartInfo.UseShellExecute = False p.StartInfo.RedirectStandardOutput = True p.StartInfo.Arguments = "-i c:\test.mp4" p.StartInfo.WorkingDirectory = Application.StartupPath p.StartInfo.FileName = Application.StartupPath & "\ffmpeg.exe" p.Start() p.WaitForExit() Dim sr As IO.StreamReader = p.StandardOutput MessageBox.Show(sr.ReadToEnd())
Aber es funktioniert einfach nicht.
Komisch ist auch, dass -L geht.
EDIT: Habe grade rausgefunden, dass "ffmpeg -i C:\test.mp4 >ausgabe.txt" eine leere Textdatei produziert. Irgendwas stimmt da nich. Is die Ausgabe von ffpeg irgendwie geschützt? Oder gibt es verschiedene Arten von "Ausgaben"?
-
Prüfe mal ob die Ausgaben auf stderr gemacht werden.
ffmpeg -i C:\test.mp4 2>ausgabe.txt
-
Ja! Das geht. Muss ichs wohl über ne textdatei machen. Wie rufe ich so einen Kommandozeilen-Befehl auf? "ffmpeg.exe -i c:\test.mp4 2>ausgabe.txt"
-
Schau doch einfach mal in die Dokumentation...
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standarderror.aspx