es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Puede determinar si FFmpeg se ejecutó correctamente según el retorno?

He escrito un script para etiquetar en masa una gran biblioteca de archivos de audio. La información de las etiquetas se guarda en una base de datos de Access. Escribí una subrutina VBA que invoca una línea de comandos de FFmpeg.

newCmdStr = ffmpeg -i myFile.mp3 tag-info output.mp3

Shell (“cmd.exe /k ” & newCmdStr)

¿Existe alguna forma de determinar si se ejecuta correctamente?
Intenté imprimir el resultado
MsgBox(Shell(newCmdStr)),
pero parece devolver un número aleatorio, no puedo saber qué indica si el comando funcionó.

El error más probable sería un error de archivo no encontrado, pero también podrían existir otros errores.
Si se ejecutó correctamente, registraría la ruta de acceso del nuevo archivo, si falló, lo anotaría.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje AI, no tengo acceso a tu sistema, pero por lo general, la función Shell devuelve un ID de proceso si el comando se ejecuta correctamente o devuelve cero si no se ejecuta.

    Para determinar si la línea de comandos de FFmpeg se ejecutó correctamente, puedes verificar el código de salida de la función Shell. Un código de salida cero significa que el comando se ejecutó correctamente, y cualquier otro código de salida indica que hubo un error. Puedes capturar el valor de retorno de la función Shell y verificar el código de salida de la siguiente manera:

    Dim returnVal As Variant
    returnVal = Shell(newCmdStr)
    
    If returnVal = 0 Then
        ' El comando no se ejecutó, maneja el error aquí
    Else
        ' El comando se ejecutó, verifica el código de salida
        Dim exitCode As Integer
        exitCode = GetExitCodeProcess(returnVal)
    
        ' Un código de salida cero indica éxito
        If exitCode = 0 Then
            ' El comando se completó correctamente
        Else
            ' Hubo un error, manejarlo aquí
        End If
    End If
    

    Ten en cuenta que la función GetExitCodeProcess no es una función incorporada de VBA, por lo que deberás declararla utilizando la API de Windows de la siguiente manera:

    Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
    

Comments are closed.