Stereodatei aus zwei Monodateien mit Sox erstellen

10276
haimg

Ich verwende sox 14.2.0 auf Centos 6.0.

Ich habe zwei Mono- WAV-Dateien left.wavund right.wav. Ich muss sie in einer stereo.oggDatei kombinieren, mit left.wav80% nach links und right.wav80% nach rechts.

Ich konnte nicht die dazu benötigten Sox-Optionen finden. Wie mache ich das?

Dies wird für viele Dateien wiederholt ausgeführt, daher würde ich eine effiziente Lösung bevorzugen. Nach meinem Verständnis sollte es eine Möglichkeit geben, dies in einem Durchgang (einmaliger Aufruf von Sox) auszuführen.

5

4 Antworten auf die Frage

4
causa prima

haimgs befehl ist nicht ganz richtig. Klassisch schwenken Sie, indem Sie die Lautstärke nur eines Kanals reduzieren. Das bedeutet: Wenn Ihr Signal zu 80% links sein soll, behält der linke Kanal die ursprüngliche Lautstärke, während der rechte Kanal nur 20% der ursprünglichen Lautstärke erreicht. Zumindest hat dies der Panning-Code von sox getan (und was Alan Blumlein anscheinend bei der Erfindung von Stereo vorgeschlagen hat).

Auch sein Befehl kann mit der Remix-Option gekürzt werden.

Der korrigierte und verkürzte Befehl lautet daher:

sox left.wav right.wav stereo.ogg remix 1,2v0.2 1v0.2,2

Antwort als Antwort auf haimgs Kommentar:

Sox warnt Sie, wenn es zu Ausschnitten kommt. Aber es ist möglich. Mit der Remix-Option wird die Lautstärke jedes Kanals mit dem Faktor 1 / n skaliert, wobei n die Anzahl der Eingangskanäle ist. Das wird jedoch nur verwendet, wenn NO VULME OPTION für den Ausgabekanal angegeben ist (also sind Ihre 100% + 20% korrekt).

Sox bietet auch die Möglichkeit, jeden Kanal ohne explizite Volume-Informationen zu skalieren. Fügen Sie nach "remix" einfach ein "-a" hinzu (wie "remix -a 1,2v0.2 1v0.2,2"), und die Volumes werden wie 50 sein % + 20% = 70%. Es ist ziemlich verwirrend und ich bin mir nicht sicher, ob Sie auch die Lautstärke der gescannten Kanäle um 1 / n skalieren müssen, was zu "remix -a 1,2v0.1 1v0.1,2" oder 50% + führen würde 10% = 60%. Ich werde in dieser Richtung weiter nachforschen müssen. Inzwischen können Sie den Remix-Bereich in der Manpage von sox lesen (auch auf der sox-Homepage verfügbar ).

nach weiteren Überlegungen bearbeiten:

Nachdem ich darüber nachgedacht habe, bin ich mir ziemlich sicher, dass Sie auch die gesperrten Volumina um 1 / n skalieren müssen.

Über das Clipping-Problem: Dieses Problem kann nicht auftreten, wenn ALLE Volumes durch die Anzahl der Kanäle geteilt werden. Dies behält jedoch nicht die ursprüngliche Signalstärke bei, da die Signalstärke logarithmisch und nicht linear ist. Je mehr Kanäle Sie mischen, desto leiser sollte das Signal werden. Deshalb gibt es für sox auch Optionen, bei denen die Volumes um 1 / sqrt (n) skaliert werden. Dazu verwenden Sie einfach ein "p" anstelle eines "v" im Remix-Part, passen die Werte entsprechend an und fügen nach der Remix-Anweisung auch eine "-p" -Option hinzu. Den Unterschied der Skalierung um 1 / n und 1 / sqrt (n) können Sie hier sehen .

