Error al usar el pipe en un archivo por lotes para convertir audio

Iniciado por bien1, 29 Mayo 2012, 20:40 PM

0 Miembros y 2 Visitantes están viendo este tema.

bien1

Hola

Error al usar el pipe en un archivo por lotes para convertir audio

Tengo varios archivos avi cuyo sonido quiero convertir a AAC, pero ahorrandome tiempo de pasar el MP3 a wav, por lo que cree este batch.


for /R %%i in (*.avi) do ffmpeg.exe -y -i "%%i" -acodec pcm_s16le -f wav - | sox -t wav --ignore-length - -t wav - | fhgaacenc.exe --cbr 64 - "%%i".m4a

el cual me da fallo siempre

for /R %%i in (*.avi) do ffmpeg.exe -y -i "%%i" -vn -f wav - | sox -t wav --ignore-length - -t wav - | fhgaacenc.exe --cbr 64 - "%%i".m4a

este tambien

Me gustaria que me dijeran tambien se si puede hacer con archivos mkv con multiples pistas

Saludos y gracias

Eleкtro

Cita de: bien1 en 29 Mayo 2012, 20:40 PMel cual me da fallo siempre

Expón el error que sale... sinó no se como quieres que te ayudemos.
De todas formas lo estás haciendo mal, No hay que usar pipes en tu caso, Sinó "&".

Primero, El ffmpeg requiere que definas el archivo de salida.
Pero no se que estás intentando, En el post se supone que quieres convertir directamente la pista de un avi a AAC, Pero con tu comando del FFMPEG usas el codec PCM (WAV) y fuerzas el formato a WAV, Con lo cual daría un archivo wav en el sox directamente no va a hacer nada porque no defines el archivo, y en el fhgaacenc no lo conozco pero lo intentas convertir a m4a???

Sintaxis correcta:
@Echo off
for /R %%i in (*.avi) do (
   Primer comando con acciones en el archivo %%i
   Segundo comando con acciones en el archivo %%i
   tercer comando con acciones en el archivo %%i
)

REM o así:
for /R %%i in (*.avi) do ("Primer comando con acciones en el archivo %%i" & "Segundo comando con acciones en el archivo %%i" & "tercer comando con acciones en el archivo %%i")





Cita de: bien1 en 29 Mayo 2012, 20:40 PM
Tengo varios archivos avi cuyo sonido quiero convertir a AAC, pero ahorrandome tiempo de pasar el MP3 a wav, por lo que cree este batch.

Código (dos) [Seleccionar]
@Echo off
for /R %%# in (*.avi) do (ffmpeg.exe -y -i "%%#" -acodec libvo_aacenc "%%~n#.aac")
pause


PD: Tambien puedes usar "-acodec aac" aunque es experimental.




Cita de: bien1 en 29 Mayo 2012, 20:40 PM
Me gustaria que me dijeran tambien se si puede hacer con archivos mkv con multiples pistas

El code se puede optimizar, No lo he echo por falta de tiempo para probar otros codecs.

Código (dos) [Seleccionar]
@Echo off

:: By Elektro H@cker

:: Este code extrae todas las pistas de audio de los archivos MKV del directorio de trabajo.

REM Nota 1: mkvmerge y mkvextract los encuentras en la suite MKVToolnix
REM Nota 2: La extensión de los archivos deben ser renombradas manualmente

for /R %%# in (*.mkv) do (
For /F "Tokens=3,5 delims=(): " %%a in ('mkvmerge -i "%%#" ^| Find /I "audio"') Do (
REM Setlocal enabledelayedexpansion
REM If "%%b"=="A_AAC" (Set ext=AAC)
REM mkvextract tracks "%%#" %%a:"%%~n#.%%a.!ext!"
mkvextract tracks "%%#" %%a:"%%~n#.%%a.%%b"
)
)

pause









bien1

Cita de: EleKtro H@cker en 30 Mayo 2012, 10:01 AM
Expón el error que sale... sinó no se como quieres que te ayudemos.
De todas formas lo estás haciendo mal, No hay que usar pipes en tu caso, Sinó "&".

Primero, El ffmpeg requiere que definas el archivo de salida.
Pero no se que estás intentando, En el post se supone que quieres convertir directamente la pista de un avi a AAC, Pero con tu comando del FFMPEG usas el codec PCM (WAV) y fuerzas el formato a WAV, Con lo cual daría un archivo wav en el sox directamente no va a hacer nada porque no defines el archivo, y en el fhgaacenc no lo conozco pero lo intentas convertir a m4a???

Sintaxis correcta:
@Echo off
for /R %%i in (*.avi) do (
   Primer comando con acciones en el archivo %%i
   Segundo comando con acciones en el archivo %%i
   tercer comando con acciones en el archivo %%i
)

REM o así:
for /R %%i in (*.avi) do ("Primer comando con acciones en el archivo %%i" & "Segundo comando con acciones en el archivo %%i" & "tercer comando con acciones en el archivo %%i")





Código (dos) [Seleccionar]
@Echo off
for /R %%# in (*.avi) do (ffmpeg.exe -y -i "%%#" -acodec libvo_aacenc "%%~n#.aac")
pause


PD: Tambien puedes usar "-acodec aac" aunque es experimental.




El code se puede optimizar, No lo he echo por falta de tiempo para probar otros codecs.

Código (dos) [Seleccionar]
@Echo off

:: By Elektro H@cker

