verlustfreie Verkettung von ogg vorbis-Dateien

1873
josch

Ich habe ein paar ogg vorbis-Dateien, die alle mit den exakt gleichen Eigenschaften codiert sind, die ich zu einer einzigen Datei zusammenfassen möchte.

Ich weiß, dass das ogg vorbis-Format die einfache Verkettung mehrerer Dateien unterstützt:

$ cat file1.ogg file2.ogg > output.ogg 

Leider können nicht alle Player so erstellte Dateien verstehen, beispielsweise meinen mobilen Audioplayer, 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 Eingabe-ogg-Dateien alle dieselbe Stream-ID haben.

Da ich außerdem die Originaldateien wegwerfen und nur die verkettete Version beibehalten möchte, möchte ich, dass die Verkettung ebenso verlustfrei wie die catLösung durchgeführt wird.

Ich möchte auch vermeiden, die Dateien in einem verlustfreien Format wie flac zu verketten, da dies die Dateigröße unnötig sprengen würde. Wenn das in Ordnung wäre, könnte ich die ursprünglichen ogg-Dateien behalten und würde weniger Platz benötigen.

Offenbar kann ffmpeg es manchmal mit dem concat-Demuxer tun :

$ 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 anschaue, dann finde ich die vorbis Pakete in der Ausgabedatei genau dargestellt. Ich denke also, dass wirklich keine Neucodierung stattfindet.

Dies scheint jedoch nicht bei allen Eingabedateien zu funktionieren. Manchmal (nicht sicher, was dies auslöst) gibt 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 hörte ich eine sehr schwache "Lücke" zwischen zwei Dateien. Dies ist also sicherlich keine globale Lösung.

Da ich keine finden konnte, habe ich versucht, in dieser Stackoverflow-Frage ein eigenes Werkzeug zu schreiben .

Gibt es eine Möglichkeit, mehrere ogg vorbis-Dateien zu verketten, ohne sie neu zu codieren und nur einen einzigen Stream pro Ausgabe? Welches Tool kann diese Aufgabe erfüllen?

11
Hast du dir oggCat angesehen? http://de.flossmanuals.net/ogg-theora/command-line-editing/cat-files/ Josh Rumbut vor 9 Jahren 0
@JoshRumbut ja und es leidet daran, hörbare Lücken zu enthalten, in denen die Dateien für eine Eingabe zusammengefügt werden josch vor 9 Jahren 0
Sie könnten versuchen, [PiTiVi] (http://de.flossmanuals.net/ogg-theora/ch040_pitivi/) zu verwenden und die Clips nacheinander auf der Timeline zu platzieren. harrymc vor 8 Jahren 0
Das OP (und ich auch) möchten eine programmatische Lösung, bei der keine Benutzerinteraktion erforderlich ist, nachdem die erforderlichen Dateien gesammelt wurden. Villermen vor 8 Jahren 1
Wenn Sie urheberrechtliche Probleme vermeiden können, können Beispieldateien hilfreich sein, bei denen das Problem auftritt the8472 vor 8 Jahren 0
Haben Sie die [Ogg Video Tools] (http://dev.streamnik.de/files.html) wie in [Diese Antwort] (http://superuser.com/a/370546/314828) erwähnt versucht? Bobby vor 8 Jahren 0
Habe es mit 'sox' versucht? Ralph Rönnquist vor 8 Jahren 0
@ RalphRönnquist Sox codiert die Eingabe neu. josch vor 8 Jahren 2
Ich denke, Sie müssen zumindest die Lücke neu kodieren, möglicherweise sogar alles danach (da Ihre Diskontinuität nur bis zum Ende des neu kodierten Teils der Datei verschoben wird). allo vor 7 Jahren 0

2 Antworten auf die Frage

1

ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.oggerstellt auf meinem System eine verkettete ogg-Datei, die etwas kleiner ist als die einzelnen kombinierten Dateien (wahrscheinlich aufgrund der gemeinsam genutzten Metadaten). Es klingt für mich gleich, daher sollte die Verkettung verlustfrei sein. Dies führt jedoch nicht zu einer kleinen Lücke zwischen den Dateien.

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

Ich bekomme den gleichen Fehler Housemd vor 6 Jahren 0
0
NatoBoram

Vielleicht möchten Sie einen Blick auf FFmpeg werfen . Es gibt viele Werkzeuge, die ich nicht ganz verstehe, aber ich erinnere mich an die Dokumentation, dass es ein Werkzeug gibt, das genau dies tut. Ansonsten denke ich, dass Sie verwenden können, VLC Media Player ‚s Command Line .

Kannst du deine Antwort etwas erweitern? Wenn Sie nur auf ein Produkt und dessen Dokumentation zeigen, wird die Lösung nicht wirklich erklärt. Es ist besser, hier einige Anweisungen zur Verwendung des Produkts zur Behebung des Problems anzugeben. Eine gute Anleitung, um Software hier zu empfehlen: http://meta.superuser.com/questions/5329/how-do-i-recommend-software-in-my-answers. Vielen Dank. fixer1234 vor 7 Jahren 1
Die Verwendung von `ffmpeg -f concat -i inputs.txt -c copy out.ogg` funktioniert jedoch nicht. Ich bin gespannt, wie Sie das mit ffmpeg lösen können. josch vor 7 Jahren 0