elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Error al usar el pipe en un archivo por lotes para convertir audio
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error al usar el pipe en un archivo por lotes para convertir audio  (Leído 3,483 veces)
bien1

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Error al usar el pipe en un archivo por lotes para convertir audio
« en: 29 Mayo 2012, 20:40 pm »

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.


Código:
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

Código:
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


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Error al usar el pipe en un archivo por lotes para convertir audio
« Respuesta #1 en: 30 Mayo 2012, 10:01 am »

el 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:
Código:
@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")



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
  1. @Echo off
  2. for /R %%# in (*.avi) do (ffmpeg.exe -y -i "%%#" -acodec libvo_aacenc "%%~n#.aac")

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



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
  1. @Echo off
  2.  
  3. :: By Elektro H@cker
  4.  
  5. :: Este code extrae todas las pistas de audio de los archivos MKV del directorio de trabajo.
  6.  
  7. REM Nota 1: mkvmerge y mkvextract los encuentras en la suite MKVToolnix
  8. REM Nota 2: La extensión de los archivos deben ser renombradas manualmente
  9.  
  10. for /R %%# in (*.mkv) do (
  11. For /F "Tokens=3,5 delims=(): " %%a in ('mkvmerge -i "%%#" ^| Find /I "audio"') Do (
  12. REM Setlocal enabledelayedexpansion
  13. REM If "%%b"=="A_AAC" (Set ext=AAC)
  14. REM mkvextract tracks "%%#" %%a:"%%~n#.%%a.!ext!"
  15. mkvextract tracks "%%#" %%a:"%%~n#.%%a.%%b"
  16. )
  17. )
  18.  


En línea

bien1

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Error al usar el pipe en un archivo por lotes para convertir audio
« Respuesta #2 en: 30 Mayo 2012, 15:23 pm »

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:
Código:
@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
  1. @Echo off
  2. for /R %%# in (*.avi) do (ffmpeg.exe -y -i "%%#" -acodec libvo_aacenc "%%~n#.aac")

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
  1. @Echo off
  2.  
  3. :: By Elektro H@cker
  4.  
  5. :: Este code extrae todas las pistas de audio de los archivos MKV del directorio de trabajo.
  6.  
  7. REM Nota 1: mkvmerge y mkvextract los encuentras en la suite MKVToolnix
  8. REM Nota 2: La extensión de los archivos deben ser renombradas manualmente
  9.  
  10. for /R %%# in (*.mkv) do (
  11. For /F "Tokens=3,5 delims=(): " %%a in ('mkvmerge -i "%%#" ^| Find /I "audio"') Do (
  12. REM Setlocal enabledelayedexpansion
  13. REM If "%%b"=="A_AAC" (Set ext=AAC)
  14. REM mkvextract tracks "%%#" %%a:"%%~n#.%%a.!ext!"
  15. mkvextract tracks "%%#" %%a:"%%~n#.%%a.%%b"
  16. )
  17. )
  18.  


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.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Error al usar el pipe en un archivo por lotes para convertir audio
« Respuesta #3 en: 30 Mayo 2012, 15:42 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
En línea

bien1

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Error al usar el pipe en un archivo por lotes para convertir audio
« Respuesta #4 en: 30 Mayo 2012, 17:34 pm »

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
« Última modificación: 1 Junio 2012, 10:13 am por EleKtro H@cker » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Error al usar el pipe en un archivo por lotes para convertir audio
« Respuesta #5 en: 1 Junio 2012, 10:14 am »

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"

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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines