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?
Antworten:
ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.ogg
Erstellt 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.Quelle: https://trac.ffmpeg.org/wiki/Concatenate
quelle
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 .
quelle
ffmpeg -f concat -i inputs.txt -c copy out.ogg
funktioniert nicht. Ich bin gespannt, wie Sie denken, dass dies mit ffmpeg gelöst werden kann.