You usually don't need a script like the following. I just finished writing it. Its use makes sense for old video recordings with considerable volume changes.
The audio is normalized second by second instead of all at once. The script uses a maximum amplification value (35dB) to prevent every silence from becoming a din.
For this script to work, you must have "ffmpeg" and "sox" installed.
Happy hacking!
#!/bin/bash
input=input.mkv
output=output.mp4
audio=audio.wav
newaudio=combined.wav
ffmpeg -i "$input" -vn -ar 44100 -ac 2 "$audio"
ffmpeg -i "$audio" -f segment -segment_time 1 -c copy out%06d.wav
for f in out*.wav
do
# detects volume in decibel
MAX=$(ffmpeg -hide_banner -i "$f" -map 0:a -filter:a volumedetect -f null /dev/null 2>&1 | grep 'max_volume' | awk '{print $5}')
# removes the minus sign (only if $MAX starts with a "-" (wildcard matching))
if [[ $MAX == -* ]]; then MAX="${MAX:1}"; fi
# set a maximum volume amplification
if (( $(echo "$MAX > 35.0" | bc -l) )); then MAX="35.0"; fi
echo $f" -> "$MAX
ffmpeg -i $f -af "volume="$MAX"dB" max$f
done
# Before merging the audio files with sox, we need to set up an high max number of files to be concatenated
ulimit -n 16384 # https://www.spinics.net/lists/sox-users/msg00167.html
sox maxout*.wav $newaudio
rm *out*.wav
rm $audio
# now we replace the old audio with the new audio (https://superuser.com/a/1137613)
ffmpeg -i "$input" -i "$newaudio" -c:v copy -map 0:v:0 -map 1:a:0 "$output"
rm $newaudio
Autore:
Francesco Galgani
(se non diversamente specificato)
Vedi anche: Nuove funzionalità di traduzione e sintesi vocale nel blog
Inserisci un testo nell'input sottostante e premi "Play" per ascoltarlo. Scegli la lingua e la voce usando il menù a tendina.
La qualità della voce può cambiare a seconda del browser e del sistema operativo che stai utilizzando.
Informativa sulla privacy:
Il servizio TTS presente in questa pagina non comporta alcuno scambio di dati con il mio server: la conversione del testo in audio avviene interamente sul dispositivo dell’utente, sfruttando le funzionalità offerte dal browser utilizzato.
Tuttavia, alcuni browser – come Google Chrome e Microsoft Edge su sistemi Linux – effettuano la sintesi vocale inviando il testo ai rispettivi server (Google e Microsoft). In questi casi, eventuali implicazioni relative alla privacy dipendono esclusivamente dal comportamento del browser e dai fornitori dei relativi servizi, e non da questa pagina web. È bene sottolineare che altri browser, o gli stessi browser su sistemi operativi diversi, possono invece eseguire la sintesi vocale in modo completamente offline.
Non raccolgo né elaboro alcun dato relativo agli utenti o all’utilizzo del servizio TTS offerto su questo blog.
Autore:
Francesco Galgani
(se non diversamente specificato)