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?
Respostas:
ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.ogg
cria um arquivo ogg concatenado no meu sistema, um pouco menor que os arquivos separados combinados (provavelmente por causa dos metadados compartilhados). Parece o mesmo para mim, então a concatenação deve ser sem perdas. No entanto, isso não adiciona um pequeno espaço entre os arquivos.ffmpeg -f concat -safe 0 -i ogg1.ogg -i ogg2.ogg -c copy out.ogg
deve funcionar, mas dá esse erro no meu Homebrew (macOS) ffmpeg a partir do 3.3.2.Fonte: https://trac.ffmpeg.org/wiki/Concatenate
fonte
Você pode dar uma olhada no FFmpeg . Ele tem muitas ferramentas que eu não entendo direito, mas lembro-me da documentação de que há uma ferramenta para fazer exatamente isso. Caso contrário, eu acho que você pode usar VLC Media Player 's linha de comando .
fonte
ffmpeg -f concat -i inputs.txt -c copy out.ogg
não funciona. Estou curioso para saber como isso pode ser resolvido com o ffmpeg.