SoX puede manejar una gran cantidad de formatos de audio, dependiendo de las bibliotecas con las que se compila, y puede concatenar archivos con una simple línea de comando
sox file1.wav file2.mp3 file3.flac outfile.ogg
Creo que esto solo funciona si todos los archivos de audio de origen tienen la misma cantidad de canales, pero no lo he probado.
Hasta donde yo sé, SoX no admite archivos .wma, por lo que probablemente sea inevitable convertir al menos esos archivos con algo como ffmpeg primero.
ffmpeg -i infile.wma outfile.wav
Esta es mi sugerencia:use mplayer y oggenc conectado con una canalización con nombre.
-
Usa
mplayer
para decodificar el audio. Puede reproducir una amplia variedad de formatos de audio (y video), y también puede reproducir varios archivos. -
Usa
oggenc
para codificar el audio en Ogg Vorbis. -
Para eliminar la necesidad de un archivo temporal, utilice una canalización con nombre para transferir los datos entre el codificador y el decodificador.
Poniendo eso en un script:
#!/bin/sh
# Usage: ./combine2ogg destination.ogg source1.wma source2.wma ...
# Requires: mplayer, oggenc
destination="$1"
shift
readpipe="$destination.tmpr"
writepipe="$destination.tmpw"
mkfifo "$readpipe"
mkfifo "$writepipe"
cat "$writepipe" > "$readpipe" &
mplayer -really-quiet -slave -nolirc -vc null -vo null -ao "pcm:fast:file=$writepipe" "[email protected]" &
oggenc --quiet -o "$destination" "$readpipe"
rm -f "$readpipe"
rm -f "$writepipe"
Explicado:
- Tome el nombre del archivo de destino del primer parámetro de la línea de comandos.
- Elimine el primer parámetro de la línea de comando, dejando solo los nombres de los archivos de origen.
- Cree un nombre para una canalización para que oggenc lea.
- Cree un nombre para una canalización para que mplayer escriba
- Crea las tuberías.
- Use cat para volcar continuamente el canal de escritura al canal de lectura (esto ayuda a evitar problemas en los que mplayer puede terminar, pero evita que oggenc piense que está listo cuando esto sucede)
- Decodifique el audio de los archivos fuente usando mplayer. Opciones
-really-quiet -slave -nolirc
están ahí para deshabilitar los mensajes y hacer que no se lea el teclado o el control remoto. Opciones-vc null -vo null
están ahí para deshabilitar la codificación y salida de video. Los-ao
La opción lo dirige a enviar el audio en formato WAV a la canalización de escritura nombrada. - Mientras se ejecuta el comando anterior, codifique simultáneamente desde la canalización de lectura con nombre en Ogg usando oggenc.
- Elimine las canalizaciones con nombre.
Cosas a la izquierda para mejorar:finalizar el script antes de tiempo si uno de los comandos falla (use set -e
), pero aún limpiando adecuadamente el fifo (atrapar las señales necesarias).
Yo usaría ffmpeg. Para convertir wma a ogg vorbis intente:
ffmpeg -i sample.wma -acodec vorbis -aq 100 sample.ogg
o mp3:
ffmpeg -i input.wma -acodec libmp3lame output.mp3
necesitará lame instalado para la conversión de mp3. sudo apt-get install lame libmp3lame0
Cat, luego convert no parece funcionar bien, aunque puedes encontrar muchas referencias en la web que dicen que puedes hacer algo como cat *.wma | ffmpeg -i - -acodec ...
- esto no funciona en mi máquina - solo se procesa el primer archivo. Hay un códec de 'copia' para ffmpeg, pero no hace mucha diferencia.
Hacer la conversión con ffmpeg primero, luego cat *.ogg> output.ogg funcionó para mí.