# Контроль качества версии Fish Audio

Проверено 17.09.2026. Это проверка созданного файла и снимка кода, не проверка работающего сервиса и не оценка голоса человеком на слух.

## Исходники и синтез

- Основа сюжета и анимации — существующий 19-сценный ролик по снимку `772de4a714ae6c5abea91946e85a1953ee919ec3`; текущий HEAD рабочего репозитория при сборке — `f0a6eac965c7d6be8a353265775b676248855905`. Исходники webrtc-komaroff и runtime не менялись.
- Из `локальный источник извлечён фрагмент 8,55–27,95 с: 19,40 с, mono PCM 44,1 кГц, SHA-256 `9415f693598c54d004b6ac20d7a750527a8f5321281f74a843cadc86917a63c0`. Метод и текст — в [reference-transcript.md](</experiments/voice-ai/archive/c/videos/webrtc-explainer-2026-09-17/voice-variants/fish-pupkin/reference-transcript.md>). Пользователь подтвердил наличие разрешения на использование записи и голоса.
- Fish Audio Python SDK `1.3.0`, модель `s2.1-pro-free`, разовый `ReferenceAudio` с образцом и транскрипцией, скорость `1.14`, формат MP3. Получены 50 непустых MP3 для 50 фраз. Сохраняемая модель голоса не создавалась. Ключ вводился скрыто; проверка файлов варианта по префиксу ключа не обнаружила его в каталоге.
- PCM master: 48 кГц mono, 6747 кадров × 1600 отсчётов, 224,900 с. Все 19 сцен следуют без пробелов/перекрытия. SRT содержит 50 блоков; максимальная высота по измерению шрифта — две строки. TypeScript `tsc --noEmit` прошёл.
- Быстрая ASR-сверка локальным faster-whisper `small`/CPU/int8: 50 отдельных MP3 проверены на соответствие своим фразам; 48 дали word-match ratio ≥0,70. Два низких значения относятся к фонетическим записям WebRTC и HTTP, которые ASR вывел как аббревиатуры/иные слоги. Для полной дорожки word-match ratio 0,875 (389 слов сценария против 381 распознанного). Эти показатели не доказывают точного произношения: ASR ошибается и при проверке длинной дорожки пропускал короткие фразы. Человеческое прослушивание не проводилось.

## Видео и звук

- Просмотрены ранний, средний и поздний контрольные кадры каждой из 19 сцен. Отдельно проверены в полном разрешении сцены 01, 09, 14, 19 и кадры уже закодированного MP4 в начале, середине и конце: содержание, субтитры и постоянная пометка о синтетической озвучке видны и не обрезаны. Контрольные листы — `output/contact-1.jpg`…`contact-4.jpg`; извлечённые кадры — `output/qc/encoded-*.png`.
- Пилот `output/pilot-with-audio.mp4`: H.264/AAC, 1920×1080, 30 fps, ровно 30,000 с.
- Финальный `output/webrtc-komaroff-explainer-fish-pupkin.mp4`: H.264 1920×1080, 30 fps, 6747 кадров, AAC mono 48 кГц, длительность обоих потоков 224,900 с. Размер около 29 MiB; SHA-256 `2850b38842d05188e3389a04b98d6b8322cd2cc28e36335900647e8ddd39782d`. `ffmpeg -v error -i ... -f null -` декодировал файл целиком без ошибок. Машинный результат — `output/qc-result.json`.
- После нормализации FFmpeg `volumedetect` показал средний уровень −16,7 dB и максимум −1,4 dB. На пороге −40 dB обнаружены паузы около секунды на границах реплик; самая длинная — 1,054 с. Резких обрывов по длительности потоков не обнаружено. Субъективная громкость, тембр, похожесть и интонация на слух не оценивались.

## Воспроизведение и ограничения

Команды приведены в [README.md](</experiments/voice-ai/archive/c/videos/webrtc-explainer-2026-09-17/voice-variants/fish-pupkin/README.md>). При сборке использованы Node `v22.14.0`, Remotion `4.0.507`, ffmpeg `6.1.1`, Fish SDK `1.3.0`; `NODE_OPTIONS` снят только для дочерних команд Node. Облачный синтез не воспроизводится без работающего Fish API и ключа; сохранённые MP3 позволяют пересобрать мастер, субтитры и видео без повторной передачи образца. Никакая проверка здесь не доказывает, что анимированные схемы отражают текущий deployment.
