Ho un paio di file ogg vorbis, tutti codificati con le stesse proprietà esatte che voglio concatenare in un singolo file.
So che il formato ogg vorbis supporta la concatenazione semplice di più file come:
$ cat file1.ogg file2.ogg > output.ogg
Ma purtroppo non tutti i giocatori sono in grado di capire i file creati in questo modo, ad esempio il mio lettore audio mobile e eviterei di acquistarne uno nuovo. Altri programmi che non lo capiscono sono gstreamer. Questo metodo inoltre non funziona se i file ogg di input hanno tutti lo stesso ID flusso.
Inoltre, poiché vorrei eliminare i file originali e mantenere solo la versione concatenata, vorrei che la concatenazione fosse eseguita senza perdita, proprio come la cat
soluzione.
Voglio anche evitare di concatenare i file in un formato senza perdita di dati come flac poiché ciò farebbe saltare inutilmente la dimensione del file. Se ciò andasse bene, allora potrei mantenere i file ogg originali e utilizzare meno spazio.
Sembra che a volte ffmpeg possa farlo usando il demuxer concat :
$ cat inputs.txt
file 'in1.ogg'
file 'in2.ogg'
$ ffmpeg -f concat -i inputs.txt -c copy out.ogg
Se guardo il hexdump grezzo dei miei file di input, allora posso trovare i pacchetti vorbis esattamente rappresentati nel file di output. Quindi immagino davvero che non avvenga alcuna ricodifica.
Ma questo non sembra funzionare su tutti i file di input. A volte (non sono sicuro di cosa lo inneschi), ffmpeg darebbe l'avvertimento:
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 poi ascolterei un "gap" molto debole tra due file. Pertanto, questa non è certamente una soluzione globale.
Dato che non riuscivo a trovarne uno, ho provato a scrivere il mio strumento in questa domanda di StackOverflow .
C'è un modo per concatenare più file ogg vorbis ma senza ricodificarli e con un solo flusso per output? Quale strumento è in grado di fare quel lavoro?