Kirjoittaja Aihe: Mp3-tiedostojen normalisointi yhdistämällä mp3gain- ja ffmpeg-ohjelma  (Luettu 3090 kertaa)

elohope

  • Käyttäjä
  • Viestejä: 134
    • Profiili
En ole mielestäni saanut kunnolla normalisoitua mp3-åånitiedostoja mp3gain-ohjelmalla. Löysin äskettäin avuksi ffmpeg-ohjelman ominaisuuden, joka kertoo, miten paljon volyymia voi nostaa ilman että ääni säröytyy.

Alla olevassa skriptissä yhdistetään ohjelmat ffmpeg ja mp3gain. Jälkimmäinen asentuu Ubuntuun snapin kautta.

Skriptissä oletetaan, että normalisoitavat tiedostot ovat hakemistossa "Kansio".

Skriptissä ffmpeg laskee normalisointitarpeen ja mp3gain toteuttaa normalisoinnin. Tämä skripti normalisoi biisin volyymin vain jos volyymia tarvitsee nostaa ja vain jos noston määrä on yli 1 dB.

Yhdistäminen tuntuu toimivan lyhyen kokemuksen perusteella, mutta onko syytä olla varovainen?

Koodia: [Valitse]

#!/bin/bash

echo "Paina Enter, jos muutetaan biisien voluumeja. Muulla merkillä lopetetaan tähän."
read Lopetusvalinta
if [ "$Lopetusvalinta" != "" ] ; then
  exit
fi

Kansio="/home/$USER/Musiikki/Normalisoitavat/"

# Tiedostot joihin tulevat tiedot käsitellyistä biiseistä:
eikasitelty="/home/$USER/eikasitelty.txt"
if [ -e "${eikasitelty}" ]; then echo "" > "${eikasitelty}"; fi
kasitelty="/home/$USER/kasitelty.txt"
if [ -e "${kasitelty}" ]; then echo "" > "${kasitelty}"; fi

IFS=$'\n'
for biisi in $(find "${Kansio}" -name "*.mp3")
do
    # Välitulokset tallentuvat /tmp-kansioon:
    echo "" > /tmp/tulos1.txt
    echo "" > /tmp/tulos2.txt
    # Biisien äänityksen tason mittaaminen:
    ffmpeg -i "${biisi}" -af volumedetect -f null -y nul &> /tmp/tulos1.txt
    # Näin monta desibeliä biisin volyymia voitaisiin nostaa:
    grep "max_volume" /tmp/tulos1.txt > /tmp/tulos2.txt
    # Korjaustarvetta siistitään, mm. desimaalit pois.
    korjaustarve="$(awk -F " " '{print $(NF-1)}' /tmp/tulos2.txt)"
    pyoristettytarve="$(echo "$korjaustarve" | awk -F "." '{print $(NF-1)}')"
    suuntakorjaus=$(( -1 * pyoristettytarve ))
    valmiskorjaus="$(echo $suuntakorjaus | awk -F "."  '{print $1}')"
    if (( valmiskorjaus > 1 ))
    then
        # cp "${biisi}" "/home/$USER/Desktop/b/"
        # bittinopeus=$(ffprobe -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 "${biisi}")
        mp3gain -g "${valmiskorjaus}" "${biisi}" # lisää -p jos haluat että tiedoston muutospäiväys ei muutu
        echo "Korjaus: "${valmiskorjaus}" ${biisi}"
        echo "${biisi}" >> "${kasitelty}"
    else
        echo "${biisi}" >> "${eikasitelty}"
    fi
done


# ~/normalisoi_mp3gain_ja_ffprobe-ohjelmilla.sh


Postimies

  • Käyttäjä
  • Viestejä: 2619
    • Profiili
Kaikki soittimet eivät tue mp3gain ohjelman merkintöjä. Itsellä enempi ongelma liian suuri äänenvoimakkuus. Mitä uudempi äänite sitä kovemmin soi. Kiva tietää, että mp3gain on saatavilla. Poistunut uudemmista Ubuntuista ja olen kaivannut sitä. Äänitiedostojen "normalisoiminen" haastavaa kun useampia formaatteja käytössä. Kertoisiko  ffmpeg myös kappalen suurimman voluumin?
« Viimeksi muokattu: 10.11.21 - klo:23.48 kirjoittanut Postimies »

elohope

  • Käyttäjä
  • Viestejä: 134
    • Profiili
Käyttämällä Arch Linuxissa komentoa

