Come collegare le informazioni processo di transcodifica ffmpeg in un'applicazione VB6 GUI?

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

  •  22-08-2019
  •  | 
  •  

Domanda

sto giocando con una GUI frontend VB6 per ffmpeg e fin d'ora tutti i può fare è chiamare il ffmpeg tramite cmd.exe che sarà mostra la riga di comando, mentre l'intero processo è ancora in esecuzione. E ho pensato che questo era la norma vedere come WinFF, un'altra pascal GUI basata frontend per lavori di ffmpeg.

Ma sono rimasto senza parole quando ho visto questo altro rel="nofollow GVC gui che ha una barra di avanzamento e tutto.

Quindi, in pratica, sto cercando in un modo come ho potuto in modo pulito nascondere il prompt dei comandi insieme e collegare il progresso transcodifica ad una barra di avanzamento nella mia gui.

Quindi, ecco il mio piano, sto pensando di trovare una funzione API Win32 che posso chiamare la linea cmd e tuttavia nasconderlo, e da un'altra discussione qui , penso che avrei dovuto leggere il file di registro per ottenere le informazioni di avanzamento ffmpeg.

Quindi, quale funzione devo chiamare per le API Win32? E lo fa qualcuno conosce un modo migliore / più semplice per ottenere questo fatto? grazie

Aggiornamenti:

Nel caso in cui qualcuno è interessato, ho trovato un bel modulo di classe su come afferrare il uscita cmd nella mia VB6 app, ed è nientemeno che il grande Joacim:)

È stato utile?

Soluzione

Ho scritto questa stessa identica cosa per Java su OSX. logica molto minimalista:

  • Hai bisogno di leggere l'uscita ffmpeg come viene prodotto.
  • Analizzare la linea di uscita per riga (sia CR e LF)
    • Trovare la riga 'Durata', memorizzare il valore del tempo come secondi in un numero intero. "Durata: 00:03:18 0,48, inizio: 0.000000, bitrate: 274 kb / s" (CRLF terminato)
    • Da quel punto in poi, analizzare il CR e cercare il tempo (in secondi) valori completato. "frame = 2816 fps = 667 q = 11.0 tempo lSize = 13036kB = 187.66 bitrate = 569.1kbits / s" (CR terminato, senza LF)
    • Fare la divisione (tempo / durata) e si dispone di una percentuale!

Non credo dover ffmpeg in scrittura a un file di log è andare a lavorare. Su * nix almeno, ffmpeg scrive questa uscita a std err, e le linee di stato che è necessario acquisire non hanno un avanzamento di riga, e così sovrascrivere la riga di stato precedente. Questo è qualcosa che si può superare entro il proprio codice.

Siamo spiacenti, non può fare con la parte VB6, ma assumerebbe è dritto in avanti per acquisire l'output di un processo di sborsare.

Altri suggerimenti

prima scusa il mio inglese io sono parlare a spagnolo. Trovo la risposta. 1 / In primo luogo mettere in preset, ho questo esempio "Formato di uscita MPEG2 DVD HQ"

"- vcodec mpeg2video -vstats_file MFRfile.txt -r -s 29.97 352x480 -aspect 4: 3 -b 4000k ° -mbd -trellis -mv0 -cmp 2 -subcmp 2 MP2 -acodec -a ter 192k -ar 48000 -ac 2"

Questa istruzione può rendere un file txt non dimenticate include i comandi "-vstats_file Mitxt.txt" nelle impostazioni predefinite, come l'esempio. questo può fare una relazione che è ubicadet nella fonte cartella di vostra origine del file. si può mettere tutto il nome, se si desidera, allora si può leggere questo txt withthis esempio.

Private Sub Timer1_Timer () Dim strLastLine As String 'Ad esempio il mio ruta "C: \ Documents and Settings \ Gortiz \ Mis documentos \ file.txt"

strLastLine = ReadLastLineOfFile ( "C: \ Documents and Settings \ Gortiz \ Mis _ documentos \ file.txt" ") Lst1.AddItem strLastLine End Sub

ReadLastLineOfFile Function (sFileName As String) As String Dim objFSO, TS sTmpContents Dim come stringa Set objFSO = CreateObject ( "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 una casella di riepilogo chiamato LST1 è possibile visto il risultato che è. Bitrate, proceced cornici, Tempo di processo in secondi. etc

Saluti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top