verlustfreie Verkettung von ogg vorbis-Dateien

12

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 catLö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?

josch
quelle
Hast du dir oggCat angesehen? en.flossmanuals.net/ogg-theora/command-line-editing/cat-files
Josh Rumbut
@ JoshRumbut ja und es leidet unter hörbaren Lücken, wo die Dateien für einige Eingaben verbunden werden
Josch
Sie können versuchen, PiTiVi zu verwenden und die Clips nacheinander auf der Timeline zu platzieren.
Harrymc
1
Das OP (und ich auch) möchten eine programmatische Lösung, die keine Benutzerinteraktion nach dem Sammeln der erforderlichen Dateien beinhaltet.
Villermen
2
@ RalphRönnquist Sox codiert die Eingabe neu.
Josch

Antworten:

2

ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.oggErstellt eine verkettete Ogg-Datei auf meinem System, die nur ein bisschen kleiner ist als die einzelnen Dateien zusammen (wahrscheinlich aufgrund der gemeinsam genutzten Metadaten). Für mich klingt es genauso, daher sollte die Verkettung verlustfrei sein. Dies fügt jedoch keine kleine Lücke zwischen den Dateien hinzu.

ffmpeg -f concat -safe 0 -i ogg1.ogg -i ogg2.ogg -c copy out.ogg soll funktionieren, aber es gibt diesen Fehler auf meinem Homebrew (macOS) ffmpeg ab 3.3.2.

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

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


quelle
Ich bekomme den gleichen Fehler
Housemd
0

Vielleicht möchten Sie einen Blick auf FFmpeg werfen . Es gibt viele Tools, die ich nicht ganz verstehe, aber ich erinnere mich aus der Dokumentation, dass es ein Tool gibt, um genau dies zu tun. Ansonsten denke ich , dass Sie verwenden können , VLC Media Player ‚s Command Line .

NatoBoram
quelle
1
Können Sie Ihre Antwort etwas erweitern? Nur auf ein Produkt und seine Dokumentation zu verweisen, erklärt nicht wirklich, wie die Lösung erreicht werden kann. Es ist besser, hier einige Anweisungen zur Verwendung des Produkts zur Lösung des Problems beizufügen. Gute Anleitungen zur Empfehlung von Software hier: meta.superuser.com/questions/5329/… . Vielen Dank.
Fixer1234
Nur mit ffmpeg -f concat -i inputs.txt -c copy out.oggfunktioniert nicht. Ich bin gespannt, wie Sie denken, dass dies mit ffmpeg gelöst werden kann.
Josch