Ich denke, ich denke, um die korrekten Leistungswerte zu berechnen: Für jeden Kanal müssen Sie 20 * log_10 (Faktor) lösen. Ein Faktor von 2 führt zu ~ 6 (dB), ein Faktor von 0,5 zu ~ -6 (dB). Genau das sagt das Sox-Handbuch. Ich denke, das ist richtig.

Also sollte der Befehl in Ihrem Fall lauten:

sox left.wav right.wav stereo.ogg remix -p -a 1,2p-6 1p-6,2

Ich habe kein Sox auf diesem Rechner, daher kann ich diesen Befehl nicht auf korrekte Syntax testen. Sagen Sie mir bitte, ob ein Problem vorliegt. Ich werde all diese Theorie testen, sobald ich die Gelegenheit dazu bekomme, weil ich mich einem ähnlichen Problem stellen muss, aber ich werde viel mehr Kanäle als nur zwei mischen müssen, und deshalb habe ich dieses Signal-Power-Zeug gefunden.

Würde das nicht einen Ausschnitt einführen? ZB 100% L + 20% R = 120% Volumen. Wenn beide Kanäle auf Maximum gehen? haimg vor 12 Jahren 0
Sie fügen nicht die Volumes des Kanals hinzu, ansonsten hätten Sie 240% bei maximalem Volume, und das ist einfach komisch. Rob vor 12 Jahren 0
@ Rob: Sie haben vielleicht vergessen, dass wir laut Ihrer Definition zu Beginn auch ein Volumen von 200% hatten. causa prima vor 12 Jahren 0
Stell es dir so vor, haimg. Sie haben maximal 100% Audio auf jedem Kanal. Wenn Sie also das left.wav und das right.wav in stereo.ogg remixen, erstellen Sie einen NEUEN left.wav und einen rechten.wav, die jeweils den anderen SEHR QUIETLY enthalten. Es ist immer noch 100% für jeden Kanal, es ist nur der Kanal, in dem ein Teil des anderen Kanals fest codiert ist. Es ist nicht so, dass Sie die Lautstärke des linken Kanals verringern und das Audio vollständig aus dem rechten Kanal entfernen. Rob vor 12 Jahren 0
"Wenn beide Kanäle zum Maximum gehen", sagte Haimg, hätte er recht. Denken Sie so, Rob. Beim Kombinieren der beiden Kanäle addieren Sie die Sample-Werte. Nehmen wir an, wir haben 8-Bit-Audio, dann wäre der maximale Abtastwert 256 (im Fall ohne Vorzeichen). Wenn Sie diesem Abtastwert von 256 ALLES (wie 51, die 20% von 256) hinzufügen, wird er größer als der maximal mögliche Abtastwert, und es kommt zu einer Beschneidung. Es spielt also keine Rolle, ob das andere Signal sehr leise ist oder nicht. es wird Clip causa prima vor 12 Jahren 0
3
haimg

So wird es gemacht:

sox left.wav right.wav --channels 2 --combine merge stereo.ogg mixer 0.8,0.2,0.2,0.8

2
Roger

Irgendwie generierten alle obigen Fehler für mich. Das hat bei mir funktioniert (SOX auf Ubuntu 14.04):

sox -M -c 1 lef.wav -c 1 right.wav output.mp3 
0
albal

Verwenden Sie Sox mit der Pan-Option, um eine Datei nach rechts und die andere nach links (1 und -1) zu verschieben. Dann mischen Sie die beiden mit Soxmix.

Sox 14.2 enthält nicht soxmix, die Pan-Option ist veraltet und ich hatte gehofft, sie in einem Durchgang zu erledigen. haimg vor 13 Jahren 0
sox hat eine Mixer-Option: `mixer [−l | −r | −f | −b | −1 | −2 | −3 | −4 | n {, n}]` (siehe: http: //sox.sourceforge .net / sox.html # SYNOPSIS). Aus dem Dokument schwer zu sagen, aber es scheint, als würden Sie -m angeben, um die beiden Dateien zu mischen. Dies geschieht vor der Effektkette (wo 'Mixer' geschieht) horatio vor 13 Jahren 0