ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π²ΡΠΊΠ° Π² Π²ΠΈΠ΄Π΅ΠΎ ΡΠ°ΠΉΠ»Π°Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π°ΡΠ΄ΠΈΠΎ ΠΈ Π½Π΅ΠΉΡΠΎΠ½Π½ΡΡ ΡΠ΅ΡΠ΅ΠΉ.
- π΅ EBU R128 Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΡ - ΡΡΠ°Π½Π΄Π°ΡΡ Π²Π΅ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π²ΡΠΊΠ°
- π§ ΠΠ΅ΠΉΡΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΡΠΈ - ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΌΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ RNNoise ΠΈ Π΄ΡΡΠ³ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ²
- β‘ GPU ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ PyTorch Π΄Π»Ρ Π±ΡΡΡΡΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
- π ΠΠ°ΠΊΠ΅ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° - ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ
- ποΈ ΠΠΈΠ±ΠΊΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ - ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
- π₯οΈ Π£Π΄ΠΎΠ±Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ - Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
- Python 3.8+
- FFmpeg (ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ)
- CUDA (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ, Π΄Π»Ρ GPU ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ)
pip install -r requirements.txtWindows:
- Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ FFmpeg Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ°
- ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΡΡΡ ΠΊ FFmpeg Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ PATH
Linux/macOS:
# Ubuntu/Debian
sudo apt update && sudo apt install ffmpeg
# macOS
brew install ffmpegfrom audio_normalizer import AudioNormalizer
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ°
normalizer = AudioNormalizer(
method='ebu_r128', # ΠΈΠ»ΠΈ 'rms', 'peak'
target_loudness=-23.0, # LUFS
use_gpu=True, # ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ GPU Π΅ΡΠ»ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ
noise_reduction=True # Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΌΠΎΠ²
)
# ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
normalizer.normalize_file('input.mp4', 'output.mp4')
# ΠΠ°ΠΊΠ΅ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°
normalizer.normalize_batch(['file1.mp4', 'file2.mp4'], output_dir='normalized/')python gui.py- Π‘ΡΠ°Π½Π΄Π°ΡΡ Π΅Π²ΡΠΎΠΏΠ΅ΠΉΡΠΊΠΎΠ³ΠΎ Π²Π΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΠ·Π°
- Π¦Π΅Π»Π΅Π²Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ: -23 LUFS
- ΠΡΡΡΠΈΠΉ Π²ΡΠ±ΠΎΡ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΠ»ΡΡΠ°Π΅Π²
- ΠΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΡΡΠ΅Π΄Π½Π΅ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ
- Π₯ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΌΡΠ·ΡΠΊΠΈ
- ΠΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΠΏΠΈΠΊΠΎΠ²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ
- ΠΡΡΡΡΠ°Ρ, Π½ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΡΠΎΡΠ½Π°Ρ
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΌΠΎΠ²:
- RNNoise - ΡΠ΅ΠΊΡΡΡΠ΅Π½ΡΠ½Π°Ρ Π½Π΅ΠΉΡΠΎΠ½Π½Π°Ρ ΡΠ΅ΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠΌΠ°
- Spectral Gating - ΡΠΏΠ΅ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΡΠΎΠ±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· noisereduce
- Traditional DSP - ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ²
normalizer = AudioNormalizer(
method='ebu_r128',
target_loudness=-23.0,
speech_enhancement=True,
noise_reduction=True
)
normalizer.normalize_file('movie.mp4', 'movie_normalized.mp4')normalizer = AudioNormalizer(
method='rms',
target_loudness=-20.0,
speech_enhancement=True,
dynamic_range_compression=True
)
normalizer.normalize_file('podcast.mp4', 'podcast_normalized.mp4')Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» config.yaml Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
audio:
method: "ebu_r128"
target_loudness: -23.0
sample_rate: 48000
processing:
use_gpu: true
batch_size: 8
num_workers: 4
noise_reduction:
enabled: true
method: "rnnoise"
strength: 0.8- CPU: ~0.5x ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅
- GPU: ~2-5x ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Ρ CUDA
- ΠΠ°ΠΌΡΡΡ: ~500MB Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ HD Π²ΠΈΠ΄Π΅ΠΎ
ΠΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠΎΡΠΌΠ°ΡΡ:
- MP4, AVI, MKV, MOV, WMV
- MP3, WAV, FLAC, AAC, OGG
ΠΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠΎΡΠΌΠ°ΡΡ:
- MP4 (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ)
- MKV, AVI
- ΠΡΠ΄ΠΈΠΎ: AAC, MP3, FLAC
ΠΡΠΈΠ±ΠΊΠ°: FFmpeg Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π² PATH
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ FFmpeg ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² PATH
ΠΡΠΈΠ±ΠΊΠ°: CUDA out of memory
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π£ΠΌΠ΅Π½ΡΡΠΈΡΠ΅ batch_size ΠΈΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΡΠ΅ GPU
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°: ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
Π Π΅ΡΠ΅Π½ΠΈΠ΅: ΠΠΊΠ»ΡΡΠΈΡΠ΅ GPU ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠΌΠ΅Π½ΡΡΠΈΡΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ
MIT License - ΡΠΌ. ΡΠ°ΠΉΠ» LICENSE
- ffmpeg-normalize - ΠΎΡΠ½ΠΎΠ²Π° Π΄Π»Ρ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
- RNNoise - ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΌΠΎΠ²
- noisereduce - Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ issue Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ.