ffmpeg canali stereo in due canali mono


11

Volevo sapere se esiste un modo per dividere lo stereo in due file wav mono. La mia prima ipotesi è stata

ffmpeg -threads "16" -i "$2" -map 0:1:1 "$3"

perché il mio video di esempio contiene le seguenti informazioni:

Audio
ID                                       : 2
Format                                   : AAC
Format/Info                              : Advanced Audio Codec
Format profile                           : LC
Codec ID                                 : 40
Duration                                 : 39mn 0s
Bit rate mode                            : Constant
Bit rate                                 : 256 Kbps
Channel(s)                               : 2 channels
Channel positions                        : Front: L R

Quindi ho questo flusso audio con due canali e voglio due canali mono. All'inizio l'ho provato con map_channel, ma non ha funzionato, ma ho ricevuto un messaggio di errore:

Syntax error, mapchan usage: [file.stream.channel|-1][:syncfile:syncstream]

Quindi l'ho provato di nuovo con il codice sopra menzionato e almeno ffmpeg ha fatto qualcosa, ma il risultato non è stato quello che mi aspettavo, invece di scomporlo in due file mono wav, il risultato è stato:

info.system.container = WAVE
info.system.size = 449413166 Bytes
info.system.size = 428.59 MiB
info.system.playtime = 2340.69 s
info.audio0.codec = PCM
info.audio0.desc = 
info.audio0.format_endianness = Little
info.audio0.format_sign = Signed
info.audio0.format_resolution = 16 bits
info.audio0.samprate = 48000 Hz
info.audio0.channels = 2

di nuovo con due canali audio, quindi dove ho sbagliato?

Risposte:


17

Usando ffmpeg ci sono diversi metodi che conosco per passare da stereo a due singoli file mono o due flussi mono in un unico file:

da stereo a 2 uscite mono

da stereo a 2 uscite mono

-map_channel opzione

ffmpeg -i stereo.wav -map_channel 0.0.0 left.wav -map_channel 0.0.1 right.wav

pan filtro audio

ffmpeg -i stereo.wav -filter_complex \
"[0:0]pan=1|c0=c0[left]; \
 [0:0]pan=1|c0=c1[right]" \
-map "[left]" left.wav -map "[right]" right.wav

stereo a 2 flussi mono

channelsplit filtro audio

stereo a 2 flussi mono

Questo creerà un file di output che ha due flussi mono singoli:

ffmpeg -i input.m4a -filter_complex channelsplit out.mka

Vedi anche


Grazie, ho trovato il mio difetto. Quando stavo usando -map_channelnon ho usato punti singoli ma invece ho usato punti doppi, quindi non c'è da meravigliarsi che non abbia funzionato. Ora funziona!
Sebastian

1
supponiamo di avere un file con 6 canali in un flusso, come faccio a sapere quale canale è quale? Quando ho 2 canali è facile, è sempre 0.0.0 a sinistra e 0.0.1 a destra. Ho cercato nella documentazione di ffmpeg e dice -layoutsma non c'è alcun esempio di come funzioni. L'ho provato e il messaggio che ricevo è Missing argument for option 'layouts'quale argomento si aspetta ffmpeg?
sebastian,

@sebastian Vuoi creare sei file di output mono dall'input a sei canali?
Llogan,

Ho due o tre clip con audio surround 5.1 e ovviamente dopo aver usato map_channel su tutti e sei, non posso dire a quale map_channel appartiene a quale posizione, ecco un esempio:, Audio ID : 2 Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFEma penso di aver già trovato una soluzione per questo problema.
Sebastian

@sebastian Qual è la tua soluzione?
llogan l'

1

Per questo dovresti usare il filtro channelplit . -map non può farlo. Per esempio:

ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv

Controlla il collegamento alla documentazione che ho fornito.

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.