Creazione di file stereo da due file mono con sox


5

Sto usando Sox 14.2.0 su Centos 6.0.

Ho due file mono wav left.wave right.wav. Devo combinarli in un unico stereo.oggfile, con una left.wavpanoramica dell'80% a sinistra e una right.wavpanoramica dell'80% a destra.

Non sono riuscito a trovare le opzioni di sox necessarie per questo. Come faccio a fare questo?

Questo verrà eseguito ripetutamente per molti file, quindi preferirei una soluzione efficiente. Da quello che ho capito ci dovrebbe essere un modo per farlo in un unico passaggio (una invocazione di sox).

Risposte:


4

Ecco come viene fatto:

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


4

Il comando haimgs non è completamente corretto. Classicamente esegui una panoramica riducendo il volume di un solo canale. Ciò significa: se si desidera che il segnale rimanga all'80%, il canale sinistro mantiene il volume originale mentre il canale destro ottiene solo il 20% del volume originale. Almeno questo è ciò che ha fatto il codice di panning di Sox (e ciò che Alan Blumlein sembra aver inventato quando ha inventato lo stereo).

Inoltre il suo comando può essere abbreviato usando l'opzione remix.

Pertanto il comando corretto e abbreviato è:

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

modifica in risposta al commento di haimgs:

sox ti avviserà se si verificano ritagli. Ma sì, è possibile. Con l'opzione remix ogni volume di canali viene ridimensionato con il fattore 1 / n, dove n è il numero di canali di ingresso. Ma viene usato solo se è stata specificata NESSUNA OPZIONE VULME per il canale di uscita (quindi il 100% + 20% è corretto).

sox ha anche un'opzione per ridimensionare qualsiasi canale senza informazioni esplicite sul volume, basta aggiungere un "-a" dopo "remix" (come "remix -a 1,2v0.2 1v0.2,2") e i volumi saranno come 50 % + 20% = 70%. È piuttosto confuso e ormai non so se devi ridimensionare anche il volume dei canali con panning di 1 / n, il che comporterebbe "remix -a 1,2v0.1 1v0.1,2" o 50% + 10% = 60%. Dovrò indagare ulteriormente in questa direzione. Nel frattempo puoi leggere la sezione remix nella pagina man di sox (disponibile anche nella homepage di sox ).

modifica dopo ulteriori riflessioni:

Dopo averci pensato, sono abbastanza sicuro che devi ridimensionare anche i volumi di panning di 1 / n.

Informazioni sul problema del ritaglio: dividendo TUTTI i volumi per il numero di canali, questo problema non può verificarsi. Ma ciò non preserva la potenza originale del segnale, perché la potenza di un segnale è logaritmica, non lineare. Più canali mescoli, più silenzioso dovrebbe diventare il segnale. Ecco perché sox ha anche opzioni per questo, in cui i volumi vengono ridimensionati di 1 / sqrt (n). Per usarlo, basta prendere una "p" invece di una "v" nella parte remix e regolare i valori di conseguenza, e aggiungere anche un'opzione "-p" dopo l'istruzione remix. Puoi vedere la differenza di ridimensionamento di 1 / n e di 1 / sqrt (n) qui .

Di seguito è come penso di calcolare i valori di potenza corretti: per ogni canale devi risolvere 20 * log_10 (fattore). Un fattore 2 comporterà ~ 6 (dB), un fattore 0,5 comporterà ~ -6 (dB). Questo è esattamente ciò che dice il manuale di Sox, quindi immagino che sia giusto.

Quindi, finalmente il comando nel tuo caso dovrebbe essere:

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

Non ho Sox su questa macchina, quindi non posso testare questo comando per la sintassi corretta, quindi per favore dimmi se c'è un problema. Metterò alla prova tutta questa teoria non appena ne avrò la possibilità, perché dovrò affrontare un problema simile, ma dovrò mescolare molti più canali oltre a solo 2, ed è per questo che mi sono inventato quella roba di potenza del segnale.


Ciò non introdurrebbe il clipping? Ad esempio 100% L + 20% R = 120% volume, Se entrambi i canali vanno al massimo?
haimg

Non aggiungi i volumi del canale, altrimenti avresti il ​​240% al massimo volume, e questo è solo strano.
Rob,

@Rob: potresti aver dimenticato che per tua definizione avevamo anche un volume "200%" all'inizio.
causa prima

Pensaci in questo modo, haimg. Hai un massimo del 100% di audio su ciascun canale. Quindi, quando si remixa il file left.wav e right.wav in stereo.ogg, quello che stai facendo è creare un NUOVO left.wav e right.wav, ognuno con l'altro al suo interno MOLTO TRANQUILLAMENTE. È ancora al 100% per ogni canale, è solo che il canale ha alcuni degli altri canali codificati. Non è come se abbassassi il volume del canale sinistro e rimuovessi completamente l'audio dal canale destro.
Rob,

"Se entrambi i canali vanno al massimo", come ha detto haimg, avrebbe ragione. Pensaci in quel modo, rapinatore. Quando si combinano i due canali, si aggiungono i valori di esempio. Supponiamo di avere un audio a 8 bit, quindi il valore massimo del campione sarebbe 256 (nel caso senza segno). Se aggiungi ANYTHING (come 51, il 20% di 256) a questo valore di campionamento di 256, questo diventerà più grande del valore di campionamento massimo possibile e si verificherà il clipping, quindi non importa se l'altro segnale è molto silenzioso o meno - taglierà.
causa prima

3

In qualche modo tutti gli errori sopra generati per me. Questo è ciò che ha funzionato per me (SOX su Ubuntu 14.04):

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

0

Usa sox con l'opzione pan per eseguire il pan di un file a destra e l'altro a sinistra (rispettivamente 1 e -1). Quindi usa soxmix per mescolare i due insieme.


sox 14.2 non include soxmix, l'opzione pan è obsoleta e speravo di farlo in un passaggio.
haimg

sox ha un'opzione mixer: mixer [ −l|−r|−f|−b|−1|−2|−3|−4|n{,n} ](vedi: sox.sourceforge.net/sox.html#SYNOPSIS ). Difficile dirlo dal documento, ma sembra che tu specifichi -m per mescolare i due file, che accade prima della catena degli effetti (dove mixersuccede)
horatio
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.