Koodia: [Valitse]
ffmpeg -i Djonkana.mp3 -af volumedetect -f null -y nul &> tulos1.txt
saadaan mm. että "max_volume: -1.6 dB".
Tämä ymmärtääkseni kertoo, että kyseisessä biisissä maksimivolyymi
jää 1.6 dB alle 90 dB:n eli äänen särkymisrajan.

Ehkä joku osaa selittää alla olevat tulokset vielä tarkemmin?
Alla komennon tulos kokonaisuudessaan.

Koodia: [Valitse]
ffmpeg version n4.4 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11.1.0 (GCC)
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
[mp3 @ 0x55e973968a80] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from '/home/jorma/Desktop/Djonkana.mp3':
  Metadata:
    title           : Djonkana
    artist          : Boubacar Traoré
    genre           : Other
  Duration: 00:04:02.90, start: 0.000000, bitrate: 64 kb/s
  Stream #0:0: Audio: mp3, 22050 Hz, stereo, fltp, 64 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (mp3 (mp3float) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, null, to 'nul':
  Metadata:
    title           : Djonkana
    artist          : Boubacar Traoré
    genre           : Other
    encoder         : Lavf58.76.100
  Stream #0:0: Audio: pcm_s16le, 22050 Hz, stereo, s16, 705 kb/s
    Metadata:
      encoder         : Lavc58.134.100 pcm_s16le
size=N/A time=00:00:00.00 bitrate=N/A speed=N/A   
size=N/A time=00:04:02.83 bitrate=N/A speed=1.21e+03x   
video:0kB audio:20918kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[Parsed_volumedetect_0 @ 0x55e97397eb40] n_samples: 10710144
[Parsed_volumedetect_0 @ 0x55e97397eb40] mean_volume: -19.9 dB
[Parsed_volumedetect_0 @ 0x55e97397eb40] max_volume: -1.6 dB
[Parsed_volumedetect_0 @ 0x55e97397eb40] histogram_1db: 11
[Parsed_volumedetect_0 @ 0x55e97397eb40] histogram_2db: 195
[Parsed_volumedetect_0 @ 0x55e97397eb40] histogram_3db: 852
[Parsed_volumedetect_0 @ 0x55e97397eb40] histogram_4db: 3301
[Parsed_volumedetect_0 @ 0x55e97397eb40] histogram_5db: 8584

Postimies

  • Käyttäjä
  • Viestejä: 2619
    • Profiili
Melko uutta kääntäjää tuo Arch Linux käyttää. Ubuntussani vielä gcc 9.

max_volume kertonee paljonko äänenvoimakkuutta voidaan nostaa. histogram_3db: 852 kertonee kuinka monessa kohtaa ääni säröytyy jos äänen voimakkuutta nostetaan 3 db.

mp3gain-ohjelmalla on muistaakseni vipi, joka estää säröytymisen. Myös vipu albumeille.Itsellä levyn kappaleet yhdessä kansiossa ja jos menee muuttamaan vaikka Dark Side of the Moon levyn tasoja voi tulla ongelmia kun kappaleiden välissä ei taukoa. Loistava levy edelleen äänen testailuun. Soittimen pitää osata soittaa kappaleet ilman taukoa.

Jos albumikokonaisuudet tärkeitä pitää etsiä albumin max ja muuttaa kaikkia kappaleita yhtä paljon. Jonkin tapahtuman biisilista sitten taas niin, että soivat suunnilleen samalla volyymilla. mp3gain ei muuta kappaletta vaan kirjoittaa ohjeen soittimelle metatietoihin joka muuttaa äänenvoimakkuutta sen mukaan. Hyvä soitin lukee seuraavan kappaleen etukäteen ja säätää äänenvoimakkuuden ennen toiston alkua. mp3gainin lisäksi suosikkini musan toistoon on myös poistunut valikoimista.  Se ei ole Ubuntun vika, jos joidenkin ohjelmien kehitys loppuu.

elohope

  • Käyttäjä
  • Viestejä: 134
    • Profiili
Lainaus
... histogram_3db: 852 kertonee kuinka monessa kohtaa ääni säröytyy jos äänen voimakkuutta nostetaan 3 db.

Hyvä tietää, kiitos. Minulle tuo oli mysteeri.

Kuuntelen musiikkia uutisten lomassa, joten haeskelen tasapainoa puheen ja musiikin volyymien välille. Lupaava uusi löytö on ffmpegin speechnorm -suodatin, jolla voi aika laadukkaasti nostaa hiljaisempien uutislähetysten äänentasoa.