J'ai quelques fichiers ogg vorbis, tous encodés avec exactement les mêmes propriétés que je veux concaténer en un seul fichier.
Je sais que le format ogg vorbis prend en charge la concaténation simple de plusieurs fichiers comme:
$ cat file1.ogg file2.ogg > output.ogg
Mais malheureusement, tous les joueurs ne sont pas en mesure de comprendre les fichiers créés comme ça, par exemple mon lecteur audio mobile et j'éviterais d'en acheter un nouveau. D'autres programmes qui ne le comprennent pas sont gstreamer. Cette méthode ne fonctionne pas non plus si les fichiers ogg d'entrée ont tous le même identifiant de flux.
De plus, comme je voudrais jeter les fichiers originaux et ne conserver que la version concaténée, j'aimerais que la concaténation se fasse sans perte, tout comme la cat
solution.
Je veux également éviter de concaténer les fichiers dans un format sans perte comme flac car cela ferait exploser inutilement la taille du fichier. Si cela allait bien, je pourrais conserver les fichiers ogg d'origine et utiliser moins d'espace.
Il semble que ffmpeg puisse parfois le faire en utilisant le démultiplexeur concat :
$ cat inputs.txt
file 'in1.ogg'
file 'in2.ogg'
$ ffmpeg -f concat -i inputs.txt -c copy out.ogg
Si je regarde le vidage hexadécimal brut de mes fichiers d'entrée, je peux trouver les paquets vorbis exactement représentés dans le fichier de sortie. Donc je suppose qu'il n'y a vraiment pas de ré-encodage.
Mais cela ne semble pas fonctionner sur tous les fichiers d'entrée. Parfois (pas sûr de ce qui déclenche cela), ffmpeg donnerait l'avertissement:
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.
Et puis j'entendais un très léger "écart" entre deux fichiers. Ce n'est donc certainement pas une solution globale.
Comme je n'en trouvais pas, j'ai essayé d'écrire mon propre outil dans cette question de stackoverflow .
Existe-t-il un moyen de concaténer plusieurs fichiers ogg vorbis mais sans les recoder et avec un seul flux par sortie? Quel outil est capable de faire ce travail?