Ajuda de mapeamento ffmpeg, codifique áudio de 1 canal em múltiplas trilhas

Ajuda de mapeamento ffmpeg, codifique áudio de 1 canal em múltiplas trilhas

Eu tenho 2 arquivos de entrada:

  • cover.jpg
  • audio.dts(6 canais)

Meu arquivo de destino será um mp4 com 1 vídeo e 3 áudios:

  • áudio 1 é 2 canais aac
  • áudio 2 é 6 canais ac3
  • áudio 3 é 6 canais dts

Aqui está o comando que tentei. Imagem Imagem para Vídeo com áudio multicanal:

ffmpeg -loop 1 -i cover.jpg -i audio.dts \
-map 0:0 -map 1:0 -map 1:0 -map 1:0 \
-f mp4 \
-codec:v:0 libx264 -r:0 1 -profile:v:0 main -level 3.1 -pix_fmt:0 yuv420p -qmax:0 19 -qmin:0 18 \
-codec:a:0 libfaac -ac:0 2 -ar:0 44100 -q:a:0 640 -af:0 "pan=stereo| FL = FL + 0.5*FC + 1.0*BL + 1.0*SL + 0.8*LFE | FR = FR + 0.5*FC + 1.0*BR + 1.0*SR + 0.8*LFE" \
-codec:a:1 ac3 -ac:1 6 -ab:a:1 640 \
-codec:a:2 copy \
-threads 0 -y \
-shortest -t 00:00:39.000 out.mp4

Mas parece que as opções de áudio que apliquei ao áudio nº 1 também se aplicaram ao áudio nº 2 e ao áudio nº 3.

Como eu poderia fazer essas opções funcionarem para apenas uma faixa?

Responder1

Como sempre, existem várias maneiras de realizar tarefas como essa no FFmpeg.

O que estou mais familiarizado é usar o channelsplitfiltro para separar seus fluxos de áudio e definir rótulos para cada um deles. Dessa forma, você pode realizar vários filtros em qualquer um dos canais individualmente e mapear a saída para incluir qualquer combinação de canais desejada.

O filtro ficará mais ou menos assim:

ffmpeg -i [INPUT_video] -i [INPUT_3channel_audio] -filter_complex "[1:a]channelsplit[1][2][3];...."

Neste exemplo, dividimos cada um dos três canais em novos rótulos: [1] [2]e [3]. Esses rótulos agora podem ser chamados posteriormente e enviados por outros filtros e/ou mapeados para a saída final.

Espero que isto ajude!

informação relacionada