Para concatenar e transcodificar arquivos de áudio, este é o fluxo de trabalho que você deseja seguir:
- Decodifique os arquivos de áudio de entrada para dados WAV / PCM,
- Concatenar WAV,
- Codifique o WAV para emitir o arquivo de codec de áudio.
O processamento nessas etapas realiza a concatenação nos dados WAV, que é o mais fácil de lidar e o menos com perdas. E como você deseja transcodificar de qualquer maneira, precisará decodificar para WAV em algum lugar do processo; pode muito bem tirar proveito disso.
Aqui estão os passos que eu recomendo. Usaremos ffmpegpara decodificação, soxconcatenação e oggenccodificação. Você pode substituir outras ferramentas por qualquer etapa - mencodere outras funcionam bem como decodificador, e qualquer ferramenta que codifique Ogg pode ser usada como codificador - embora eu ache que você será pressionado a encontrar uma ferramenta melhor do que soxa concatenação.
find *.wma -exec ffmpeg -i {} outfile.{}.wav \;
(isso é executado ffmpeg -i infile.wma outfile.infile.wmaem cada arquivo WMA no diretório atual)
sox outfile* all.wav
(note que outfileé o mesmo prefixo que fornecemos aos arquivos de saída na etapa 1)
oggenc all.wav all.ogg
você provavelmente deseja algumas configurações de qualidade aqui, mas isso fornecerá padrões de qualidade decentes. Não obtive resultados de que gostei ffmpeg, mas você pode preferir, por isso incluí um exemplo com o ffmpeg abaixo.
Observe que o soxcomando não funcionará corretamente, a menos que todos os arquivos WAV tenham o mesmo formato - se alguns tiverem 22kHz e 44.1kHz, por exemplo, você precisará identificá-los por soxmeio de opções da linha de comando e especificar qual formato deseja output in. Não conheço nenhuma ferramenta de linha de comando capaz soxde executar a etapa de concatenação. Você poderia enviar para um formato PCM bruto na etapa 1 e usá-la catna etapa 2, mas isso só funcionaria se eles estivessem no mesmo formato e você precisaria ser extremamente específico para o seu decodificador e codificador. formato que eles deveriam esperar.
Codificação com ffmpeg: Muitas postagens na rede reclamam que o codificador Vorbis interno do ffmpeg não é muito bom. Se sua versão for criada com suporte a libvorbis, use-o -acodec libvorbis. Exemplo de linha de comando:
ffmpeg -i all.wav -acodec libvorbis -ac 2 -ab 128k all.ogg