Ich habe ein paar ogg vorbis-Dateien, die alle mit genau den gleichen Eigenschaften codiert sind, die ich zu einer einzigen Datei verketten möchte.
Ich weiß, dass das ogg vorbis-Format die einfache Verkettung mehrerer Dateien unterstützt, wie:
$ cat file1.ogg file2.ogg > output.ogg
Leider können nicht alle Player solche Dateien verstehen, zum Beispiel meinen mobilen Audio-Player, und ich würde es vermeiden, einen neuen zu kaufen. Andere Programme, die es nicht verstehen, sind gstreamer. Diese Methode funktioniert auch nicht, wenn die eingegebenen Ogg-Dateien alle dieselbe Stream-ID haben.
Da ich außerdem die Originaldateien wegwerfen und nur die verkettete Version behalten möchte, möchte ich, dass die Verkettung ebenso wie die cat
Lösung verlustfrei erfolgt .
Ich möchte auch vermeiden, die Dateien in ein verlustfreies Format wie flac zu verketten, da dies die Dateigröße unnötig vergrößern würde. Wenn das in Ordnung wäre, könnte ich die ursprünglichen ogg-Dateien behalten und würde weniger Speicherplatz verbrauchen.
Es scheint, dass ffmpeg dies manchmal mit dem concat-Demuxer tun kann :
$ cat inputs.txt
file 'in1.ogg'
file 'in2.ogg'
$ ffmpeg -f concat -i inputs.txt -c copy out.ogg
Wenn ich mir den rohen Hexdump meiner Eingabedateien ansehe, kann ich die Vorbis-Pakete finden, die genau in der Ausgabedatei dargestellt sind. Ich denke also, dass wirklich keine Neucodierung stattfindet.
Dies scheint jedoch nicht bei allen Eingabedateien zu funktionieren. Manchmal (nicht sicher, was dies auslöst) gab ffmpeg die Warnung:
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.
Und dann würde ich eine sehr schwache "Lücke" zwischen zwei Dateien hören. Dies ist also sicherlich keine globale Lösung.
Da ich keine finden konnte, habe ich versucht, mein eigenes Tool in diese Stackoverflow-Frage zu schreiben .
Gibt es eine Möglichkeit, mehrere ogg vorbis-Dateien zu verketten, ohne sie jedoch neu zu codieren und mit nur einem Stream pro Ausgabe? Welches Tool kann diesen Job erledigen?