Die Antworten auf diese Frage sind inzwischen ein bisschen chaotisch geworden, wobei viele redundante Informationen und andere vollständige Ungenauigkeiten enthalten. Diese Antwort ist ein Versuch, die Informationen in diesen Antworten zu rationalisieren, während die darin enthaltenen Probleme beseitigt werden.
Am wichtigsten ist, dass Gregors Antwort, die derzeit am häufigsten gestellte Antwort auf diese Frage, nicht anders ist als die Verwendung des -ac 2
Schalters - mehr dazu weiter unten.
Downmixen eines 5.1-Kanal-Audiostreams auf Stereo mit -ac 2
FFmpeg verfügt über integrierte Funktionen zum Downmixen einer 5.1-Spur auf Stereo. Dies ist auch die Lösung, die in der FFmpeg-eigenen Dokumentation empfohlen wird :
Hinweis: ffmpeg integriert ein standardmäßiges Down-Mix- (und Up-Mix-) System, das -ac
dem Pan-Filter vorzuziehen ist (die Option), sofern Sie keine besonderen Anforderungen haben.
Der -ac 2
Schalter mischt die Anteile der ersten 5 Kanäle aus dem 6-Kanal-Stream der Quelle - Back Left, Back Right, Front Left, Front Right und Front Center - in die Kanäle Front Left und Front Right des Stereo-Ausgangsstreams:
Wenn Sie diese Option verwenden , wird Audio vom LFE-Kanal ( .1 in 5.1, reserviert für den Subwoofer und für tiefe Niederfrequenzeffekte) vollständig verworfen .
Leider -ac 2
ergaben sich bei meinen Tests die unterschiedlichsten Gesamtpegel für Musik und Dialoge, sodass es sich um die Downmix-Formel handelt, die die schlechteste Ausgabe aller von mir getesteten Formeln liefert, obwohl Sie sie möglicherweise testen und feststellen können gibt Ihnen einen vollkommen angemessenen Downmix für Ihre Bedürfnisse, in welchem Fall die Verwendung einer anderen Formel für Sie übertrieben wäre.
So mischen Sie einen DTS-Track herunter, -ac 2
ohne ihn zu transkodieren (dh Codec und Erweiterung bleiben unverändert):
ffmpeg -i "sourcetrack.dts" -c:a dca -ac 2 "stereotrack.dts"
Wie von Mephisto in seiner Antwort hervorgehoben, können Sie den Stream heruntermischen und gleichzeitig die Lautstärke erhöhen, wenn der Dialog und die Musik für Sie ausgewogen sind, aber nur eine geringe Lautstärke aufweisen:
ffmpeg -i "sourcetrack.dts" -c:a dca -ac 2 -vol 425 "stereotrack.dts"
Für den -vol
Switch entspricht 100% Lautstärke in der Quelle dem ganzzahligen Wert 256, und wenn Sie einen größeren Wert als diesen verwenden, wird die Gesamtlautstärke des Audiostreams erhöht. Beachten Sie jedoch, dass zu viel zu Verzerrungen oder Artefakten führen kann, insbesondere in den lauteren Bereichen.
So mischen Sie einen Audiostream auf Stereo herunter und codieren ihn in den AC3-Codec:
ffmpeg -i "sourcetrack.dts" -c:a ac3 -ac 2 "stereotrack.ac3"
Heruntermischen eines 5.1-Kanal-Audio-Streams auf Stereo mit einem benutzerdefinierten Mix-Algorithmus
Wenn Sie einen Downmix mit höherer Qualität wünschen oder den LFE-Stream unbedingt in Ihre Ausgabe einbeziehen müssen, können Sie den Audio-Filter-Schalter ( -af
) von FFmpeg verwenden, um das Audio mithilfe einer benutzerdefinierten Mischformel herunterzumischen.
Downmix mit der ATSC-Formel (Gregorys Antwort)
Zum Zeitpunkt der Veröffentlichung dieser Antwort lautete die am häufigsten gestimmte Antwort auf diese Frage Gregorys , mit der die Formel aus der ATSC-Spezifikation (siehe Abschnitt 7.8.2, Downmixing in zwei Kanäle ) in einen FFmpeg-Audiofilter eingefügt wurde . Diese Spezifikation ist direkt mit der FFmpeg-Dokumentation zu diesem Thema verknüpft , was darauf hindeutet, dass es sich höchstwahrscheinlich um dieselbe Formel handelt, die FFmpeg bereits für seinen -ac 2
Switch implementiert . Wenn dies zutrifft, ist es keine -ac 2
Zeitverschwendung , die gesamte Formel in Gregorys Antwort einzutippen .
Ich habe mich entschlossen, dies mit Sicherheit zu testen, indem ich denselben Audioeingang mit beiden -ac 2
und dem -af
Filter aus Gregorys Antwort neu codierte (die genauen verwendeten Befehle können den Fußnoten zu dieser Antwort entnommen werden).
Ich habe dann die Größen der resultierenden Ausgabedateien verglichen und festgestellt, dass sie Byte für Byte dieselbe Größe haben:
Schließlich habe ich beide Ausgabedateien in Audacity geöffnet und ihre Wellenformen verglichen, um zu bestätigen, dass sie identisch sind (zum Vergrößern klicken):
Es scheint daher ziemlich schlüssig, dass die in Gregorys Antwort beschriebene ATSC-Formel die gleiche ist, die bereits von FFmpeg implementiert wurde , und dass ihre Verwendung völlig überflüssig ist, wenn sie nichts -ac 2
tut, was nicht der Fall ist, und ein viel umständlicherer Befehl ist.
Downmixing ohne Verwerfen des LFE-Kanals (Antwort von Dave_750)
Dies ist die einzige der in den Antworten enthaltenen Downmix-Formeln, die den LFE-Kanal in das Stereo-Ausgangssignal zu mischen scheint, anstatt ihn vollständig zu verwerfen. Infolgedessen ist dies diejenige, die den geringsten Klang von der Quelle sicherstellt hat verloren.
Der Gesamtlautstärkepegel ist höher und voller -ac 2
als der darunter liegende Nightmode-Dialog-Downmix. Musikpegel sind jedoch viel näher an der Quelle als der Nightmode Dialogue-Downmix, und aufgrund der Einbeziehung der LFE-Spur kann durch Erhöhen der Lautstärke der Ausgabe bei Verwendung dieser Downmix-Formel ein Ausgabestream erzeugt werden, der für die 5.1-Quelle besser geeignet ist als für alle anderen Formeln, die ich getestet habe.
Wenn Sie die Möglichkeit haben, würde ich Ihnen dringend empfehlen, Ihre Audiostreams sowohl mit dieser Downmix-Formel als auch mit dem Nightmode-Dialog-Downmix zu codieren und die Wellenformen der beiden sorgfältig zu vergleichen, um festzustellen, welche besser ist.
So mischen Sie eine 5.1-Spur mit dieser Formel auf Stereo herunter und erhöhen den Lautstärkepegel auf 425 (wobei 256 100% des Lautstärkepegels der Originalquelle entspricht):
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"
Downmixing mit Robert Colliers Nightmode-Dialog (Shane Harrelsons Antwort)
Die von Robert Collier im Doom9- Forum erstellte und von Shane Harrelson in seiner Antwort erwähnte Nightmode-Dialogformel führt zu einem weitaus besseren Downmix als der -ac 2
Schalter. Statt übermäßig leiser Dialoge werden sie auf Ebenen zurückgebracht, die viel näher an denen von Doom9 liegen Quelle.
Aus Robert Colliers Beschreibung der Mischung:
Nachdem ich mit eac3to viele DTS-Filmspuren von 5.1 auf 2.0 konvertiert habe, habe ich die Standard-Kanalzuordnungen von eac3to gefunden, die zu sehr leisen Dialogen und zu lauter Musik und Actionszenen führen. Obwohl die Downmix-Koeffizienten für jeden Kanal eine wissenschaftliche Grundlage haben, klingen sie in der Praxis aufgrund der geringen Dialoglautstärke oft nicht gut. Diese Voreinstellung ist für diejenigen gedacht, die klare Dialoge suchen, bei denen die Musik des linken und rechten Kanals immer noch hörbar ist, jedoch mehr im Hintergrund.
Wie Sie sehen können - die vordere Mitte (Dialoge) kommt jetzt korrekt herein und bleibt auf dem ursprünglichen Niveau - während die Musik und Explosionen ein Hintergrundeffekt bleiben und Sie nicht überwältigen. Diese Voreinstellung behebt das Problem, dass Sie ständig am Lautstärkeregler herumspielen müssen, wenn Sie DTS 5.1 in 2.0-Filme konvertieren, um Dialoge zu hören. (Besonders für Filme in der Nacht, in denen Sie andere nicht wecken, aber dennoch Dialoge hören möchten).
Leider ist die Musik dieser Downmix-Formel viel leiser als in der 5.1-Quelle (was aufgrund der Absicht von Collier, einen "Nightmode" -Mix zu erstellen, beabsichtigt war) und aufgrund des vollständigen Verlusts der LFE-Spur nicht der gesamte Audioausgang Klang so voll oder quellnah wie Dave_750's Formel mit erhöhter Lautstärke .
Wenn Sie jedoch aus irgendeinem Grund vermeiden möchten, die Gesamtlautstärke des Streams zu erhöhen, ist der Nachtmodus-Dialog wahrscheinlich die beste Option. Auch hier würde ich dringend empfehlen, Ihren Audiostream für beide zu codieren und die Wellenformen der beiden sorgfältig zu vergleichen .
So mischen Sie mit der Nightmode-Dialogformel in FFmpeg herunter:
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"
Tarcs Antwort
Diese Antwort setzt einfach die Nightmode Dialogue-Downmix-Formel aus Shane Harrelsons Antwort in einen Befehl zum Konvertieren des Audiostreams in einen MKV-Container um. Während der in dieser Antwort gegebene Befehl in einem solchen Audiostream gut funktionieren würde, würde das Anpassen für eine eigenständige Audiospur den Fehler ergeben:
Filterung und Streamcopy können nicht zusammen verwendet werden
Dies liegt daran, dass der Audiocodec beim Downmixen nicht kopiert werden kann. Wie alle anderen Änderungen, die FFmpeg an einem Ausgabestream vornimmt, erfordert auch ein Downmix , dass die Spur neu codiert wird, damit die Änderungen übernommen werden.
Dieser Befehl enthielt auch einen redundanten -ac 2
Schalter, den FFmpeg ignoriert hätte.
Testbefehle
Um die Zuverlässigkeit der Tests zu demonstrieren, die ich für diese Antwort durchgeführt habe, sind nachfolgend alle Befehle aufgeführt, die ich zum Testen der einzelnen Downmix-Formeln verwendet habe.
Der für die -ac 2
Option verwendete Testbefehl:
ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -ac 2 "Audio 1 (-ac 2).wav"
Der Testbefehl für Gregorys Antwort:
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"
Der Testbefehl für die Antwort von 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"
Der Testbefehl für Shane Harrelsons Antwort:
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"