Le risposte a questa domanda sono diventate da allora un po 'un casino, con molte informazioni ridondanti e altre complete inesattezze. Questa risposta è un tentativo di semplificare le informazioni in queste risposte eliminando i problemi in esse contenuti.
Soprattutto, vale la pena ricordare che la risposta di Gregory, attualmente la risposta più votata a questa domanda, non è diversa dall'uso -ac 2
dell'interruttore, più su questo di seguito.
Downmix di un flusso audio a 5.1 canali su stereo con -ac 2
FFmpeg è dotato di funzionalità integrate per il downmixing di una traccia 5.1 in stereo e questa è anche la soluzione che la documentazione di FFmpeg raccomanda :
Nota: ffmpeg integra un sistema down-mix (e up-mix) predefinito che dovrebbe essere preferito (l' -ac
opzione) al filtro pan a meno che tu non abbia esigenze molto specifiche.
L' -ac 2
interruttore funziona mescolando le proporzioni dei primi 5 canali dallo stream a 6 canali della sorgente - Back Left, Back Right, Front Left, Front Right e Front Center - nei canali Front Left e Front Right dello stream stereo di output:
Nel fare ciò, l'audio dal canale LFE (il .1 in 5.1, riservato al subwoofer e utilizzato per effetti profondi a bassa frequenza) viene completamente scartato quando si utilizza questa opzione.
Sfortunatamente, nei miei test ho -ac 2
portato a livelli complessivi sia di musica che di dialogo che erano i più diversi dalla fonte, rendendola la formula di downmix che dà il peggior risultato tra tutte le formule che ho testato, anche se potresti testarlo e scoprirlo ti dà un downmix perfettamente adeguato per le tue esigenze, nel qual caso l'utilizzo di qualsiasi altra formula sarebbe eccessivo per te.
Per effettuare il downmix di una traccia DTS -ac 2
senza transcodificarla (ovvero mantenere lo stesso codec ed estensione):
ffmpeg -i "sourcetrack.dts" -c:a dca -ac 2 "stereotrack.dts"
Come sottolineato da Mephisto nella sua risposta, se il dialogo e la musica sembrano ben bilanciati l'uno con l'altro ma mancano semplicemente di volume, puoi downmixare il flusso aumentandone anche il volume:
ffmpeg -i "sourcetrack.dts" -c:a dca -ac 2 -vol 425 "stereotrack.dts"
Per lo -vol
switch, il volume del 100% nella sorgente equivale al valore intero 256 e l'utilizzo di un valore maggiore di questo aumenterà il volume complessivo del flusso audio. Tuttavia, si noti che farlo troppo può provocare distorsioni o artefatti, specialmente durante le sezioni più rumorose.
Per downmixare un flusso audio in stereo e transcodificarlo nel codec AC3, ad esempio:
ffmpeg -i "sourcetrack.dts" -c:a ac3 -ac 2 "stereotrack.ac3"
Downmix di un flusso audio a 5.1 canali su stereo con un algoritmo di mixaggio personalizzato
Se desideri un downmix di qualità più elevata o devi assolutamente includere il flusso LFE nell'output, puoi utilizzare l'interruttore del filtro audio di FFmpeg ( -af
) per effettuare il downmix dell'audio utilizzando una formula di mix personalizzata.
Downmix con la formula ATSC (risposta di Gregory)
Al momento della pubblicazione di questa risposta, la risposta più votata a questa domanda è stata quella di Gregory , che inserisce la formula dalla specifica ATSC (vedere la sezione 7.8.2, Downmix in due canali ) in un filtro audio FFmpeg. Questa specifica è direttamente collegata alla documentazione FFmpeg sull'argomento , indicando che è altamente probabile che sia la stessa formula che FFmpeg implementa già per il suo -ac 2
switch. Se questo è vero, quindi digitare l'intera formula nella risposta di Gregory non sarebbe diverso dall'uso -ac 2
dell'interruttore, e quindi una perdita di tempo.
Ho deciso di testarlo con certezza ricodificando lo stesso audio di input usando entrambi -ac 2
e il -af
filtro dalla risposta di Gregory (i comandi esatti usati possono essere visti nelle note a piè di pagina di questa risposta).
Ho quindi confrontato le dimensioni dei file di output risultanti e ho scoperto che erano, byte per byte, le stesse dimensioni:
Alla fine, ho aperto entrambi i due file di output in Audacity e ho confrontato le loro forme d'onda per confermare che erano identici (clicca per ingrandire):
Sembra quindi abbastanza conclusivo che la formula ATSC descritta nella risposta di Gregory sia la stessa già implementata da FFmpeg e che utilizzarla sia completamente ridondante quando non fa nulla che -ac 2
non lo faccia, ed è un comando molto più ingombrante.
Downmix senza eliminare il canale LFE (risposta di Dave_750)
Tra i vari inclusi nelle risposte, questa è l'unica delle formule di downmix che sembra mescolare il canale LFE nello stereo di uscita invece di scartarlo del tutto, e di conseguenza, quello che assicura che il minimo suono dalla sorgente sia perso.
Il livello generale del volume è più alto e più pieno di quanto non lo sia -ac 2
, ma è comunque inferiore al downmix del dialogo Nightmode di seguito. Tuttavia, i livelli musicali sono molto più vicini alla sorgente rispetto al downmix del Dialogo notturno e, a causa dell'inclusione della traccia LFE, aumentare il volume dell'output mentre si utilizza questa formula di downmix può creare un flusso di output che suona più vero alla sorgente 5.1 rispetto a tutti gli altri formule che ho testato.
Se ne hai la capacità, ti consiglio vivamente di codificare i tuoi flussi audio usando sia questa formula di downmix che il downmix del Dialogo notturno, e confrontando attentamente le forme d'onda dei due per determinare quale è meglio.
Per eseguire il downmix di una traccia 5.1 su stereo usando questa formula e aumentare il suo volume a 425 (dove 256 è il 100% del livello del volume della sorgente originale):
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"
Downmix con il Nightmode Dialogue di Robert Collier (la risposta di Shane Harrelson)
La formula del Dialogo notturno, creata da Robert Collier sul forum di Doom9 e fornita da Shane Harrelson nella sua risposta, si traduce in un downmix molto migliore rispetto -ac 2
all'interruttore: invece di dialoghi troppo silenziosi, li riporta a livelli molto più vicini al fonte.
Dalla descrizione del mix di Robert Collier:
Dopo aver convertito molte tracce di film DTS dalla 5.1 alla 2.0 usando eac3to, ho trovato le mappature predefinite del canale eac3to per dare vita a dialoghi molto silenziosi e scene di musica e azione eccessivamente rumorose. Sebbene i coefficienti di downmix di eac3to channel abbiano una base scientifica, spesso non suonano bene in pratica a causa del basso volume di dialogo. Questa preimpostazione è per coloro che cercano dialoghi chiari con la musica del canale sinistro e destro ancora udibile ma più in sottofondo.
Come puoi vedere - il centro anteriore (dialoghi) entra correttamente ora e resta al livello originale - mentre la musica e le esplosioni rimangono un effetto di fondo e non ti sopraffanno. Questa preimpostazione risolve il problema di dover costantemente giocherellare con la manopola del volume durante la visione di DTS 5.1 convertiti in filmati 2.0 per ascoltare dialoghi. (Soprattutto per guardare film di notte in cui non si desidera svegliare gli altri, ma si desidera comunque poter ascoltare i dialoghi).
Sfortunatamente, la musica di questa formula di downmix è molto più bassa rispetto alla sorgente 5.1 (che era probabilmente in base alla progettazione considerando l'intenzione di Collier di creare un mix "nightmode") e a causa della completa perdita della traccia LFE, l'audio in uscita complessivo non lo fa suono pieno o vicino alla fonte come la formula di Dave_750 con volume potenziato .
Tuttavia, se per qualche motivo si desidera evitare di aumentare il volume complessivo dello stream, il Nightmode Dialogue sarebbe probabilmente l'opzione migliore - anche se, ancora una volta, consiglio vivamente di codificare il flusso audio su entrambi e di confrontare attentamente le forme d'onda dei due .
Per effettuare il downmix con la formula del dialogo Modalità notte in 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"
La risposta di Tarc
Questa risposta inserisce semplicemente la formula di downmix del dialogo Nightmode dalla risposta di Shane Harrelson in un comando per convertire il flusso audio in un contenitore MKV. Mentre il comando dato in questa risposta funzionerebbe bene su un tale flusso audio, adattandolo per una traccia audio autonoma darebbe l'errore:
Filtro e streamcopy non possono essere usati insieme
Questo perché il codec audio non può essere copiato durante il downmix - come tutte le altre modifiche apportate da FFmpeg a un flusso di output, un downmix richiede che la traccia venga ricodificata per applicare le modifiche.
Questo comando includeva anche un'opzione ridondante -ac 2
che FFmpeg avrebbe ignorato.
Comandi di test
Per dimostrare l'affidabilità dei test che ho condotto per questa risposta, di seguito sono riportati tutti i comandi che ho usato per testare ogni formula di downmix.
Il comando di test utilizzato per l' -ac 2
opzione:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -ac 2 "Audio 1 (-ac 2).wav"
Il comando test usato per la risposta di 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"
Il comando di test utilizzato per la risposta di 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"
Il comando di test utilizzato per la risposta di 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"