Normalisieren mit Sox

  • Hi

    Ich nutze Sox um Tonspuren von 23.976 zu 25 FPS zu bringen.

    Nun sind einige Tonspuren echt sehr leise. Und will diese Normalisieren. Das geht zwar mit EAC3To aber ich will das mit Sox machen. Da EAC3To bei der Tonhöhe den Pitch hat.

    Nur wie baue ich das ein

    Beispiel:
    C:\ffmpeg -threads 8 -v -10 -y -i "%input%" -ac %channels% -acodec pcm_s16le -f s16le - | C:\sox --ignore-length -S -t raw -e signed-integer -b 16 -c%channels% -r48000 - -t wav - speed 1.04271 | C:\aften -v 2 -readtoeof 1 -b 448 - "%output%"

    Stehe da leider etwas auf den Schlauch. Und bitte nicht auf die Sox Hilfe verweisen wenn die mir weiter helfen würde. Würde ich nicht fragen.

  • SoX kann zwar normalisieren (−−norm[=dB-level]); es ist aber wahrscheinlich, dass das in einer Pipe nicht möglich ist: Um die nötige Verstärkung zu berechnen, mit der die lauteste Stelle gerade eben so weit verstärkt wird, dass sie die gewünschte Maximal-Lautstärke gerade so nicht überschreitet, müssen beliebige Audio-Programme den gesamten Ton zweimal verarbeiten (im ersten Durchlauf nach der lautesten Stelle suchen, im zweiten Durchlauf dann den gesamten Ton um den berechneten Faktor verstärken). Eine Pipe kann aber nur einmal gelesen werden, danach sind die Daten durchgelaufen. Du müsstest dafür also wohl Zwischendateien erzeugen lassen.

  • a. sollte auch mit pipe gehen, da sox den input cached
    b. zwischen ffmpeg und sox würde ich empgehlen nicht raw sondern sox als Format zu verwenden.

    Du meinst So?

    C:\ffmpeg -threads 8 -v -10 -y -i "%input%" -ac %channels% -acodec pcm_s16le -f s16le - | C:\sox --ignore-length -S -t sox -e signed-integer -b 16 -c%channels% -r48000 - -t wav - speed 1.04167 | C:\aften -v 2 -readtoeof 1 -b 448 - "%output%"

    Und −−norm[=dB-level]

    Wäre dann −−norm=0 eine Normalisierung auf 0db.

    Also Beispiel
    C:\ffmpeg -threads 8 -v -10 -y -i "%input%" -ac %channels% -acodec pcm_s16le -f s16le - | C:\sox −−norm=0 --ignore-length -S -t sox -e signed-integer -b 16 -c%channels% -r48000 - -t wav - speed 1.04167 | C:\aften -v 2 -readtoeof 1 -b 448 - "%output%"

    Baue das in Staxrip ein. Daher die Variablen.

  • Wenn das so klappt, sieht's gut aus für mich mit dem Normalisieren. Aber ich vermute, ffmpeg muss in einem sox-Format ausgeben, nicht in einem pcm-Format? Hybrid wird das sicherlich ähnlich benutzen.

    Auf 0 dB sollte man aber nicht normalisieren, besser etwas vorsichtiger. Durch die verlustbehaftete psycho-akustische Komprimierung könnte es bei der Decodierung theoretisch zum Übersteuern kommen. Das Risiko ist gering, aber wenn's doch knistert, merkt man das wohl erst, wenn der Film einmal komplett durchläuft.

    Ich habe "--norm=-3" für -3 dB gefunden (typische mittlere Aussteuerung); bis etwa -0.5 würde ich für sinnvoll halten. Aber da spekuliere ich mal wieder...

  • Also bis jetzt habe ich damit keinerlei Probleme gehabt.
    Wobei ich zugeben muss ganz kapiere ich die Zeile nicht. Habe das aus den Foren zusammengesucht.

    Auch von Selurs Hybrid Forum. :D

    Zum Normalisierungsfaktor. Kling einleuchtend nicht gleich bis 0db zu gehen. Da hast Du recht. Es geht ja auch nur darum wirklich sehr leise Tonse anzuheben. Ab und zu sind einige echt etwas merkwürdig ausgesteuert. Denke -2 sollte passen. Also genug Reserve. Clipping will ich unbedingt vermeiden. Das ist Glasklar.

  • Also soweit habe ich es erst mal hinbekommen.

    C:\Hybrid\ffmpeg -threads 8 -v -10 -y -i "E:\2\Audio.dts" -ac 6 -acodec pcm_s16le -f s16le - | C:\Hybrid\sox --ignore-length -S -t raw -e signed-integer -b 16 -c6 -r48000 - -t wav - --multi-threaded gain -n -3 tempo 1.04271 | C:\Hybrid\aften -v 2 -readtoeof 1 -b 448 - "E:\2\Audio_Output.ac3"

    Da ist aber noch ein Fehler.

    Zitat

    b. zwischen ffmpeg und sox würde ich empgehlen nicht raw sondern sox als Format zu verwenden.

    Das bekomme ich nicht hin. Ernte nur Fehlermeldungen.

    5 Mal editiert, zuletzt von trecordings (30. Juli 2016 um 15:45)

  • mit sox sähe es z.B. so aus:

    Code
    ffmpeg -y -threads 8 -loglevel fatal -i "input.dts" -ac 6 -ar 48000 -sample_fmt s32 -f sox - | sox --multi-threaded --ignore-length --buffer 524288 -S -t sox - -t wav - tempo 1.04271 gain -n -3.00 |  aften -v 2 -pad 0 -readtoeof 1 -b 448 - "output.ac3"
  • Da passiert dann gar nix.

    Ohne log level wilde Fehlermeldungen. LOL

    So langsam habe ich aber auch keine Lust mehr. Ich sitze da nun schon seit 8 Uhr dran und mir kommt echt gleich die Galle hoch. :)

    Scheißt auf raw oder nicht. Ging ja nun schon 1000 mal.

    Edit:
    Muss gerade etwas über mich selber lachen

    Zitat

    Nun sind einige Tonspuren echt sehr leise. Und will diese Normalisieren. Das geht zwar mit EAC3To aber ich will das mit Sox machen. Da EAC3To bei der Tonhöhe den Pitch hat.

    Und dann wende ich mit Sox Jahre Speed statt Tempo an und merke nicht mal den Pitch. ;D

    2 Mal editiert, zuletzt von trecordings (30. Juli 2016 um 20:47)

  • Normalisieren mit ffmpeg am Beispiel (Windows-Eingabeaufforderung):

    Normalisieren:
    1. Analyse

    Code
    ffmpeg -i "Video.MP4" -af "volumedetect" -vn -f null nul 2>&1 >nul|find "max_volume"

    Wenn das maximale Volumen bei 0 dB liegt, muss nicht normalisiert werden.


    2. Um 4.2 dB anheben und ein MP3-Audio draus machen:

    Code
    ffmpeg -y -i "Video.MP4" -c:v copy -c:a libmp3lame -af volume=4.2 video_normalized.mp4

Jetzt mitmachen!

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