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?
Réponses:
ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.ogg
crée un fichier ogg concaténé sur mon système, juste un peu plus petit que les fichiers séparés combinés (probablement à cause des métadonnées partagées). Cela me semble la même chose, donc la concaténation devrait être sans perte. Cependant, cela n'ajoute pas un petit écart entre les fichiers.ffmpeg -f concat -safe 0 -i ogg1.ogg -i ogg2.ogg -c copy out.ogg
est censé fonctionner mais cela donne cette erreur sur mon Homebrew (macOS) ffmpeg à partir de 3.3.2.Source: https://trac.ffmpeg.org/wiki/Concatenate
la source
Vous voudrez peut-être jeter un œil à FFmpeg . Il a beaucoup d'outils que je ne comprends pas très bien, mais je me souviens de la documentation qu'il y a un outil pour faire exactement cela. Sinon, je pense que vous pouvez utiliser VLC Media Player de ligne de commande .
la source
ffmpeg -f concat -i inputs.txt -c copy out.ogg
ne fonctionne pas. Je suis curieux de savoir comment vous pensez que cela peut être résolu avec ffmpeg.