Normalizuj różne poziomy dźwięku w jednym filmie

1

Mam skrypt do przetwarzania / kodowania filmów. Niektóre filmy mają różne poziomy dźwięku (jak 2 filmy zostały połączone, a jeden miał głośny dźwięk, a drugi cichy dźwięk). Chcę znormalizować dźwięk w taki sposób, aby zmniejszyć głośny dźwięk i zwiększyć cichy dźwięk, aby oba były prawie równe. Chociaż używam HandbrakeCLI do kodowania, ale każde inne rozwiązanie, takie jak ffmpeg, które może być użyte z terminala Linuksa, będzie działać.

Zrobiłem kilka prac badawczo-rozwojowych, ale mam bardzo ograniczoną wiedzę na temat dźwięku, więc nie mogłem go uruchomić. Niektóre z rozwiązań, które szukałem, to normalizacja dźwięku i powtórka (tylko tag, ale muszę bezpośrednio zmienić wideo podczas kodowania, a nie tylko dodać tag).

Mam przykładowe dane wejściowe i przykładowe dane wyjściowe. Przykładowe wyjście jest tworzone przez ręczne wybranie głośnego dźwięku i zmniejszenie go oraz ręczne wybranie cichego dźwięku i zwiększenie go.

Wkład: Oryginalne audio

Wydajność: Znormalizowane audio

Jak widać w oryginalnym dźwięku, cały dźwięk jest cichy, z wyjątkiem ostatniej małej części, która jest zbyt głośna, a na wyjściu oba są prawie równe. Ale problem polega na tym, że chcę to zrobić automatycznie.

Edytować:

Wynik ffmpeg -i in.mp4 -af "dynaudnorm" -vcodec copy out.mp4: Po dynaudnormie

Muhammad Tahir
źródło
Zajrzyj do filtra dynaudnorm .
Gyan
@Mulvya Dzięki, wydaje się możliwe rozwiązanie mojego problemu zgodnie z akapitem wprowadzającym. Zaktualizuje się po wypróbowaniu.
Muhammad Tahir
@Mulvya proszę zobaczyć moją edycję. dynaudnormmaksymalizuje głośność, aby dopasować najwyższą głośność, ale istnieją pewne problemy, takie jak: początkowa głośność jest nadal cicha, czy jest też sposób na podanie dynaudnormszczytowej wartości głośności, aby uzyskać pożądaną moc wyjściową zamiast dopasowywania głośności do punktu szczytowego?
Muhammad Tahir
Eksperymentuj z parametrami piku i wartości skutecznej, np. "dynaudnorm=p=0.5" Lub"dynaudnorm=r=0.6"
Gyan