
Ich habe mehrere Hörbücher, die in großen MP3s gespeichert sind. Und ich versuche, diese großen MP3s in mehrere kleinere Dateien aufzuteilen.
Ich habe ein Tool gefunden, das Stille in Audiodateien erkennen und Audiodateien basierend auf diesem „Trennzeichen“ aufteilen kann.
Hier ist ein Beispiel:
sox -V3 audiobook.mp3 audiobook_part_.mp3 \
silence 1 0.5 0.1% 1 0.5 0.1% : newfile : restart
Dies wird grundsätzlich audiobook.mp3
in audiobook_part_001.mp3
, audiobook_part_002.mp3
, … aufgeteilt, wobei die Stille >= 0,5 Sekunden ist.
Das Problem besteht nun darin, dass dieser Befehl nicht nur die Datei aufteilt, sondern auch die Stille entfernt.
Wenn Sie die neuen Dateien in einer Wiedergabeliste abspielen, klingen die Titel/Absätze daher zusammengedrückt.
Wie können Sie also angeben, sox
dass nur die Datei geteilt, die Stille (am Ende jedes Titels) aber beibehalten werden soll?
Antwort1
Mit ein paar kleinen Änderungen können Sie die Stille in den geteilten Teilen beibehalten. Beginnen Sie mit Ihrem ursprünglichen Befehl:
silence 1 0.5 0.1% 1 0.5 0.1%
Das erste Wertetripel bedeutet, dass Stille, falls vorhanden, am Anfang entfernt wird, bis 0,5 Sekunden Ton über 0,1 % liegen. Das zweite Tripel bedeutet, dass gestoppt wird, wenn mindestens 0,5 Sekunden Stille unter 0,1 % liegen. Der Rest Ihres Befehls : newfile : restart
startet dann eine neue Ausgabedatei und beginnt erneut, am Anfang nach Ton zu suchen. Die erste Datei endet also, wenn die Stille beginnt, und die zweite Datei wird gestartet, wenn die Stille endet.
Die einfachste Möglichkeit, dies zu verbessern, ist silence -l
. Dabei bleiben die 0,5 Sekunden Stille erhalten, die das Dateiende ausgelöst haben. Leider wird jede längere Stille entfernt, da sie den Beginn der nächsten Datei darstellt. Eine einfache Möglichkeit, eine längere Lücke beizubehalten, besteht darin, sie -l
mit einer längeren Erkennungszeit zu kombinieren, z. B. 2 Sekunden:
silence -l 1 0.5 0.1% 1 2.0 0.1%
Sie teilen jetzt nur, wenn mindestens 2 Sekunden Stille vorhanden sind, aber Sie behalten die ersten 2 Sekunden der Lücke. Um zu vermeiden, dass die Stille vollständig verloren geht, entfernen Sie einfach die Stilleerkennung am Anfang. Sie müssen das Triplett durch ein einzelnes ersetzen 0
:
silence -l 0 1 2.0 0.1%
Wenn Sie mit einfachen Sounddateien herumspielen möchten, um zu sehen, wie sox
Situationen gehandhabt werden, können Sie ganz einfach zwei Sounddateien erstellen, eine mit einer Sekunde Ton und eine mit einer Sekunde Stille. Fügen Sie sie dann nach Belieben zusammen, bevor Sie das Ergebnis als Eingabe für den silence
Effekt präsentieren. Erstellen Sie beispielsweise:
sox -n gap.wav trim 0 1
sox -n tone.wav synth 1.001t sine C5
Fügen Sie dann Gap-Tone-Gap-Tone zusammen und erstellen Sie out.wav
mit Ihrem Effekt und hören Sie sich das Ergebnis an:
sox gap.wav tone.wav gap.wav tone.wav out.wav silence 1 0.5 0.1%
play out.wav
Antwort2
Ich würde Sox Pad verwenden, um am Anfang und Ende jeder geteilten Datei wieder Stille hinzuzufügen. Am Ende wird es kein einzelner Sox-Befehl sein, der alles auf einmal erledigt, aber es ist viel einfacher und gibt Ihnen zusätzliche Kontrolle, z. B. die Wahl der Länge der aufgefüllten Stille.
Sehendiese Antwortzur Verwendung von Sox Pads. Beispiel:
files="*.wav"
for f in $files
do
sox "$f" "${f%.*}-pad.wav" pad 2 3
done