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.
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
:
dynaudnorm
maksymalizuje 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 dynaudnorm
szczytowej wartości głośności, aby uzyskać pożądaną moc wyjściową zamiast dopasowywania głośności do punktu szczytowego?
"dynaudnorm=p=0.5"
Lub"dynaudnorm=r=0.6"