concatenazione senza perdita di file ogg vorbis


12

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 catsoluzione.

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?



@JoshRumbut sì e soffre di spazi vuoti udibili in cui i file sono uniti per qualche input
josch

Puoi provare a usare PiTiVi e posizionare le clip in sequenza sulla sequenza temporale.
harrymc,

1
L'OP (e anche io) desidera una soluzione programmatica che non implichi l'interazione dell'utente dopo la raccolta dei file richiesti.
Villermen,

2
@ RalphRönnquist Sox ricodifica l'input.
Josch

Risposte:


2

ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.oggcrea un file ogg concatenato sul mio sistema, solo un po 'più piccolo dei file separati combinati (probabilmente a causa dei metadati condivisi). Mi sembra lo stesso, quindi la concatenazione dovrebbe essere senza perdite. Tuttavia, ciò non aggiunge un piccolo spazio tra i file.

ffmpeg -f concat -safe 0 -i ogg1.ogg -i ogg2.ogg -c copy out.ogg dovrebbe funzionare ma dà questo errore sul mio ffmpeg Homebrew (macOS) al 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


Ricevo lo stesso errore
Housemd

0

Potresti dare un'occhiata a FFmpeg . Ha molti strumenti che non capisco bene, ma ricordo dalla documentazione che esiste uno strumento per fare esattamente questo. In caso contrario, penso che è possibile utilizzare VLC Media Player 's linea di comando .


1
Puoi espandere un po 'la tua risposta? Basta indicare un prodotto e la sua documentazione non spiega davvero come realizzare la soluzione. È meglio includere alcune istruzioni qui su come utilizzare il prodotto per risolvere il problema. Una buona guida per consigliare il software qui: meta.superuser.com/questions/5329/… . Grazie.
fixer1234

Il solo utilizzo ffmpeg -f concat -i inputs.txt -c copy out.oggnon funziona. Sono curioso di sapere come pensi che possa essere risolto con ffmpeg.
Jos
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.