Голосовые системы

Fish Audio: два 20-секундных демо webrtc-komaroff

Один текст и первые две анимированные сцены исходной презентации с короткой финальной заставкой, два разных русскоязычных голоса. Это тест облачной озвучки, а не новая полная версия ролика. Темп обновлён по замечанию пользователя о медленном звучании; первоначальные версии сохранены в original-tempo/.

Голос Готовый MP4 SRT Длительность
Женский — «Спокойный женский голос» female-20s.mp4 subtitles-female.srt 20,000 с
Мужской — «Мужской Профессиональный213» male-20s.mp4 subtitles-male.srt 20,000 с

Точный текст, идентификаторы голосов и параметры — в script.json. Предметная анимация переиспользует две начальные сцены полного объясняющего ролика; надпись «ПО КОДУ» относится к снимку 772de4a от 16.09.2026, а не к проверке работающего кластера. Тексты демо немного сокращены относительно полной версии, чтобы дать двум голосам одну и ту же понятную 20-секундную историю.

Как получена озвучка

  • Официальный POST https://api.fish.audio/v1/tts, заголовок model: s2.1-pro-free, тело JSON с reference_id и format: mp3. Восемь запросов (четыре фразы × два голоса) вернули 200 audio/mpeg; CAPTCHA не потребовалась. Документация TTS, цена модели.
  • Ключ при вызове API читается только из FISH_API_KEY в окружении процесса. По запросу пользователя он сохранён в локальной системной связке ключей GNOME Keyring с атрибутами scope=monitorsoft, service=fish-audio; это не Git и не файл ролика. Исходный текст фраз был передан Fish Audio; по описанию бесплатной модели запросы могут сохраняться для улучшения модели. Не передавайте этим способом закрытые сценарии без отдельного решения.
  • Исходные MP3 — в raw/. build_demo.py декодирует их в PCM 48 кГц, измеряет реальную длительность каждой фразы, добавляет паузы и формирует WAV ровно из 600 кадров × 1600 отсчётов, отдельный таймлайн и SRT для каждого голоса. Коррекция темпа FFmpeg atempo сохраняет высоту голоса: теперь 1,14× для женского и 1,04× для мужского, вместо 1,06× и 0,92×. Последние фразы заканчиваются на кадрах 552 и 529 соответственно; после них показана финальная заставка.
  • Видеоряд — Remotion 4.0.507, 1920×1080, 30 кадров/с. Звук в MP4 — AAC 48 кГц, моно, с нормализацией до целевых −16 LUFS. Исходные WAV сохранены отдельно.

Воспроизведение сборки

Из корня videos/webrtc-explainer-2026-09-17 после установки зависимостей задайте FISH_API_KEY в окружении локального процесса, не записывая его в исходники или командную строку. На этом компьютере ключ можно подать из системной связки ключей без вывода значения:

FISH_API_KEY="[скрыто]" python3 voice-variants/fish-audio-20s/synthesize.py

Остальные шаги:

python3 voice-variants/fish-audio-20s/build_demo.py
env -u NODE_OPTIONS pnpm exec tsc --noEmit
env -u NODE_OPTIONS node voice-variants/fish-audio-20s/render_demo.mjs
python3 voice-variants/fish-audio-20s/mux_demo.py

synthesize.py всегда делает новые API-запросы. Если нужны только повторный рендер или сборка из сохранённых MP3, начните с build_demo.py; ключ тогда не нужен. Промежуточный первый пробный MP3 с более длинной фразой сохранён в raw/probe/, но в ролик не входит.

Проверка 17.09.2026

  • pnpm exec tsc --noEmit — без ошибок.
  • ffprobe: оба MP4 — H.264 1920×1080/30 fps и AAC 48 кГц, ровно 20,000 с для видео, звука и контейнера.
  • ffmpeg -v error -i <файл> -f null - — полное декодирование обоих файлов без ошибок.
  • volumedetect: средний уровень −16,9 dB (женский), −16,5 dB (мужской); максимальный −1,1/−1,5 dB. После речи остаётся 1,7/2,6 с тишины с финальной заставкой; это не обрыв аудио.
  • Проверены кадры 120, 285, 480, 558 и 582 обеих версий, а также мужской кадр на 16-й секунде в полном разрешении: текст и схема не обрезаны. Контрольные листы находятся в qc-faster/.
  • Субтитры и смена сцен рассчитаны по длительности конкретной дорожки. Прослушивание человеком, оценка произношения и независимая ASR-сверка пока не проводились.

Ролики подготовлены для заявленного некоммерческого использования. Бесплатный API действует по fair-use и без SLA; дата доступности в публикации Fish Audio — до 30.11.2026, не бессрочно. Лицензию самого toolkit см. в основном README.

Исходник

Скачать Markdown · К материалам исследования