Estoy añadiendo a gbAmp la utilidad de extraer pistas de un archivo de sonido, que a veces sólo consigues todo el disco en un solo archivo o sólo te interesa un trocito de un concierto. Todo muy bien y muy chulo y muy fácil con ffmpeg... pero a la hora de enviar la instrucción al Shell, natis de natis. He probado redirigiendo la salida de errores, he probado con Exec y al final con lo único que funciona es con un terminalview... pero la estética no me gusta nada.
Adjunto un pequeño proyecto que hace lo que digo. Elegid un archivo de disco y marcad un tiempo "desde" y otro "hasta" y una carpeta de salida, un nombre para la pista extraída (incluyendo la extensión) y pulsando "Extraer en terminalview" funciona. Con "Extrayendo con Shell" ni flores...
¿Alguien sabría y podría decirme qué es lo que estoy haciendo mal?
Saludos
Tenéis que tener instalado ffmpeg, claro. Que se me olvidaba decirlo.
Saludos
(08-09-2022, 21:19)Shordi escribió: [ -> ]qué es lo que estoy haciendo mal?
En mi opinión,
no estás haciendo nada malo. Parece que "Shell"

no puede manejar la línea de comando con "ffmpeg".
Cita:En mi opinión, no estás haciendo nada malo.
Cita:Parece que "Shell" no puede manejar la línea de comando con "ffmpeg".
Aaaarrgghh....
Una noche de descanso y la solución se me hace obvia a la primera. No sé a qué se debe que
Shell ...for Read ... no funcione pero está claro que cuando se usa un terminal sí lo hace. ¿Hay pues manera de ejecutar el comando dentro de un terminal virtual? Sí la hay:
Shell... for Input ...
Confieso que no tengo nada clara la diferencia
(Nota mental: leer detenidamente las ayudas sobre los terminales virtuales), pero he cambiado la palabrita y todo perfecto.
¡No hay nada como dormir bien!
Saludos
Lo

más curioso es que, si en tu programa reduzco la línea de comandos con "Shell" a lo esencial:
[code]
es decir sin una variable que apunte al proceso lanzado y sin abrir el proceso en lectura, ...el archivo de audio final

no se crea.
(09-09-2022, 13:47)vuott escribió: [ -> ]Lo
más curioso es que, si en tu programa reduzco la línea de comandos con "Shell" a lo esencial:
[code]
es decir sin una variable que apunte al proceso lanzado y sin abrir el proceso en lectura, ...el archivo de audio final
no se crea.
Efectivamente, algo raro hace ffmpeg...
Saludos
En el programa Splitter [1] que separa el sonido del audio y los vuelve a juntar supongo que debo haber tenido algun problema similar porque uso
Exec en lugar de
Shell, por ejemplo uso estas sentencias.
[1]
https://gambas-es.org/showthread.php?tid...t=splitter
Código:
Public Sub NSplit(sFile As String)
Dim sDir As String
Dim sCmd As String
Dim sKill As Variant
aFiles.clear
If Exist(sFile) Then
If Lower(File.Ext(Dialog.Path)) = "mp4" Then
Inc Application.Busy
sDir = File.Dir(sFile)
sAudio = sDir &/ "audio.mp3"
sMute = sDir &/ "mute.mp4"
sOutput = sDir &/ "denoise.mp4"
For Each sKill In [sAudio, sMute, sOutput]
If Exist(sKill) Then
Shell "rm -f '" & sKill & "'" Wait
Endif
Next
Exec ["ffmpeg", "-i", sFile, "-c", "copy", "-an", sMute] Wait For Read As "Job"
aFiles.Add(sMute)
Exec ["ffmpeg", "-i", sFile, "-map", "0:a", sAudio] Wait For Read As "Job"
aFiles.Add(sAudio)
Dec Application.Busy
If Message.Question(("Audio track was extracted") & gb.NewLine & ("Do you want to open it?"), ("Yes"), ("Cancel")) = 1 Then
Shell "audacity " & sAudio
Endif
Endif
Endif
End
Y para unir:
Código:
Private Function NJoin() As String
If Exist(aFiles[0]) And Exist(aFiles[1]) Then
Exec ["ffmpeg", "-i", aFiles[0], "-i", aFiles[1], "-c:v", "copy", "-c:a", "mp3", sOutput] Wait For Read As "Job"
Endif
End