ffmpeg canales estéreo en dos canales mono

11

Quería saber si hay una manera de dividir el estéreo en dos archivos mono wav. Mi primera suposición fue

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

porque mi video de ejemplo tiene la siguiente información:

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

Así que tengo esta transmisión de audio con dos canales y quiero dos canales mono. Al principio lo probé con map_channel, pero eso no funcionó, en cambio recibí un mensaje de error:

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

Así que lo intenté nuevamente con el código mencionado anteriormente y al menos ffmpeg hizo algo, pero el resultado no fue lo que esperaba, en lugar de dividirlo en dos archivos mono wav, el resultado fue:

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

de nuevo con dos canales de audio, entonces, ¿dónde me equivoqué?

sebastian
fuente

Respuestas:

17

Usando ffmpeg hay varios métodos que conozco para ir de estéreo a dos archivos mono individuales, o dos secuencias mono en un archivo:

estéreo a 2 salidas mono

estéreo a 2 salidas mono

-map_channel opción

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

pan filtro de 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

estéreo a 2 transmisiones mono

channelsplit filtro de audio

estéreo a 2 transmisiones mono

Esto creará un archivo de salida que tiene dos secuencias mono individuales:

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

Ver también

lema
fuente
Gracias, he encontrado mi defecto. Cuando estaba usando -map_channelno usaba puntos simples, sino que usaba puntos dobles, así que no es de extrañar que no funcionó. ¡Ahora funciona!
sebastian
1
supongamos que tengo un archivo con 6 canales en una secuencia, ¿cómo sé qué canal es cuál? Cuando tengo 2 canales es fácil, siempre es 0.0.0 a la izquierda y 0.0.1 a la derecha. He buscado en la documentación de ffmpeg y dice, -layoutspero no hay ningún ejemplo de cómo funciona. Lo he intentado y el mensaje que recibo es Missing argument for option 'layouts'¿qué argumento espera ffmpeg?
sebastian
@sebastian ¿Desea crear seis archivos de salida mono a partir de la entrada de seis canales?
llogan
Tengo dos o tres clips que tienen sonido envolvente 5.1 y, por supuesto, después de usar map_channel en los seis, no puedo decir qué map_channel pertenece a qué posición, aquí hay un ejemplo: Audio ID : 2 Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFEpero creo que ya he encontrado una solución por este problema
Sebastian
@sebastian ¿Cuál es tu solución?
llogan
1

Deberías usar el filtro de ChannelSplit para eso. -map no puede hacer esto. Por ejemplo:

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

Verifique el enlace a la documentación que he proporcionado.

ptQa
fuente