Lautstärke anheben mit FFMPEG

  • Salut,

    in der Doku zu FFMPEG gibt es eine Variable -vol, mit der man die Lautstärke beim Encoding manipulieren kann. Leider ist dessen Skala nicht wirklich transparent, als Standardwert werden 256 angegeben.
    Da das Audio beim Encoding grundsätzlich zu leise ist, möchte ich dieses gerne anheben. Leider erzielt man selbst mit Werten um die 500 keine akzeptablen Ergebnisse.
    Kann man mit FFMPEG die Lautstärke besser pegeln, vielleicht normalisieren und irgendwas, was in dB angegeben werden kann?
    ODER: Woran kann es liegen, das die mit FFMPEG erstellten Files grundsätzlich zu leise sind? Kann es an den Lautstärkeeinstellungen des Systems selbst (Suse) liegen?

  • Hm, Input wäre immer MPEG2 à la DVD, mit Sox würde ich (wenn möglich) nur Bearbeitung und anschliessende Transformation in ein nahezu-masterformat bevorzugen, erst in ffmpeg dann das eigentliche enocding.

  • Das sagt leider relativ wenig über Ausgabe- und Eingabeaudioformat aus. :(
    ich nehme jetzt mal .ac3 für beides an.

    Bezüglich dem Decodieren/Füttern von SoX gibt es zwei Möglichkeiten:
    1. SoX mit einem von ihm unterstützten Format füttern, siehe: http://sox.sourceforge.net/Docs/Features
    oder
    2. mit einem anderen Tool (z.B. ffmpeg/mplayer) dekodieren und SoX per (named) pipe übergeben.

    Bezüglich der Ausgabe, gibt man entweder in eine Datei (deren Format unterstützt sein muss, siehe: http://sox.sourceforge.net/Docs/Features) oder in eine pipe aus, so das entweder:
    1. SoX selber eine neue Datei erstellt
    2. die Ausgabe von SoX weitergeleitet wird (gehe im weiteren von nicht-named pipes aus) und von einem anderen Tool (z.B. ffmpeg/mencoder) als Input entgegengenommen wird und von diesem ins Zielformat konvertiert wird.

    Ich gehe jetzt mal davon aus, es liegt eine InputAC3.ac3 Datei vor und es soll eine OutputAC3 Datei erstellt werden. Mit ffmpeg soll die InputAC3.ac3 dekodiert, mit SoX der Ton geändert und mit ffmpeg die OutputAC3.ac3 Datei geschrieben werden.

    Zum Dekodieren sähe die CommandLine dann so aus:

    Code
    ffmpeg -y -i "InputAC3.ac3" -ac 6 -ar 48000 -acodec pcm_s16le -f wav -

    (wobei -ac 6 die Anzahl der Audiokanäle und -ar 48000 die Samplerate festlegt)

    Zum Tonanheben würde die SoX CommandLine so aussehen:

    Code
    sox -G --volume 2.5 -s -b 16 -c 6 -r 48000 -t raw - -t wav -

    (wobei -ac 6 die Anzahl der Audiokanäle und -ar 48000 die Samplerate festlegt;)
    -G legt fest, dass ein Schutz gegen Clipping aktiviert wird und mit --volume 2.5 wird die Lautstärke auf 250% erhöht sofern dies nicht Probleme mit Clipping hervorrufen würde.
    Es gibt auch noch andere Methoden die Lautstärke zu erhöhen, da empfehle ich Dir dann aber selber etwas zu testen und in die Dokumentation von SoX zu gucken.

    Und zum Dekodieren würde die CommandLine z.B. so aussehen:

    Code
    ffmpeg -y -i - -ab 576000 -ac 6 -ar 48000 OutputAC3.ac3

    (wobei -ac 6 die Anzahl der Audiokanäle und -ar 48000 die Samplerate festlegt)

    Insgesammt hätte man also:

    Code
    ffmpeg -y -i "InputAC3.ac3" -ac 6 -ar 48000 -acodec pcm_s16le -f wav - | sox -G --volume 2.5 -s -b 16 -c 6 -r 48000 -t raw - -t wav - | ffmpeg -y -i - -ab 576000 -ac 6 -ar 48000 OutputAC3.ac3

    (wobei -ac 6 die Anzahl der Audiokanäle und -ar 48000 die Samplerate festlegt)

    Cu Selur

  • Zum anpassen der Lautstärke gibt es bei Mencoder den Parameter > volnorm < eventuell besitzt FFmpeg was vergleichbares.
    Ist sicher nicht perfekt aber z.B. für mp3 ausreichend, für bessere Qualität würde ich das Original bevorzugen.

  • Thx,

    das klingt schon mal sehr gut.

    Ein paar Fragen hätte ich jedoch noch:

    - Wie kann man die Ausgabe von Sox direkt umleiten?
    - Woher kommt der Wert 576000?

    Das Szenario sieht wie folgt aus:

    1) Input ist ein MPEG PS mit stereo oder Surround (AC3, mpeg 2, PCM)
    2) File wird zerlegt
    3) Audiospur wird in Sox bearbeitet
    4) neue Audiospur wird mit Video wieder zu MPEG PS gemuxt ODER Sox leitet Audio direkt zu FFMPEG weiter
    5) Film wird mit FFMPEG encodet

    Ist das so richtig?

  • Zitat

    Wie kann man die Ausgabe von Sox direkt umleiten?


    über eine pipe " | " siehe Beispiel von oben,...

    Zitat

    Woher kommt der Wert 576000?


    576kBit/s war ein frei gewählter Wert bei Stereo ist weniger Datenrate sicher ausreichend

    Zitat

    Ist das so richtig?


    ja

Jetzt mitmachen!

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