concaténation sans perte de fichiers ogg vorbis


12

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

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?



@JoshRumbut oui et il souffre de contenir des lacunes audibles où les fichiers sont joints pour une entrée
josch

Vous pouvez essayer d'utiliser PiTiVi et de placer les clips de manière séquentielle sur la timeline.
harrymc

1
L'OP (et moi aussi) veut une solution programmatique qui n'implique pas d'interaction avec l'utilisateur après la collecte des fichiers requis.
Villermen

2
@ RalphRönnquist Sox réencode l'entrée.
josch

Réponses:


2

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

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

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


Je reçois la même erreur
Housemd

0

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 .


1
Pouvez-vous développer un peu votre réponse? Le simple fait de pointer vers un produit et sa documentation n'explique pas vraiment comment réaliser la solution. Il est préférable d'inclure ici des instructions sur la façon d'utiliser le produit pour résoudre le problème. De bons conseils pour recommander des logiciels ici: meta.superuser.com/questions/5329/… . Merci.
fixer1234

Utiliser simplement ffmpeg -f concat -i inputs.txt -c copy out.oggne fonctionne pas. Je suis curieux de savoir comment vous pensez que cela peut être résolu avec ffmpeg.
josch
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.