¿Cómo vincular la información del proceso de transcodificación ffmpeg en una aplicación GUI VB6?

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

  •  22-08-2019
  •  | 
  •  

Pregunta

Estoy jugando con una interfaz gráfica de VB6 para ffmpeg ya partir de ahora todo lo puede hacer es llamar al ffmpeg través de cmd.exe la que se muestra el símbolo del sistema, mientras que todo el proceso todavía se está ejecutando. Y pensé que esto era la norma viendo cómo WinFF, otra interfaz gráfica de usuario interfaz basada en Pascal para las obras de FFmpeg.

Sin embargo, me quedé impresionado cuando vi este otro rel="nofollow GVC interfaz gráfica de usuario que tiene una barra de progreso y todo.

Así que, básicamente, estoy buscando una manera cómo podría ocultar limpia toda la línea de comandos y vincular el progreso de transcodificación a una barra de progreso en mi interfaz gráfica de usuario.

Así que aquí está mi plan, yo estoy pensando en encontrar una función API de Win32, que puedo llamar a la línea de cmd y, sin embargo ocultarlo, y de otra discusión aquí , creo que tendría que leer el archivo de registro para obtener la información de progreso ffmpeg.

Así que funcionan ¿Debo llamar a la API de Win32? Y lo hace alguien sabe de una manera mejor / más fácil de hacer esto? gracias

Actualizaciones:

En caso de que alguien está interesado, encuentro un agradable sobre la forma de agarrar el salida cmd en mi aplicación VB6, y es nada menos que el gran Joacim:)

¿Fue útil?

Solución

He escrito exactamente lo mismo para Java en OSX. lógica muy minimalista:

  • Es necesario leer salida de FFmpeg ya que se produce.
  • analizar la línea de salida por la línea (ambos CR y LF)
    • Busque la línea 'duración', almacenar el valor de tiempo en segundos en un número entero. "Duración: 00:03:18 0,48, empezar: 0,000000, tasa de bits: 274 kb / s" (CRLF terminado)
    • A partir de ese punto en adelante, el CR analizar y buscar el tiempo (en segundos) los valores completado. "frame = 2816 fps = 667 q = 11.0 tiempo lSize = 13036kB = 187.66 bitrate = 569.1kbits / s" (CR terminado, no LF)
    • Haga la división (tiempo / duración) y que tiene un porcentaje!

No creo que tenga ffmpeg escritura a un archivo de registro que se va a trabajar. En * nix al menos, ffmpeg escribe esta salida std err, y las líneas de estado que necesita para capturar no tienen un avance de línea, y así sobrescribir la línea de estado anterior. Esto es algo que se puede superar dentro de su propio código.

En este momento, no se puede ayudar con la parte de VB6, pero asumiría que es sencillo para capturar la salida de un proceso de desembolsar.

Otros consejos

En primer lugar disculpe mi Inglés Estoy hablando en español. Encuentro la solución. 1 / En primer lugar poner en las preselecciones, tengo este ejemplo "Formato de salida MPEG2 DVD HQ"

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

Esta instrucción puede hacer que un archivo txt no se olvide incluye los comandos "-vstats_file Mitxt.txt" en los ajustes predefinidos como el ejemplo. esto se puede hacer un informe en el que se ubicadet en el origen de la carpeta del archivo fuente. se puede poner cualquier nombre si lo desea, puede leer este txt withthis ejemplo.

Private Sub Timer1_Timer () Dim como secuencia strLastLine 'Por ejemplo, mi ruta "C: \ Documents and Settings \ Gortiz \ Mis Documentos \ archivo.txt"

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

Función ReadLastLineOfFile (sFileName As String) As String Dim objFSO, TS sTmpContents Dim como secuencia Establecer objFSO = CreateObject ( "Scripting.FileSystemObject") Establecer TS = objFSO.OpenTextFile (sFileName, 1) sTmpContents = TS.ReadAll TS.Close Set TS = nada Establecer objFSO = Nada

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

en un cuadro de lista llamada lst1 se puede ver el resultado que es. Bitrate, proceced Marcos, Tiempo de proceso en cuestión de segundos. etc.

Saludos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top