canais estéreo ffmpeg em dois canais mono


11

Eu queria saber se existe uma maneira de dividir o estéreo em dois arquivos WAV mono. Meu primeiro palpite foi

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

porque meu exemplo de vídeo tem as seguintes informações:

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

Então, eu tenho esse fluxo de áudio com dois canais e quero dois canais mono. No começo, tentei com o map_channel, mas isso não funcionou, pois estava recebendo uma mensagem de erro:

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

Então, tentei novamente com o código mencionado acima e pelo menos o ffmpeg fez alguma coisa, mas o resultado não era o que eu esperava, em vez de dividi-lo em dois arquivos mono wav, o resultado foi:

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

novamente com dois canais de áudio, então onde eu errei?

Respostas:


17

Usando o ffmpeg, existem vários métodos que conheço para passar de estéreo para dois arquivos mono individuais ou dois fluxos mono em um arquivo:

estéreo para 2 saídas mono

estéreo para 2 saídas mono

-map_channel opção

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

pan filtro de áudio

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

estéreo para 2 fluxos mono

channelsplit filtro de áudio

estéreo para 2 fluxos mono

Isso criará um arquivo de saída que possui dois fluxos mono individuais:

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

Veja também


Obrigado, eu encontrei minha falha. Quando eu estava usando -map_channel, não usei pontos únicos, mas usei pontos duplos, por isso não é de admirar que não funcionasse. Agora funciona!
sebastian

11
vamos supor que eu tenho um arquivo com 6 canais em um fluxo, como sei qual canal é qual? Quando eu tenho 2 canais é fácil, é sempre 0.0.0 esquerda e 0.0.1 direita. Eu procurei na documentação do ffmpeg e ela diz, -layoutsmas não há exemplo de como isso funciona. Eu tentei e a mensagem que recebo é Missing argument for option 'layouts'qual argumento o ffmpeg está esperando?
sebastian

@sebastian Deseja criar seis arquivos de saída mono a partir da entrada de seis canais?
llogan

Tenho dois ou três clipes com som surround 5.1 e, é claro, depois de usar o map_channel em todos os seis, não sei dizer qual map_channel pertence a qual posição, aqui está um exemplo: Audio ID : 2 Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFEmas acho que já encontrei uma solução para este problema.
sebastian

@sebastian Qual é a sua solução?
Llogan

1

Você deve usar o filtro de canal dividido para isso. -map não pode fazer isso. Por exemplo:

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

Verifique o link da documentação que eu forneci.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.