:: Este code extrae todas las pistas de audio de los archivos MKV del directorio de trabajo.

REM Nota 1: mkvmerge y mkvextract los encuentras en la suite MKVToolnix
REM Nota 2: La extensión de los archivos deben ser renombradas manualmente

for /R %%# in (*.mkv) do (
For /F "Tokens=3,5 delims=(): " %%a in ('mkvmerge -i "%%#" ^| Find /I "audio"') Do (
REM Setlocal enabledelayedexpansion
REM If "%%b"=="A_AAC" (Set ext=AAC)
REM mkvextract tracks "%%#" %%a:"%%~n#.%%a.!ext!"
mkvextract tracks "%%#" %%a:"%%~n#.%%a.%%b"
)
)

pause



gracias, lo pruebo y te comento.
el unico fallo que veo es que conviertes el audio del video directamente a AAc mediante ffmpeg...

A veces funciona y otras no porque crashea, ya lo probe antes, pero cuando funciona el archivo AAC resultante de ffmpeg no es tan liviano ni tiene la misma calidad de sonido que con nero aac encoder, fhgaacenc de winap, o qaac de quicktime...por eso lo deseche.

SI te digo la verdad, el comando con los pipes lo saque de un foro de edicion de video, el sox no lo conocia muy bien, pero todo lo demas lo deje tal cual. En el ejemplo que copie, usaban el sox para normalizar el audio, que por lo visto el archivo *.WAV resultante del ffmpeg no era aceptado como entrada en los encoders AAC, y usaban los pipes para ahorrarse supongo archivos intermedios y temporales y ahorro de tiempo de ejecucion.

¿Por que en mi caso desaconsejas el uso de pipes? Por los contenedores de videos quizas?
Lo he usado en pasar de mp3 a acc satisfactoriamente.

Gracias por la ayuda.

Eleкtro

Cita de: bien1 en 30 Mayo 2012, 15:23 PM
usaban los pipes para ahorrarse supongo archivos intermedios y temporales y ahorro de tiempo de ejecucion.

¿Por que en mi caso desaconsejas el uso de pipes? Por los contenedores de videos quizas?

Lo que intento decir es que no te puedes "ahorrar archivos intermedios", Al menos no como lo estás haciendo, Con las pipes estás pasando EL OUTPUT al siguiente comando, Con las pipes no le estás pasando ningún archivo con el que pueda trabajar SOX o el otro, Simplemente mandas el output del ffmpeg al sox y al otro.

PD: El tiempo de ejecución va a ser el mismo, Los archivos se tienen que crear igualmente y pasarlos al siguiente programa.

Saludos








bien1

#4
Citar
Lo que intento decir es que no te puedes "ahorrar archivos intermedios", Al menos no como lo estás haciendo, Con las pipes estás pasando EL OUTPUT al siguiente comando, Con las pipes no le estás pasando ningún archivo con el que pueda trabajar SOX o el otro, Simplemente mandas el output del ffmpeg al sox y al otro.

PD: El tiempo de ejecución va a ser el mismo, Los archivos se tienen que crear igualmente y pasarlos al siguiente programa.

Saludos
estoy de acuerdo, pero es mas comodo el pipe. Ademas si funciona bien cada comando por separado, el pipe tendria que funcionar igual de bien en conjunto. Tendre que ir probando y ver donde esta el fallo...

"Primer comando con acciones en el archivo %%i
    Segundo comando con acciones en el archivo %%i
    tercer comando con acciones en el archivo %%i"

He estado pensando y en este codigo que me has puesto, la variable i es el archivo de entrada, por ejemplo: entrada.avi, y en los siguinetes pasos seguiria siendo el mismo, es decir: entrada.avi, y no entrada.wav... podria modificar el segundo comando y poner
%%ni.wav para que procesara el archivo wav resultante del primer comando...

En cuanto a los archivos matroska o los mp4, extraer los streams es sencillo, pero si estan en, por ejemplo mp3 y los quiero convertir a aac, solo puedo hacerlo extrayendo el stream de audio y convirtiendolo por separado? No hay manera de convertirlo directamente?

Uso el pazera audio extractor (con ffmpeg) y los matroska multipista no me deja convertir el audio al deseado...siempre tengo que extraer los streams con el demuxer mkvextract y convertir el audio, tardando mas.

saludos

Eleкtro

Cita de: EleKtro H@cker en 30 Mayo 2012, 15:42 PM
la variable i es el archivo de entrada, por ejemplo: entrada.avi, y en los siguinetes pasos seguiria siendo el mismo, es decir: entrada.avi, y no entrada.wav...
podria modificar el segundo comando y poner
%%ni.wav para que procesara el archivo wav resultante del primer comando...

Si, Supongo que así podrías, Yo uso SOX para cambiar el pitch y grabar audio, Nunca lo he manejado para convertir así que no se que decirte, Pero bueno la documentación la tienes en su web.
Lo único que digo es que si no le indicas el archivo de entrada al SOX no va a saber que hacer con el output del ffmpeg.

PD: "%%~ni.wav"

Cita de: EleKtro H@cker en 30 Mayo 2012, 15:42 PM
extraer los streams es sencillo, pero si estan en, por ejemplo mp3 y los quiero convertir a aac, solo puedo hacerlo extrayendo el stream de audio y convirtiendolo por separado?
No hay manera de convertirlo directamente?
Sinceramente no lo se  :-(. ¿Mp4box no era capaz de codificar en AAC?

saludos