concatenação sem perdas de arquivos ogg vorbis

12

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 catsoluçã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?

Josch
fonte
Você já olhou para oggCat? en.flossmanuals.net/ogg-theora/command-line-editing/cat-files
Josh Rumbut
@JoshRumbut sim e ele sofre de lacunas contendo audíveis onde os arquivos são unidas por alguma entrada
JOSCH
Você pode tentar usar o PiTiVi e colocar os clipes sequencialmente na linha do tempo.
harrymc 27/07/16
1
O OP (e eu também) deseja uma solução programática que não envolva interação do usuário após a coleta dos arquivos necessários.
Villermen
2
@ RalphRönnquist Sox recodifica a entrada.
Josch

Respostas:

2

ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.oggcria 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.

[concat @ 0x7f91e8800400] Line 1: unknown keyword 'OggS'
ogg1.ogg: Invalid data found when processing input

Fonte: https://trac.ffmpeg.org/wiki/Concatenate


fonte
Estou recebendo o mesmo erro
Housemd
0

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 .

NatoBoram
fonte
1
Você pode expandir um pouco sua resposta? Apenas apontar para um produto e sua documentação não explica realmente como realizar a solução. É melhor incluir aqui algumas instruções sobre como usar o produto para resolver o problema. Boas orientações sobre a recomendação de software aqui: meta.superuser.com/questions/5329/… . Obrigado.
fixer1234
Apenas usar ffmpeg -f concat -i inputs.txt -c copy out.oggnão funciona. Estou curioso para saber como isso pode ser resolvido com o ffmpeg.
Josch