ffmpeg - 6 Kanal Audio downmix nach stereo

  • Hallo,

    Ich habe hier Capturevideos mit 6 Kanal Audio (1x Audiospur / 6 Kanäle).

    Laut dieser Info ist das 5.1 channel-layout so festgelegt:

    Code
    5.1            FL+FR+FC+LFE+BL+BR

    Im Capturevideo sieht das channel-layout allerdings so aus:

    Code
    FL+FR+LFE+FC+BL+BR

    Da ist also beim "audiodecoding" während des Captures irgendwas schiefgelaufen. Wie auch immer ...

    So sieht normalerweise meine ffmpeg Kommandozeile aus:

    Code
    ffmpeg -i video_pcm_51 -c:v copy -c:a ac3 -b:a 320k -ac 2 -af pan='stereo|FL=0.25*FL+FC+0.6*LFE|FR=0.25*FR+FC+0.6*LFE' -y video_stereo.mkv

    Resultat sollte ein 5.1 Downmix nach Stereo mit Dynamikkomprimierung sein, damit Sprache, Geräusche und Musik auf ähnlichem Level sind. Das kann also schon mal nicht klappen weil ich ein "channelmapping" FC<-->LFE brauche. Kanal 3+4 müssen somit vertauscht werden. Hat da jemand einen Tip für mich wie das funktioniert ?

    Ich habe mich damit beholfen einfach im Code FC / LFE zu tauschen. Sieht dann also so aus:

    Code
    ffmpeg -i video_pcm_51 -c:v copy -c:a ac3 -b:a 320k -ac 2 -af pan='stereo|FL=0.25*FL+LFE+0.6*FC|FR=0.25*FR+LFE+0.6*FC' -y video_stereo.mkv

    Klar, funktioniert ... gefällt mir aber nicht. In der ffmpeg-Doku ist zu lesen das man das channelmapping mit -'channelmap=0|1|3|2|4|5:5.1' hinbekommt. Ich schaffe es aber nicht diesen code in die o.g. Kommandozeile einzubauen. Vielleicht kann mir jemand dabei helfen.

    Bin mir auch nicht sicher ob der og. Code für einen "5.1 Downmix nach stereo" inkl. Dynamkkomprimierung optimal ist. Es gibt ja auch vorgefertigte Profile wie "dplii" dafür. vielleicht liest hier ein Wissender mit und kann mir einen Schubs geben.

    Gruß ggrub

  • Mir ist unklar was das 5.1 Channelmapping beim 5.1->Stereo downmix genutzt werden soll bzw. warum Du es da verwenden willst

    Zitat
    Resultat sollte ein 5.1 Downmix nach Stereo mit Dynamikkomprimierung sein,

    Okay, aber dein Code ist ein normaler Downmix, nix mit dynamik Komprimierung.
    Da sollte noch z.B. 'dynaudnorm' verwendet werden.
    Typische Downmix Varianten für 5.1 nach Stereo die mir einfallen sind:
    (Verwende die Sox Remix Syntax: <Channelnummer>v<Läutstärke Multiplikator> und gehe von Wave 5.1 Channel mapping als Quelle aus.)

    • simple: 1v0.3694,3v0.2612,5v0.3694 2v0.3694,3v0.2612,6v0.3694
    • dpl: 1v0.3205,3v0.2265,4v0.2265,5v0.2265 2v0.3205,3v0.2265,4v-0.2265,6v-0.2265
    • dpl2: 1v0.3254,3v0.2301,5v0.2818,6v0.1627 2v0.3254,3v0.2301,5v-0.1627,6v-0.2818
    • lfe: 1v0.2929,3v0.2071,4v0.2071,5v0.2929 2v0.2929,3v0.2071,4v0.2071,6v0.2929
    • dpl lfe: 1v0.2613,3v0.1847,4v0.1847,5v0.1847,6v0.1847 2v0.2613,3v0.1847,4v0.1847,5v-0.1847,6v-0.1847
    • dpl2 lfe: 1v0.2646,3v0.1870,4v0.1870,5v0.2291,6v0.1323 2v0.2646,3v0.1870,4v0.1870,5v-0.1323,6v-0.229

    siehe: https://forum.doom9.org/showthread.php?p=1623979

    Cu Selur

  • Hi Selur,

    Das Capturedevice liefert mir den 6 Kanal PCM mit vertauschten LFE und CENTER. Wenn ich so einen Downmix mache kommt Müll dabei raus. Ich muß den channel 3 nach 2 und channel 2 nach 3 switchen. Und dann erst den Downmix machen. Oder beim Downmix den Switch direkt angeben.

    Man kann es sehr gut in Audacity erkennen weil ich Capturefile (6 Kanal PCM) und Original (5.1 AC3) vergleichen kann. Oder ich hab hier ein grundlegendes Verständnisproblem.

  • Ok, so funktioniert es:

    Code
    ffmpeg -i "pcm6.wav" -map_channel 0.0.0 -map_channel 0.0.1 -map_channel 0.0.3 -map_channel 0.0.2 -map_channel 0.0.4 -map_channel 0.0.5 -c:a ac3 -ac 2 -b:a 256k -af pan='stereo|FL=0.25*FL+FC+0.6*LFE|FR=0.25*FR+FC+0.6*LFE',dynaudnorm -y wav-st.ac3

    Aber die Dynamikkomprimierung ist suboptimal, und der Stereo-Effekt ist auch nicht überragend. Das kann Hybrid/sox deutlich besser.

    ffmpeg unterstützt ja auch den "SoX Resampler"

    Zitat

    soxr

    select the SoX Resampler (where available); compensation, and filter optionsfilter_size, phase_shift, exact_rational, filter_type & kaiser_beta, are notapplicable in this case.

    Aber ob ich Lust habe mich damit auch noch zu beschäftigen weiß ich noch nicht. Das artet ja langsam in eine Wissenschaft aus.

    Schade das die ffmpeg-Doku stellenweise so miserabel ist.

  • So, das hier isses für mich:

    Code
    ffmpeg -i "pcm6.wav" -af pan="5.1| c0=c0 | c1=c1 | c2=c3 | c3=c2 | c4=c4 | c5=c5" -c:a ac3 -ac 2 -b:a 256k -af pan='stereo|FL=0.25*FL+FC+0.6*LFE|FR=0.25*FR+FC+0.6*LFE',"compand=0|0:1|1:-90/-900|-70/-70|-30/-9|0/-3:6:0:0:0" -y wav-st.ac3

    Das Channelmapping verwende ich nur wegen eines Capture-Bugs, muß normalerweise nicht sein. Die Dynamikkomprimierung "compand=0|0:1|1:-90/-900|-70/-70|-30/-9|0/-3:6:0:0:0" stammt aus der ffmpeg-Doku. Ob man nun "dynaudnorm" auch noch braucht muß man testen. Sieht hier aber nicht so aus.

    ich habe fertig ;)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!