Você pode fazer isso com ffmpeg
e sox
:
for i in *.mp3 *.ogg *.flac
do
ffmpeg -i "$i" "$i.wav"
done
sox *.wav combined.wav
Eu tenho 33 arquivos de áudio, cada um com cerca de 11 segundos de duração, e gostaria de mesclá-los em um arquivo sem perdas. Como posso fazer isso de forma eficiente (ou seja, sem recortar no Audacity 33 vezes)?
Supondo que você queira mesclá-los em ordem alfabética, por nome de arquivo:
for f in ./*.{ogg,flac,mp3}; do echo "file '$f'" >> inputs.txt; done
ffmpeg -f concat -i inputs.txt output.wav
O loop para coloca todos os nomes de arquivos em um arquivo chamado inputs.txt, um por linha, e o segundo usa O concat do ffmpeg demuxer para mesclar os arquivos. É possível usar printf em vez do loop da seguinte forma:
printf "file '%s'\n" ./*.{ogg,flac,mp3} > inputs.txt
Assumindo um shell moderno, você também pode usar a substituição de comandos para fazer tudo em uma única linha.
ffmpeg -f concat -i <(printf "file '%s'\n" ./*.{ogg,flac,mp3}) output.wav
Se você começar apenas com arquivos sem perdas, use shntool :
shntool join *.flac
Parece que o Sound Juicer que acompanha o Ubuntu grava arquivos FLAC quebrados, o que resulta em nenhuma assinatura MD5 no arquivo. FAÇA UMA CÓPIA do diretório que contém os arquivos que você deseja concatenar e, em seguida, execute o script abaixo.
echo fixing broken FLAC files
find . -type f|grep .flac$ |while read file
do
flac -f --decode "$file" -o temp.wav
flac -f -8 temp.wav -o "$file"
done
rm temp.wav
Em seguida, execute o shntool join *.flac
como acima.
No entanto, esteja ciente de que a junção shntool irá insistir em juntá-los na ordem de ordenação (alfabética), mesmo que você os especifique de outra forma.
shntool join fileB.flac fileA.flac
colocará A antes de B.
Você pode renomear os arquivos primeiro ou usar o parâmetro -r ("-r ask" solicitará o pedido).
Francamente eu acho isso irritante ...
Além disso, você pode forçar o modo de saída, por isso, se estiver ingressando nos FLACs:
shntool join *.flac -o flac
resultará em joined.flac em vez de joined.wav