Wie die ffmpeg Umcodierungsprozess Informationen in eine VB6-GUI-Anwendung zu verknüpfen?

StackOverflow https://stackoverflow.com/questions/867383

  •  22-08-2019
  •  | 
  •  

Frage

ich spiele mit einem VB6 GUI-Frontend für ffmpeg und als alles, was ich von jetzt tun kann, ist die ffmpeg über cmd.exe zu nennen, das wird die Eingabeaufforderung zeigt, während der gesamte Prozess noch läuft. Und ich dachte, das die Norm war zu sehen, wie WinFF, ein weiteres pascal basiertes Frontend GUI für ffmpeg funktioniert.

Aber ich war wie weggeblasen, wenn ich diese andere GVC gui, die einen Fortschrittsbalken hat und alles.

Also im Grunde, ich bin auf der Suche in eine Art und Weise, wie ich sauber die ganze Eingabeaufforderung verstecken konnte und verknüpfen Sie die Umcodierung Fortschritte zu einem Fortschrittsbalken in meine gui.

Hier ist also mein Plan, denke ich eine win32 api Funktion zu finden, die ich die cmd Linie nennen kann und noch verstecken, und von einer anderen Diskussion hier , ich glaube, ich die Protokolldatei lesen müsste, um die ffmpeg Fortschritt Informationen zu erhalten.

Also, welche Funktion soll ich für die win32 api nennen? Und hat jemand weiß, von einem besseren / einfacheren Weg, dies zu tun bekommen? Dank

Updates:

Falls jemand interessiert ist, finde ich eine schöne Klassenmodul rel="nofollow, wie das packen cmd Ausgabe in meiner vB6 app, und es ist von keiner geringeren als der großen Joacim :)

War es hilfreich?

Lösung

Ich habe diese genau die gleiche Sache für Java auf OSX geschrieben. Sehr minimalistische Logik:

  • Sie müssen ffmpeg Ausgabe lesen, wie es hergestellt wird.
  • Parse die Ausgangsleitung für Zeile (beide CR und LF)
    • Finden Sie die ‚Dauer‘ Linie, speichern Sie den Zeitwert in Sekunden in eine Ganzzahl. "Dauer: 00.03.18 .48, Beginn: 0.000000, Bitrate: 274 kb / s" (CRLF)
    • Von diesem Punkt an die CR analysieren und suchen Sie die Zeit (in Sekunden) abgeschlossen Werte. "frame = 2816 fps = 667 q = 11.0 LSize = 13036kB time = 187,66 Bitrate = 569.1kbits / s" (CR beendet, kein LF)
    • Sie die Aufteilung (Zeit / Dauer) und Sie haben einen Prozentsatz!

Ich glaube nicht, ffmpeg Schreiben in eine Protokolldatei mit zur Arbeit gehen. Auf * nichts zumindest, ffmpeg schreibt diese Ausgabe err std, und die Statuszeilen, die Sie erfassen müssen, keinen Zeilenvorschub haben und so die vorherige Statuszeile überschreiben. Dies ist etwas, das Sie in Ihrem eigenen Code zu überwinden.

Sorry, kann nicht mit dem VB6 Teil helfen, würde aber annehmen, dass es gerade nach vorne ausgegeben von einem Prozess erfassen Sie berappen.

Andere Tipps

Zuerst entschuldigen mein Englisch ich bin auf Spanisch sprechen. Ich finde die Antwort. 1 / First in den Voreinstellungen setzen, ich habe dieses Beispiel "Ausgabeformat MPEG2 DVD HQ"

"- vcodec mpeg2video -vstats_file MFRfile.txt -r 29,97 es 352x480 -aspect 4: 3 -b 4000k -mbd rd -trellis -mv0 -cmp 2 -subcmp 2 -acodec mp2 -ab 192k -ar 48000 -AC 2"

Dieser Befehl kann eine TXT-Datei machen vergessen Sie nicht, enthält die Befehle „-vstats_file Mitxt.txt“ in den Voreinstellungen wie das Beispiel. dies kann einen Bericht machen, die sie in den Ordner Quelle Ihrer Datei Quelle ubicadet wird. Sie können jeden möglichen Namen, wenn Sie wollen, dann können Sie diese txt withthis Beispiel lesen.

Private Sub Timer1_Timer () Dim strLastLine As String ‚Zum Beispiel meines Ruta "C: \ Dokumente und Einstellungen \ Gortiz \ Mis documentos \ file.txt"

strLastLine = ReadLastLineOfFile ( "C: \ Dokumente und Einstellungen \ Gortiz \ Mis _ documentos \ file.txt" ") Lst1.AddItem strLastLine End Sub

Funktion ReadLastLineOfFile (sFileName As String) As String Dim objFSO, TS Dim sTmpContents As String Set objFSO = Create ( "Scripting.FileSystemObject") Set TS = objFSO.OpenTextFile (sFileName, 1) sTmpContents = TS.ReadAll TS.Close Set TS = Nothing Set objFSO = Nothing

ReadLastLineOfFile = Split (sTmpContents, vbCrLf) (UBound (Split (sTmpContents, vbCrLf)) - 1) End Function

in einem Listenfeld namens lst1 können Sie das Ergebnis sehen, was ist. Bitrate, proceced Frames, Zeit Prozess in Sekunden. etc

Viele Grüße.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top