Comment lier les informations de processus de transcodage ffmpeg dans une application GUI VB6?

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

  •  22-08-2019
  •  | 
  •  

Question

Je joue avec une interface graphique pour VB6 ffmpeg et que maintenant tout ce que je peut faire est d'appeler le ffmpeg via cmd.exe qui vous affichera l'invite de commande alors que le processus est toujours en cours. Et je pensais que c'était la norme voir comment WinFF, un autre frontend basé pascals pour les travaux de IUG ffmpeg.

Mais je suis époustouflé quand j'ai vu cet autre GVC qui a IUG une barre de progression et tout.

Donc, fondamentalement, je suis à la recherche dans une façon comment je pouvais cacher proprement l'ensemble invite de commande et relier les progrès de transcoder à une barre de progression dans mon IUG.

Alors, voici mon plan, je pense à la recherche d'une fonction api win32 que je peux appeler la ligne de cmd et encore le cacher, et d'une autre discussion , je pense que je devrais lire le fichier journal pour obtenir les informations de progression ffmpeg.

quelle fonction dois-je appeler à la api win32? Et ne quelqu'un connaît une meilleure / plus facile de réaliser ce but? merci

Mises à jour:

Dans le cas où quelqu'un est intéressé, je trouve un agréable sur la façon de saisir la sortie cmd dans mon application VB6, et il est par nul autre que le grand Joacim :)

Était-ce utile?

La solution

Je l'ai écrit exactement la même chose pour Java sur OSX. logique minimaliste:

  • Vous devez lire la sortie de ffmpeg telle qu'elle est produite.
  • Parse la ligne de sortie de ligne (tous les deux CR et LF)
    • Trouvez la ligne « Durée », stocker la valeur de temps en secondes dans un entier. "Durée: 00:03:18 .48, commencer: 0,000000, bitrate: 274 kb / s" (CRLF terminé)
    • A partir de ce moment, le CR et parse chercher le temps (en secondes) complété les valeurs. "frame = 2816 fps = 667 = 11,0 q = lSize 13036kB temps = 187.66 bitrate = 569.1kbits / s" (CR terminé, aucune LF)
    • Faites la division (temps / durée) et vous avez un pourcentage!

Je ne crois pas avoir ffmpeg écrire dans un fichier journal va travailler. Sur * nix au moins, ffmpeg écrit cette sortie à std err, et les lignes d'état que vous devez capturer ne pas un saut de ligne, et ainsi remplacer la ligne d'état précédent. Ceci est quelque chose que vous pouvez surmonter dans votre propre code.

Désolé, ne peut pas aider avec la partie VB6, mais il suppose qu'il est simple pour capturer la sortie d'un processus vous shell.

Autres conseils

excuse d'abord mon anglais je suis parle en espagnol. Je trouve la réponse. 1 / Tout d'abord mis dans les présélections, j'ai cet exemple "Format de sortie MPEG2 DVD HQ"

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

Cette instruction peut créer un fichier txt ne pas oublier inclut les commandes « -vstats_file Mitxt.txt » dans les présélections comme l'exemple. cela peut faire un rapport qu'il est ubicadet dans la source de dossier de votre fichier source. vous pouvez mettre un nom si vous voulez, vous pouvez lire ce txt AvecCeci exemple.

Private Sub Timer1_Timer () Dim strLastLine As String « Par exemple, mon ruta "C: \ Documents and Settings \ Gortiz \ Mis documentos \ fichier.txt"

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

Fonction ReadLastLineOfFile (sFileName As String) As String Dim objFSO, TS Dim sTmpContents As String 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

dans une zone de liste appelée lst1 vous pouvez vu le résultat qui est. Bitrate, proceced Cadres, Temps de processus en quelques secondes. etc

Cordialement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top