SoX può gestire un gran numero di formati audio, a seconda delle librerie su cui è compilato, e può concatenare i file con una semplice riga di comando
sox file1.wav file2.mp3 file3.flac outfile.ogg
Credo che funzioni solo se i file audio di origine hanno tutti lo stesso numero di canali, ma non l'ho testato.
Per quanto ne so, SoX non ha alcun supporto per i file .wma, quindi la conversione di almeno quei file con qualcosa come ffmpeg è probabilmente inevitabile.
ffmpeg -i infile.wma outfile.wav
Ecco il mio suggerimento:usa mplayer e oggenc connesso con una named pipe.
-
Usa
mplayer
per decodificare l'audio. Può riprodurre un'ampia varietà di formati audio (e video) e può anche riprodurre più file. -
Usa
oggenc
per codificare l'audio in Ogg Vorbis. -
Per eliminare la necessità di un file temporaneo, usa una named pipe per trasferire i dati tra codificatore e decodificatore.
Mettendolo in uno 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"
Spiegato:
- Prendi il nome del file di destinazione dal primo parametro della riga di comando.
- Rimuovi il primo parametro della riga di comando, lasciando solo i nomi dei file di origine.
- Crea un nome per una pipe da cui leggere oggenc.
- Crea un nome per una pipe in cui mplayer possa scrivere
- Crea le pipe.
- Usa cat per scaricare continuamente il writepipe nel readpipe (questo aiuta a evitare problemi in cui mplayer potrebbe terminare, ma impedisce a oggenc di pensare che sia finito quando ciò accade)
- Decodifica l'audio dai file sorgente usando mplayer. Opzioni
-really-quiet -slave -nolirc
servono per disabilitare i messaggi e per fargli non leggere la tastiera o il telecomando. Opzioni-vc null -vo null
sono lì per disabilitare la codifica e l'output video. Il-ao
l'opzione lo indirizza all'output dell'audio in formato WAV nella pipe di scrittura denominata. - Mentre il comando precedente è in esecuzione, codifica simultaneamente dalla pipe di lettura denominata in Ogg usando oggenc.
- Rimuovi le named pipe.
Cose da migliorare:terminare lo script in anticipo se uno dei comandi fallisce (usa set -e
), ma comunque ripulire correttamente il fifo (intrappolare i segnali necessari).
Userei ffmpeg. Per convertire wma in ogg vorbis prova:
ffmpeg -i sample.wma -acodec vorbis -aq 100 sample.ogg
o mp3:
ffmpeg -i input.wma -acodec libmp3lame output.mp3
avrai bisogno di lame installato per la conversione mp3. sudo apt-get install lame libmp3lame0
Cat, quindi convertire non sembra funzionare bene, anche se puoi trovare molti riferimenti sul web che dicono che puoi fare qualcosa come cat *.wma | ffmpeg -i - -acodec ...
- questo non funziona sulla mia macchina - viene elaborato solo il primo file. Esiste un codec "copia" per ffmpeg, ma non fa molta differenza.
Fare prima la conversione con ffmpeg, poi cat *.ogg> output.ogg ha funzionato per me.