GNU/Linux >> Tutoriales Linux >  >> Linux

Comando de Linux para concatenar archivos de audio y enviarlos a ogg

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:

  1. Tome el nombre del archivo de destino del primer parámetro de la línea de comandos.
  2. Elimine el primer parámetro de la línea de comando, dejando solo los nombres de los archivos de origen.
  3. Cree un nombre para una canalización para que oggenc lea.
  4. Cree un nombre para una canalización para que mplayer escriba
  5. Crea las tuberías.
  6. 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)
  7. 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.
  8. Mientras se ejecuta el comando anterior, codifique simultáneamente desde la canalización de lectura con nombre en Ogg usando oggenc.
  9. 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í.


Linux
  1. Encuentra archivos y directorios en Linux con el comando de búsqueda

  2. Convierta archivos de audio con este versátil comando de Linux

  3. Linux:almacenado en archivos /dev/pts y ¿podemos abrirlos?

  4. Comando mcopy en Linux

  5. Encuentre múltiples archivos y cámbieles el nombre en Linux

40 Comando lsof simple y efectivo en el sistema Linux

Cat Command en Linux:ejemplos esenciales y avanzados

Explicado:entrada, salida y redirección de errores en Linux

Comando ls en Linux/UNIX

Comando tar de Linux para comprimir y extraer archivos

Comando SCP de Linux para transferir archivos de forma segura