Выравнивание громкости перед обработкой

Ключевая находка по записям с микрофоном на столе: без выравнивания тихий
дальний участник сливается с громким и разделение разваливается. Замер на
трёх разговорах: доля второго участника выросла с 1.8 до 24.3 процента,
переключений между репликами - с 21 до 71 процента.

Работает только выравнивание: шумоподавление, полосовой фильтр и компандер
не дали ничего. Параметры подобраны замером, f=400:g=3 давал 8.6 процента
вместо 43.2. На распознавание не влияет - расшифровки фрагментов совпали
дословно.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Vladimir Bryzgalov
2026-08-16 00:40:52 +05:00
co-authored by Claude Opus 5
parent e6e10dddd1
commit eda6fa143a
6 changed files with 74 additions and 12 deletions
+4 -3
View File
@@ -63,11 +63,12 @@ def _process(job_id: str, worker: Pipeline, pool) -> None:
# задачи выстраиваются в очередь вместо параллельной работы.
from app.worker import run_job
result = pool.submit(run_job, str(upload), speakers, worker.ffmpeg).result()
result = pool.submit(run_job, str(upload), speakers, worker.ffmpeg,
settings.normalize).result()
else:
with tempfile.TemporaryDirectory() as tmp:
wav = Path(tmp) / "audio.wav"
to_wav16k(upload, wav, worker.ffmpeg)
to_wav16k(upload, wav, worker.ffmpeg, settings.normalize)
result = worker.transcribe(wav, num_speakers=speakers)
result["filename"] = job["filename"]
store.mark_done(job_id, result)
@@ -325,7 +326,7 @@ async def benchmark(file: UploadFile = File(...)) -> dict:
while chunk := await file.read(1 << 20):
out.write(chunk)
wav = Path(tmp) / "audio.wav"
to_wav16k(src, wav, pipeline.ffmpeg)
to_wav16k(src, wav, pipeline.ffmpeg, settings.normalize)
samples = read_wav(wav)
return run_benchmark(samples, models_dir=settings.models_dir,