Eu tenho alguns arquivos ogg vorbis, todos codificados com exatamente as mesmas propriedades que eu quero concatenar em um único arquivo.
Eu sei que o formato ogg vorbis suporta concatenação simples de vários arquivos, como:
$ cat file1.ogg file2.ogg > output.ogg
Mas, infelizmente, nem todos os players conseguem entender arquivos criados assim, por exemplo, meu reprodutor de áudio móvel e eu evitaria comprar um novo. Outros programas que não o entendem são o gstreamer. Esse método também não funciona se todos os arquivos ogg de entrada tiverem o mesmo ID de fluxo.
Além disso, como gostaria de jogar fora os arquivos originais e manter apenas a versão concatenada, gostaria que a concatenação fosse feita sem perdas, assim como a cat
solução.
Também quero evitar concatenar os arquivos em um formato sem perdas, como o flac, pois isso aumentaria desnecessariamente o tamanho do arquivo. Se estiver tudo bem, eu poderia manter os arquivos ogg originais e usar menos espaço.
Parece que o ffmpeg às vezes pode fazê-lo usando o desmembrador concat :
$ cat inputs.txt
file 'in1.ogg'
file 'in2.ogg'
$ ffmpeg -f concat -i inputs.txt -c copy out.ogg
Se eu olhar o hexdump bruto dos meus arquivos de entrada, posso encontrar os pacotes vorbis exatamente representados no arquivo de saída. Então eu acho que realmente nenhuma re-codificação acontece.
Mas isso não parece funcionar em todos os arquivos de entrada. Às vezes (sem saber o que desencadeia isso), o ffmpeg emitia o aviso:
Non-monotonous DTS in output stream 0:0; previous: 5011328, current: 5011200; changing to 5011329. This may result in incorrect timestamps in the output file.
E então eu ouvia uma "brecha" muito fraca entre dois arquivos. Portanto, essa certamente não é uma solução global.
Como não consegui encontrar uma, tentei escrever minha própria ferramenta nesta pergunta sobre o stackoverflow .
Existe uma maneira de concatenar vários arquivos ogg vorbis, mas sem recodificá-los e com apenas um único fluxo por saída? Qual ferramenta é capaz de fazer esse trabalho?