As respostas sobre essa questão tornaram-se uma bagunça, com muitas contendo informações redundantes e outras imprecisões completas. Esta resposta é uma tentativa de otimizar as informações nessas respostas, eliminando os problemas nelas.
Mais importante, vale lembrar que a resposta de Gregory, atualmente a resposta mais votada para esta pergunta, não é diferente do que usar a -ac 2
opção - mais sobre isso abaixo.
Fazer downmixing de um fluxo de áudio de 5.1 canais para estéreo com -ac 2
O FFmpeg vem com recursos internos para mixagem de uma faixa 5.1 para estéreo, e esta também é a solução recomendada pela documentação do FFmpeg :
Nota: O ffmpeg integra um sistema padrão de down-mix (e up-mix) que deve ser preferido (a -ac
opção) sobre o filtro de pan, a menos que você tenha necessidades muito específicas.
O -ac 2
switch funciona misturando proporções dos 5 primeiros canais do fluxo de 6 canais da fonte - Traseira esquerda, Traseira direita, Frente esquerda, Frente direita e Frente central - nos canais Frente esquerda e Frente direita do fluxo estéreo de saída:
Ao fazer isso, o áudio do canal LFE (o .1 em 5.1, reservado para o subwoofer e usado para efeitos profundos e de baixa frequência) é descartado completamente ao usar esta opção.
Infelizmente, em meus testes -ac 2
resultou em níveis gerais de música e diálogo que eram os mais diferentes da fonte, tornando-a a fórmula de downmix que fornece a pior saída de todas as fórmulas que testei, embora você possa testá-lo e descobrir que ele fornece uma mistura bem adequada para as suas necessidades; nesse caso, usar qualquer outra fórmula seria um exagero para você.
Para misturar uma faixa DTS com -ac 2
sem transcodificá-la (ou seja, manter o codec e a extensão iguais):
ffmpeg -i "sourcetrack.dts" -c:a dca -ac 2 "stereotrack.dts"
Como apontado por Mephisto em sua resposta, se o diálogo e a música parecerem bem equilibrados entre si, mas simplesmente não tiverem volume, você poderá diminuir o mix do fluxo e aumentar seu volume:
ffmpeg -i "sourcetrack.dts" -c:a dca -ac 2 -vol 425 "stereotrack.dts"
Para a -vol
opção, 100% do volume na fonte é equivalente ao valor inteiro 256, e usar um valor maior que isso aumentará o volume geral do fluxo de áudio. No entanto, observe que isso pode resultar em distorção ou artefatos, especialmente durante as seções mais altas.
Para misturar um fluxo de áudio em estéreo e transcodificá-lo para o codec AC3, por exemplo:
ffmpeg -i "sourcetrack.dts" -c:a ac3 -ac 2 "stereotrack.ac3"
Downmixing um fluxo de áudio de 5.1 canais para estéreo com um algoritmo de mix personalizado
Se você deseja uma downmix de mais alta qualidade ou é absolutamente necessário incluir o fluxo LFE em sua saída, pode usar a chave de filtro de áudio do FFmpeg ( -af
) para downmix o áudio usando uma fórmula de mixagem personalizada.
Downmixing com a fórmula ATSC (resposta de Gregory)
No momento da publicação desta resposta, a resposta mais votada para essa pergunta era a de Gregory , que coloca a fórmula da especificação ATSC (consulte a seção 7.8.2, Fazendo downmixing em dois canais ) em um filtro de áudio FFmpeg. Essa especificação está diretamente vinculada à documentação do FFmpeg sobre o tópico , indicando que é altamente provável que seja a mesma fórmula que o FFmpeg já implementa para seu -ac 2
switch. Se isso for verdade, digitar a fórmula inteira na resposta de Gregory não seria diferente do que usar o -ac 2
comutador e, portanto, uma perda de tempo.
Decidi testar isso com certeza, recodificando a mesma entrada de áudio usando ambos -ac 2
e o -af
filtro da resposta de Gregory (os comandos exatos usados podem ser vistos nas notas de rodapé desta resposta).
Em seguida, comparei os tamanhos dos arquivos de saída resultantes e constatei que eram, byte por byte, o mesmo tamanho:
Por fim, abri os dois arquivos de saída no Audacity e comparei suas formas de onda para confirmar que eram idênticas (clique para ampliar):
Parece, portanto, bastante conclusivo que a fórmula ATSC detalhada na resposta de Gregory é a mesma já implementada pelo FFmpeg , e que usá-la é totalmente redundante quando não faz nada que -ac 2
não faz, e é um comando muito mais complicado.
Downmixing sem descartar o canal LFE (resposta de Dave_750)
Das várias incluídas nas respostas, essa é a única das fórmulas downmix que parecem misturar o canal LFE no estéreo de saída, em vez de descartá-lo completamente e, como resultado, o que garante o menor som da fonte é perdido.
O nível geral do volume é mais alto e mais cheio do -ac 2
que o normal, mas também mais baixo que o downmix abaixo do Nightmode Dialogue. No entanto, os níveis de música estão muito mais próximos da fonte do que o downmix do Nightmode Dialogue e, devido à inclusão da faixa LFE, aumentar o volume da saída ao usar essa fórmula de downmix pode criar um fluxo de saída que soa mais fiel à fonte 5.1 do que todos os outros fórmulas que testei.
Se você tiver a capacidade, eu recomendo a codificação do (s) seu (s) fluxo (s) de áudio usando esta fórmula de downmix e o downmix Nightmode Dialogue e comparando cuidadosamente as formas de onda dos dois para determinar qual é o melhor.
Para misturar uma faixa 5.1 em estéreo usando essa fórmula e aumentar seu nível de volume para 425 (onde 256 é 100% do nível de volume da fonte original):
ffmpeg -i "sourcetrack.dts" -c dca -vol 425 -af "pan=stereo|FL=0.5*FC+0.707*FL+0.707*BL+0.5*LFE|FR=0.5*FC+0.707*FR+0.707*BR+0.5*LFE" "outputstereo.dts"
Desmistificando o Diálogo do Modo Noturno de Robert Collier (resposta de Shane Harrelson)
A fórmula Diálogo noturno, criado por Robert Collier na Doom9 fórum e fontes de Shane Harrelson em sua resposta, resulta em uma melhor downmix que o -ac 2
switch - em vez de diálogos excessivamente tranquilos, traz de volta a níveis que são muito mais perto da fonte.
Da descrição de Robert Collier da mistura:
Depois de converter muitas trilhas de filmes DTS de 5.1 para 2.0 usando o eac3to, encontrei os mapeamentos de canal padrão do eac3to para resultar em diálogos muito silenciosos e cenas de ação e música muito altas. Embora os coeficientes de downmix do canal eac3to tenham uma base científica, na maioria das vezes eles não soam bem na prática devido ao baixo volume de diálogo. Essa predefinição é para quem procura diálogos claros com a música do canal esquerdo e direito ainda sendo audível, mas mais em segundo plano.
Como você pode ver - o centro da frente (diálogos) entra corretamente agora e permanece no nível original - enquanto a música e as explosões continuam sendo um efeito de fundo e não o dominam. Essa predefinição resolve o problema de você precisar mexer constantemente com o botão de volume ao assistir ao DTS 5.1 convertido em filmes 2.0 para ouvir diálogos. (Especialmente para assistir filmes à noite, onde você não quer acordar outras pessoas, mas ainda quer ouvir diálogos).
Infelizmente, a música dessa fórmula downmix é muito menor do que na fonte 5.1 (que provavelmente foi projetada considerando a intenção de Collier de criar um mix "modo noturno") e devido à perda completa da faixa LFE, o áudio geral de saída não soar tão cheio ou próximo da fonte quanto a fórmula de Dave_750 com volume aprimorado .
No entanto, se por algum motivo você quiser evitar aumentar o volume geral do fluxo, o Nightmode Dialogue provavelmente seria sua melhor opção - embora, novamente, eu recomendo codificar seu fluxo de áudio para ambos e comparar cuidadosamente as formas de onda dos dois. .
Para fazer downmix com a fórmula do Nightmode Dialogue no FFmpeg:
ffmpeg -i "sourcetrack.dts" -c dca -af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR" "stereotrack.dts"
Resposta do Tarc
Essa resposta simplesmente coloca a fórmula de downmix do Nightmode Dialogue da resposta de Shane Harrelson em um comando para converter o fluxo de áudio em um contêiner MKV. Embora o comando fornecido nesta resposta funcione bem em um fluxo de áudio, a adaptação para uma faixa de áudio autônoma causaria o erro:
Filtragem e streamcopy não podem ser usados juntos
Isso ocorre porque o codec de áudio não pode ser copiado durante a downmixing - como todas as outras alterações que o FFmpeg faz em um fluxo de saída, uma downmix exige que a faixa seja recodificada para que as alterações sejam aplicadas.
Este comando também incluiu uma -ac 2
opção redundante que o FFmpeg teria ignorado.
Comandos de teste
Para demonstrar a confiabilidade dos testes que realizei para esta resposta, abaixo estão todos os comandos que usei para testar cada fórmula de downmix.
O comando test usado para a -ac 2
opção:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -ac 2 "Audio 1 (-ac 2).wav"
O comando test usado para a resposta de Gregory:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -af "pan=stereo|FL < 1.0*FL + 0.707*FC + 0.707*BL|FR < 1.0*FR + 0.707*FC + 0.707*BR" "Audio 2 (ATSC Algorithm Downmix).wav"
O comando test usado para a resposta de Dave_750:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -vol 425 -af "pan=stereo|FL=0.5*FC+0.707*FL+0.707*BL+0.5*LFE|FR=0.5*FC+0.707*FR+0.707*BR+0.5*LFE" "Audio 4 (Dave750 Downmix).wav"
O comando test usado para a resposta de Shane Harrelson:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR" "Audio 3 (Nightmode Dialogue Downmix).wav"