С аудио, с любыми конвертациями звука и его улучшением всё значительно проще. Не надо пытаться делать сложную обработку звука внутри AviSynth. Он для видео. Для улучшения звука (шумоподавление, нормализация, разделение дорожек) FFmpeg и Python-экосистема на голову выше.
Видео обрабатывает AviSynth, а аудио обрабатывается отдельно через FFmpeg/Python, и в конце они склеиваются (ремукаются).
Современные версии FFmpeg имеют встроенные мощные аудиофильтры.
Пример команды (все в одной строке):
Код:
ffmpeg -i input.mkv -c:v copy -af "loudnorm=I=-16:TP=-1.5:LRA=11, afftdn=nf=-25" -c:a aac -b:a 192k output.mkv
Что здесь происходит:
-c:v copy - видео копируется без перекодирования (мгновенно).
loudnorm - профессиональная нормализация громкости по стандарту EBU R128 (делает звук равномерным, как на ТВ/стриминге).
afftdn=nf=-25 - встроенный в FFmpeg спектральный шумодав (чем меньше число, тем агрессивнее подавление).
-c:a aac -b:a 192k - конвертация аудио в качественный AAC.
Продвинутое улучшение через Python + ML (Для архивов и реставрации):
Если звук старый, с шипением, гулом или нужно выделить голос (например, для реставрации старого фильма), FFmpeg-фильтров может не хватить. Здесь на помощь приходит Python.
...
Извлечение звука: ffmpeg -i input.mkv -vn -c:a pcm_s16le temp_audio.wav
Обработка в Python:
Для удаления шума: библиотека noisereduce или RNNoise (очень легкая нейросеть, отлично чистит речь).
Для разделения голоса и музыки/шума: библиотека demucs (от Meta) или spleeter. Она может вытащить чистый диалог из старой записи с фоновым гулом проектора.
Сборка: ffmpeg -i video_from_avisynth.mkv -i cleaned_audio.wav -c:v copy -c:a flac final_output.mkv
import soundfile as sf
import noisereduce as nr
# 1. Загружаем аудио
data, rate = sf.read("temp_audio.wav")
# 2. Применяем шумоподавление (предполагаем, что это речь)
reduced_noise = nr.reduce_noise(y=data, sr=rate, prop_decrease=0.8)
# 3. Сохраняем очищенный звук
sf.write("cleaned_audio.wav", reduced_noise, rate)
Кратко о параметрах:
prop_decrease=0.8 - степень подавления шума (от 0 до 1), 0.8 - сильное, но не искажающее речь подавление.
stationary=True/False - если шум постоянный (например, вентилятор), лучше stationary=True. Если меняется - оставьте False.
Третий уровень это Идеальный гибридный пайплайн (AviSynth + FFmpeg)
Batch-скрипт (Windows) для автоматизации:
set INPUT_VIDEO=input.mkv
set AVS_SCRIPT=script.avs
set TEMP_AUDIO=temp_audio.wav
set FINAL_AUDIO=final_audio.flac
set OUTPUT=final_result.mkv
[1/4] Извлекаем исходный звук без потерь...
ffmpeg -y -i "%INPUT_VIDEO%" -vn -c:a pcm_s16le "%TEMP_AUDIO%"
[2/4] Улучшаем звук (нормализация + легкий шумодав)...
ffmpeg -y -i "%TEMP_AUDIO%" -af "loudnorm=I=-16:TP=-1.5, afftdn=nf=-20" -c:a flac "%FINAL_AUDIO%"
[3/4] Обрабатываем видео через AviSynth (без звука, чтобы сэкономить ресурсы)...
:: Важно: в самом .avs скрипте используйте KillAudio(), если звук там не нужен
ffmpeg -y -i "%AVS_SCRIPT%" -c:v libx264 -crf 18 -preset slow -an temp_video.mkv
[4/4] Склеиваем обработанное видео и улучшенный звук...
ffmpeg -y -i temp_video.mkv -i "%FINAL_AUDIO%" -c:v copy -c:a copy -map 0:v:0 -map 1:a:0 "%OUTPUT%"
Готово Результат в "%OUTPUT%"