Optie 1: Ingebouwde Normalisatiefilters
Actueel ffmpeg heeft twee filters die direct kunnen worden gebruikt voor normalisatie - hoewel ze al behoorlijk geavanceerd zijn, dus ze passen niet simpelweg versterking toe om een piekniveau te bereiken. Hier zijn ze:
-
loudnorm
: loudness normalisatie volgens EBU R128. U kunt een geïntegreerd luidheidsdoel, een luidheidsbereikdoel, of een maximale ware piek instellen. Dit wordt aanbevolen voor het publiceren van audio en video en wordt gebruikt door omroepen over de hele wereld.
-
dynaudnorm
: “intelligente” loudness normalisatie zonder clipping, die normalisatie dynamisch toepast over windowed gedeelten van het bestand. Dit kan de karakteristieken van het geluid veranderen, dus het moet met voorzichtigheid worden toegepast.
Ook kan het volume
filter gebruikt worden om eenvoudige volume-aanpassingen uit te voeren. Zie het wiki-item Audio Volumemanipulatie voor meer informatie.
Het loudnorm
filter kan in één keer gebruikt worden, maar het is aan te raden om twee keer over het filter te gaan, omdat dat een nauwkeurigere lineaire normalisatie mogelijk maakt. Dit is een beetje moeilijk te automatiseren. Als u een “eenvoudige” RMS-gebaseerde of pieknormalisatie naar 0 dBFS (of een ander doel) wilt, lees dan verder.
Optie 2: Gebruik de ffmpeg-normalize
tool
Ik heb een Python programma om mediabestanden te normaliseren , beschikbaar op PyPi ook . Je hoeft alleen maar:
Bijvoorbeeld:
ffmpeg-normalize input.mp4 -o output.mp4 -c:a aac -b:a 192k
Of, om eenvoudig een aantal audiobestanden in batch te normaliseren en ze als ongecomprimeerde WAV naar een uitvoermap te schrijven:
ffmpeg-normalize *.m4a -of /path/to/outputFolder -ext wav
Het gereedschap ondersteunt EBU R128 (standaard), RMS en peak. Kijk bij ffmpeg-normalize -h
voor meer opties en zie de README voor enkele voorbeelden.
Ondersteunt ook her-encodering met andere encoders (b.v. AAC of MP3), of automatische samenvoeging van de audio terug in de video.
Optie 3: Audio handmatig normaliseren met ffmpeg
In ffmpeg kun je het volume
filter gebruiken om het volume van een track te veranderen. Zorg ervoor dat je een recente versie van het programma downloadt.
Deze gids is voor peak normalisatie, wat betekent dat het luidste deel in het bestand op 0 dB komt te staan in plaats van iets lager. Er is ook RMS-gebaseerde normalisatie die probeert de gemiddelde luidheid hetzelfde te maken over meerdere bestanden. Om dat te doen probeert u niet het maximum volume naar 0 dB te duwen, maar het gemiddelde volume naar het dB-niveau van uw keuze (b.v. -26 dB).
Zoek uit welke versterking moet worden toegepast
Eerst moet de audiostream voor het maximale volume worden geanalyseerd om te zien of normaliseren zelfs maar zin heeft:
ffmpeg -i video.avi -af "volumedetect" -vn -sn -dn -f null /dev/null
Vervang /dev/null
door NUL
onder Windows.
De -vn
, -sn
, en -dn
argumenten instrueren ffmpeg om niet-audio streams te negeren tijdens deze analyse. Dit versnelt de analyse drastisch.
Dit zal iets als het volgende opleveren:
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] mean_volume: -16.0 dB
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] max_volume: -5.0 dB
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] histogram_0db: 87861
Zoals u kunt zien, is ons maximale volume -5.0 dB, dus kunnen we 5 dB versterking toepassen. Als je een waarde van 0 dB krijgt, dan hoef je de audio niet te normaliseren.
Het volumefilter toepassen:
Nu passen we het volume
filter toe op een audiobestand. Merk op dat het toepassen van het filter betekent dat we de audiostream opnieuw moeten coderen. Welke codec je voor audio wilt, hangt natuurlijk af van het oorspronkelijke formaat. Hier zijn enkele voorbeelden:
Uitgebreid audiobestand: Codeer het bestand met de encoder die je nodig hebt:
AVI formaat: Meestal zit er MP3 audio bij video die in een AVI container zit:
MP4 formaat: Bij een MP4 container, zul je meestal AAC audio aantreffen. We kunnen ffmpeg’s ingebouwde AAC encoder gebruiken.
In de bovenstaande voorbeelden wordt de video stream gekopieerd met behulp van -c:v copy
. Als er ondertitels in uw invoerbestand zitten, of meerdere video streams, gebruik dan de optie -map 0
voor de uitvoer bestandsnaam.