
Полноценный дубляж стоит дорого. Очень и очень дорого. Особенно это заметно в аниме. Чтобы у каждого героя был свой голос, а реплики попадали в движение губ, нужен переводчик, который перепишет текст под длину каждой фразы, режиссер, студия и отдельный актер на каждую роль, который вытянет то, что озвучил сэйю (так называют актеров дубляжа аниме). Фанатским командам такое и не снилось. Почему? Как я и сказал, все упирается в деньги, поэтому фанатская озвучка обычно закадровая: один-три человека читают за всех героев поверх приглушенного японского оригинала, перевод уже сделали энтузиасты и выложили субтитры, а зритель, в итоге, слышит обе дорожки сразу.
Но сейчас же есть нейросети, и они продавали (и продолжают продавать) идею мира, в котором языковой барьер сломан. ElevenLabs продает дубляж как услугу, YouTube уже переводит голос в роликах части каналов автоматически, а открытые модели клонируют голос по нескольким секундам звука и запускаются на домашней видеокарте. Для фанатов это выглядит как мечта: взять голос актера дубляжа прямо из серии, заставить его говорить по-русски и уложить слова в губы. Трудностей у такой мечты четыре. Давайте по порядку.
Голос должен остаться голосом героя, игра должна остаться игрой, реплика должна попасть в губы персонажа, а русский должен звучать действительно «по-русски». Про последнее обычно говорят меньше всего, хотя именно на этом я застрял дольше, чем на всех остальных проблемах вместе взятых.
Проверял я на своем любимом JoJo's Bizarre Adventure, на новом сезоне, который сейчас только выходит. В отрывке одиннадцать реплик на троих (Джонни, Джайро и Бумбум). 12 дней я пытался сделать озвучку на своей GTX 1660 Super с 6 ГБ видеопамяти и 8 ГБ оперативки, три четверти которой обычно уже чем-то заняты.
Но каждая попытка заканчивалась по одному из двух сценариев. В первом Джонни звучал похоже, но с таким акцентом, будто учил русский по разговорнику в самолете до Токио. Во втором речь была чистой, зато голос принадлежал кому угодно, только не ему. Потом я провел вечер за компьютером друга с RTX 4080, а решение в итоге нашлось на моей же 1660, и вот что вышло в последней версии.
Дальше моя история повествует о том, как проходили 12 дней на одной машине, что поменял один вечер, в какой модели в итоге нашелся акцент и как решение все это время пролежало в соседней папке.
Перед тем как продолжить, одна ремарка — многие элементы в этой статье могут показаться избыточными для рядового пользователя или интересными только узкому кругу читателей. Но выбрасывать их я посчитал неправильным (ведь есть же люди, которым интересно поглубже окунуться в суть). Поэтому если вы один из них, то особо сложные моменты я обернул в спойлер с пометкой «техническое отступление». Все, не отвлекаю, приятного чтения.
Сначала про то, где клонирование уже работает. На своей 1660 я экспериментировал с роликами, озвученными ИИ (забавы ради), клоном своего голоса через OmniVoice, и образцом служили десять секунд моей же русской речи. Этот клон я после нескольких проб признал очень достойным. Вот живая запись и клон, который читает тот же текст и немного больше:
С JoJo я начал с той же OmniVoice. Схема казалась очевидной: каждую реплику клонировать с японской реплики того же героя в том же месте серии. У каждой фразы своя эмоция, значит, модель заберет оттуда и голос, и подачу.
Голос она копировала хорошо, но вместе с ним в русский текст переезжал и японский акцент, и короткий крик «Джайро!» выходил то «Джайло», то «Зайло», а еще добавьте странный роботизированный привкус, который, вероятно, перекочевал от хрипотцы сказанной фразы.
9 октября я перебрал почти все модели для генерации речи, что помещались в мои 6 ГБ. Higgs, CosyVoice и Chatterbox с японским образцом дали тот же акцент. Русская ESpeech на базе F5 говорила чисто, но расставляла паузы в странных местах и читала с интонацией школьника у доски. Seed-VC поверх нее перекрашивал голос в Джонни и возвращал акцент обратно. К вечеру в папке проекта лежало пятнадцать подпапок с вариантами.
По цифрам лучше всех выступил X-Voice. Whisper признавал его речь русской на 85–98%. Правда, слушать это было очень тяжело. Акцента было уж очень много, да и интонация отдавала робовойсом. В общем, никто из героев так бы не разговаривал. Тогда я в первый раз увидел, как метрика «русскости» уверенно хвалит то, что уши бракуют, и к этому мы еще вернемся.
Последним в тот день шел RVC. Я вытащил голоса из всей третьей серии, вручную разметил, кто где говорит (автоматическое сравнение голосов на аниме путало Джонни с Андре и Маунтейн Тимом), и набрал две с половиной минуты чистого Джонни (что маловато). Модель обучилась за 25 эпох, я прогнал через нее реплики X-Voice, и вот что вышло.
На следующий день я подобрался к цели ближе всего. OmniVoice звучала прилично, если образцом служил ее же русский дубль, а в тексте не было: «ч, ж, щ, ш, ц, л, ы» и длинных скоплений согласных (то есть всех тех мест, где акцент резал ухо сильнее всего). И на паре реплик Джонни это звучало прекрасно. Но попробуйте перевести «Что за судья Цеппели?!» без «ц» и «ч», и станет понятно, почему эта ветка дальше не пошла.
А 20 октября я полез внутрь модели. Внутри OmniVoice работает языковая модель Qwen, и я искал в ней нейроны японского акцента: прогнал одни и те же тексты с японским образцом Джонни и с русским, сравнил средние активации MLP и нашел около 1 900 нейронов из 86 000, которые заметно отличались. Я сдвигал эти нейроны в «русскую» сторону по-разному, и акцент оставался везде. Потом попробовал другой рычаг. В слоях 16–21 нашлись головки внимания, которые с каждого кадра новой речи прицельно смотрят в образец. Когда я заставил их смотреть на образец равномерно, японский выговор начал слабеть, а голос остался более-менее похожим. Из этого опыта следовало, что модель списывает акцент с образца кадр за кадром, и обычными настройками генерации это не выключить.
21 октября на своей машине (сильно сказано, понимаю) я попробовал еще одну схему: произнести текст своим собственным клоном через OmniVoice, наложить на него мелодию японской фразы через Praat и перекрасить тембр в Джонни. Все двенадцать вариантов звучали ужасно, так что даже не стал их прикладывать. Но в тот же день у меня появилась возможность провести вечер за RTX 4080 MSI Suprim друга.

ИИ‑роутер — доступ к 400+ моделям из одной панели
Подключите OpenAI‑совместимый шлюз по единому API‑ключу. Настраивайте сквозную аналитику, отслеживайте лимиты и квотируйте ресурсы.
У друга 16 ГБ видеопамяти, 48 ГБ оперативки и Ryzen 7 9800X3D. Этого хватает на Fish Audio Drama 3, свежую модель на 35 млрд параметров (в сборке W4A8 около 25 ГБ), которую моя машина даже не загрузила бы. Запускал я ее через ComfyUI, а весь остальной конвейер собрал на Python: нарезка, проверка распознавателем, перенос тембра, автоотбор и сведение.
Техническое отступление: почему 25 ГБ влезают в 16Drama 3 устроена как смесь экспертов (MoE). Внутри каждого слоя лежит много параллельных блоков-экспертов, а маршрутизатор на каждый шаг включает только несколько из них. Большая часть весов в любой момент простаивает, поэтому сборка, которую я брал, держит экспертов в оперативке, а в видеопамяти постоянно живет только общая часть модели.
Название сборки W4A8 значит, что веса хранятся в четырех битах, а вычисления идут в восьмибитных активациях. На моем ПК этот трюк не спас бы: восьми ГБ оперативки не хватит даже на экспертов.
Пробный запуск я сделал на мемной реплике Годжо Сатору из «Магической битвы». Фраза «そうか、そうだな、そうかもな。» по-русски — «Вот как. Да, пожалуй... Может, и так.» Первый дубль вышел с японским акцентом. Тогда я дописал в промпт ремарку Direction: fluent native Russian speech with no foreign accent, и два дубля из четырех распознаватель речи разобрал правильно. На первый запуск ушло около 55 секунд, и стало ясно, что работать с этой моделью на 4080 можно, да не просто можно… Досмотрите ролик до момента, где я прописал ремарку, думаю, что вам станет понятно мое воодушевление в тот момент. Конечно, над интонацией стоило посидеть подольше, но акцент у меня был на базовых функциях модели, и я этим остался очень доволен.
Сначала отрывок нужно было разобрать на части. Скрипт вырезал из серии первые 90 секунд видео, японскую дорожку и субтитры. Дорожку на голоса и фон делил BS-RoFormer, и сейчас это один из самых сильных разделителей для вокала. На 1660 у меня для этого был Demucs. Детектор речи уточнил границы каждой реплики внутри окна субтитров. Из голосовой дорожки вырезался японский оригинал каждой реплики, его расшифровывал Qwen3-ASR, потому что Drama 3 для клонирования нужен точный текст образца.
Перевод я переписал под длину слота с сохранением смысла и к каждой реплике добавил английскую ремарку подачи.
# | Кто | Слот, с | Русская реплика |
u01 | Джонни | 2,59 | Джайро...! Те слова Бумбума... |
u02 | Бумбум | 4,33 | Думаешь, за твоей жизнью охотимся только мы-ы-ы? |
u03 | Бумбум | 3,71 | Ведь за твою голову назначена награда! |
u04 | Джонни | 2,09 | Что это вообще значит? |
u05 | Джайро | 2,02 | Сказал же, не твое дело. |
u06 | Джонни | 1,48 | Нет уж, ты ответишь! |
u07 | Джонни | 3,66 | Я имею право знать! Я ведь чуть не погиб! |
u08 | Джонни | 1,57 | Что за «судья Цеппели»?! |
u09 | Джонни | 3,72 | И миссис Робинсон тоже... пришел за наградой за тебя? |
u10 | Джонни | 1,92 | Зачем ты участвуешь в гонке? |
u11 | Джонни | 0,58 | Отвечай! |
Первая гипотеза повторила мою ошибку с 1660: пусть Drama 3 клонирует голос прямо с японской реплики, тогда совпадут и тембр, и манера. Модель сделала по четыре дубля на реплику, и акцент в них стоял такой густой, что генерацию я остановил на середине. На криках и быстрых репликах выходило заметно хуже, чем на спокойной фразе Годжо Сатору. Ремарка про родной русский с этим уже не справлялась.
Техническое отступление: как клон списывает акцентКлонирование по нескольким секундам звука устроено как продолжение записи. Модель получает токены образца, его расшифровку и новый текст, и генерирует так, будто тот же человек в той же записи продолжает говорить дальше. Отсюда и требование точной расшифровки: модель должна понимать, какой звук в образце какой букве соответствует. Из того же устройства растет и акцент: «продолжить того же человека» значит продолжить и то, как он произносит звуки, а японец в образце произносит их по-японски.
В японском почти все слоги открытые, из согласной и гласной, согласные подряд встречаются только как удвоенная согласная или вместе с н. Звук между русскими р и л там один, твердого л отдельно нет вообще, ы тоже нет, а ш, ж и ч звучат мягче русских, щ нет совсем. Когда модель встречает в русском тексте «вздрогнул», ей нечего подсмотреть в образце для такого скопления согласных, и она берет ближайшее японское: вставляет призвуки гласных и смягчает. Тогда мне показалось кристально ясным то, почему на 1660 помог текст без ч, ж, щ, ш, ц, л, ы и длинных скоплений, ведь я выкинул именно те места, где японская фонетика расходится с русской сильнее всего.
Раз голос и акцент приходят из образца вместе, их нужно получать из разных мест. Drama 3 генерирует речь вообще без образца, как носитель языка, а подачу берет из ремарки. Потом Seed-VC перекрашивает получившийся голос в тембр японского оригинала той же реплики. В первой половине конвейера образца нет совсем, и японской фонетике там просто неоткуда взяться.
Ремарки писались под сцену: Бумбум с его «мы-ы-ы» получил a young man taunting menacingly, mocking, dragging out the last word, Джайро с отказом отвечать стал a grown man, cold, curt and dismissive, а у Джонни почти везде есть слово shouting.
Каждый дубль прогонялся через распознаватель, который сравнивал услышанное с задуманным. Без этой проверки в монтаж попали бы шедевры вроде «Стрелец, огромен, крут, крут, и дисплей» на месте джайровского «Сказал же, не твое дело». Короткое «Отвечай!» у разных сидов превращалось в «Матвей Чай» и «Диншай» (мое ухо слышит другое, но если прислушаться, то распознаватель не так и далек от истины). В итоге, из первых трех сидов в брак ушла заметная часть, поэтому сидов потом стало восемь.
Техническое отступление: что делает Seed-VCSeed-VC v1 разбирает исходную речь на две части. Что сказано, он берет из исходника через энкодер Whisper: тот обучен распознавать речь, и его внутренние признаки хорошо описывают звуки и почти не зависят от голоса. Чей это голос, дорисовывает диффузионный трансформер, которому японский клип подан как пример прямо в контексте, плюс вектор голоса от CAM++. Готовую спектрограмму в звук превращает вокодер BigVGAN. Вариант на 44,1 кГц дополнительно получает кривую высоты тона исходника, поэтому лучше держит интонацию криков.
Первый тест переноса тембра я сделал на реплике Бумбума u02, и за весь вечер это оказался лучший кусок. Позже я понял, чем этот тест отличался от всего, что было после. Seed-VC конвертировал его без растяжки (length_adjust = 1.0), а японский образец у этой реплики самый длинный в отрывке.
Для первой версии я взял Seed-VC и растягивал каждую реплику под ее слот, разрешив отклонение до 25%.
Слушать v1 было уже можно, но три момента резали ухо. Растяжка портила звук. Вариант модели на 22 кГц звучал глуховато, как из соседней комнаты. А «Отвечай!» длилось целую секунду при слоте в 0,58, и Джонни продолжал кричать, когда рот у него уже закрылся.
Дальше я хотел, чтобы лучший дубль выбирался вообще без моего участия. Каждая реплика получила восемь сидов, всего 88 исходников. В работу шли только дубли, где распознанный текст совпадал с задуманным хотя бы на 0,85, и из них три, чья естественная длина ближе всего к слоту. Автоотбор — чуть более скучная на мой взгляд вещь, чем все что было выше, но если интересно то, как это технически реализовано, добро пожаловать под спойлер.
Техническое отступление: чем мерялиСлова проверял Qwen3-ASR, а сравнивал услышанное с задуманным обычный difflib.SequenceMatcher из стандартной библиотеки Python по словам в нижнем регистре. Перед сравнением из текста выкидывались знаки и одиночное «ы», иначе «мы-ы-ы» Бумбума ломало бы совпадение на ровном месте.
Сходство голоса считал CAM++, модель верификации диктора, та же, что Seed-VC использует внутри. Она превращает запись в вектор из 192 чисел, и чем ближе косинус между векторами дубля и японского оригинала к единице, тем больше голоса похожи. Обучена эта модель на китайской речи, так что в моем случае она сравнивала русскую речь с японской, имея опыт только с третьим языком... Для отсева брака этого, конечно, хватает, а вот для тонких различий уже вряд ли.
Естественность оценивал UTMOS, предсказатель средней оценки слушателей по шкале от 1 до 5. Его учили на оценках, которые люди ставили синтезированной речи (в основном спокойной и начитанной). А аниме-крик для него выглядит как сломанный звук, поэтому даже хорошие дубли часто получали 1,3–1,7, и порог пришлось ставить на 1,15, то есть чуть выше откровенной каши.
Длину звучащей части считал простой порог: звук режется на окна по десять миллисекунд, и звучащими считаются окна громче, чем максимум минус 35 дБ. Все, что между первым и последним таким окном, и есть длина реплики, которую сравнивают со слотом. Штраф идет по логарифму отношения, чтобы реплики вдвое длиннее и вдвое короче слота наказывались одинаково.
По итогу фильтр прошли 46 конверсий из 66.
По ходу нашлись две ошибки в самой проверке. В режиме автоопределения языка распознаватель записывал короткие русские фразы латиницей, будто это чешский, и реплика u01 отбраковывалась целиком, пока я не зафиксировал русский язык принудительно. Вторая ошибка была в пороге. При мягком пороге совпадения текста проходили сломанные фразы, и порог пришлось поднять до 0,9.
В итоге автоматика выбрала такие дубли.
# | Дубль | Тембр (CAM++) | Длина / слот, с |
u01 | s2, 44k | 0,67 | 2,41 / 2,59 |
u02 | s5, 22k | 0,76 | 4,46 / 4,33 |
u03 | s2, 22k | 0,79 | 3,72 / 3,71 |
u04 | s5, 44k | 0,67 | 2,33 / 2,09 |
u05 | s3, 22k | 0,75 | 2,00 / 2,02 |
u06 | s1, 22k | 0,78 | 1,46 / 1,48 |
u07 | s1, 22k | 0,77 | 3,70 / 3,66 |
u08 | s5, 22k | 0,67 | 1,55 / 1,57 |
u09 | s3, 22k | 0,86 | 3,64 / 3,72 |
u10 | s1, 44k | 0,78 | 1,92 / 1,92 |
u11 | s6, 44k | 0,59 | 0,51 / 0,58 |
С таймингом вопрос закрылся полностью: большинство реплик попадает в слот с точностью до нескольких сотых секунды, без пластилиновой растяжки, и с разборчивостью тоже все в порядке.
Перед этим я откалибровал метрики на том самом тесте u02, который понравился больше всего. У него CAM++ 0,71 и UTMOS 1,30, у дубля, который автоматика выбрала для v2, CAM++ 0,76. По цифрам v2 лучше. Брак метрики отсеивают более-менее, а вот лучший на слух вариант находить не умеют.
Раз акцент остался единственной проблемой, его захотелось превратить в число. Whisper при распознавании выдает вероятность каждого языка, и я решил считать долю русского мерой акцента. Логика простая: чем сильнее японский выговор, тем меньше Whisper уверен в русском.
Что мерили | P(ru) | Комментарий |
Японские оригиналы | около 0 | P(ja) от 0,93 до 1,00 |
Исходники Drama 3 | 0,94–1,00 | кроме u01 (0,21, имена собственные) и u11 (0,49, полсекунды звука) |
После Seed-VC | местами падает | u09 с 0,99 до 0,45, u10 с 0,99 до 0,16 (Whisper слышит польский), u11 0,03 |
Понравившийся тест u02 | 0,70 | у той же реплики в v2 0,96 |
Последняя строка ломает всю идею. Кусок, который мне нравится больше всех, по этой мере звучит самым «нерусским», а версия, где я слышу акцент, получает почти единицу. Тот же прибор во второй раз уверенно показал противоположное тому, что слышат уши, ровно так же, как было с X-Voice на 1660, поэтому для целевой метрики он не годится.
Техническое отступление: почему Whisper прощает акцентЯзык Whisper определяет первым же шагом декодера: перед текстом он предсказывает специальный токен языка, один из 99, и вероятность этого токена я и брал за меру. Учили Whisper на 680 000 часов звука из интернета с готовыми расшифровками, и язык записи там определялся по языку текста. Русская речь с японским, армянским или английским акцентом в таких данных подписана как русская, и модель старательно училась узнавать русский именно сквозь акцент. Вопрос «насколько это похоже на носителя» ей никто не задавал, и с вопросом «какой это язык» она справляется как раз благодаря тому, что акцент игнорирует. Падения до польского и литовского на коротких репликах говорят скорее о каше в звуке, чем об акценте.
Зато таблица показывает, где искать. Исходники Drama 3 Whisper признает русскими почти без исключений, и на слух они чистые, а провалы начинаются после конверсии.
Улики сходились в одну точку: Drama 3 без образца говорит чисто, а после Seed-VC появляется акцент. Тогда я попробовал Seed-VC в режиме, где он переносит только тембр, на реплике u07, и результат вышел хуже по обоим пунктам: акцента стало еще больше, а тембр Джонни не сохранился.
Последним проверялся OpenVoice, который из образца берет только эмбеддинг голоса, сам клип в генерации не участвует, и фонетике там перетечь некуда.
Сходство тембра CAM++ | UTMOS | |
Seed-VC v1 | 0,58–0,84 | 1,3–2,9 |
OpenVoice v2 | 0,29–0,50 | 1,5–3,4 |
OpenVoice звучит естественнее, только голос почти не похож на персонажа. Получилась та же развилка, что на 1660: модель либо смотрит в образец и забирает из него и тембр, и акцент, либо в образец не смотрит и не дает ни того, ни другого.
Механизм у Seed-VC тот же, что у OmniVoice и у Drama 3 с образцом. Японский клип подается как пример прямо в контекст, и вместе с тембром модель протаскивает в русскую речь японскую фонетику. На 1660 я видел это изнутри, через головки внимания, которые прицельно смотрят на образец. На 4080 то же самое проявилось снаружи, через сравнение моделей. Ремарка «без акцента» помогает частично и только там, где ее вообще читают, а Seed-VC ремарок не читает.
Ограничения тут серьезные. Реплик всего одиннадцать, слушатель один, и это я. Whisper в измерителе был small. CAM++ сравнивает русскую речь с японской, имея опыт с китайской. Акцент я оценивал только на слух, потому что прибора, который бы его ловил, у меня так и не появилось. Образцы короче секунды дают кашу и плохой тембр.
Целиком отрывок в версии с 4080 выглядит так, вместе со вступлением и опенингом, которые я оставил японскими.
После вечера на 4080 я вернулся к своей 1660 и полез в старые папки проекта, чтобы понять, какие из прошлых опытов можно пересобрать по этому принципу. В папке от 10 октября лежал тот самый Джонни, который прекрасно звучал на тексте без ч, ж, щ, ш, ц и л. Тогда я записал успех на счет букв и бросил ветку. Теперь я смотрел на ту же папку другими глазами: образцом там служила русская реплика Джонни, которую OmniVoice сама сделала из японской.
25 октября я проверил это напрямую. Образец тот же, модель та же, зато текст обычный, со всеми ч, ц и л, включая «Что за судья Цеппели?!». Акцент так и не появился, и я впервые за две недели подумал: «это идеально». Работал русский образец, буквы тут были ни при чем. Решение пролежало в соседней папке две недели, пока я искал нейроны акцента и гонял Drama 3 на чужой видеокарте, и именно этот дубль вы видели в самом начале статьи.
Техническое отступление: ксерокопия без акцентаМодель продолжает образец, поэтому копирует из него все, что там есть. Если образец японский, в продолжение переезжают открытые слоги и мягкое л. Если образец уже русский, пусть и сказанный тем же голосом, японской фонетике взяться неоткуда, и модель продолжает русскую. Получается ксерокопия в два шага.
Первое поколение, русская реплика с японского образца, несет тембр героя и акцент, а второе поколение, клон уже с этой русской реплики, забирает в основном тембр, и японских звуков остается меньше. Строго говоря, это пока гипотеза: отсутствие акцента (или его очень небольшое присутствие) я слышу ушами, а прибора, который бы это подтвердил, у меня так и не появилось.
Отсюда схема для каждого героя. Японский голос нужен ровно один раз, чтобы получить первую русскую реплику героя, а дальше герой клонируется сам с себя по-русски. Для Джонни такой репликой стал дубль от 10 октября. Для Джайро нашлась удачная реплика из опытов с русской ESpeech 9 октября. Бумбуму достался кусок, который я хвалил больше всего за весь вечер на 4080: тест u02, где Drama 3 говорила без образца, а Seed-VC переносил тембр без растяжки.
Конвейер на 1660 я собрал заново. На каждую реплику OmniVoice делает шесть дублей, скорость подбирается под слот, только замедлять реплику не стал, растянутая речь звучит вяло, и пусть уж Джонни договорит чуть раньше, зато бодро. В конце каждого куска модель произносит служебное «Вот.», которое потом отрезается по паузе, иначе последнее слово реплики обрывается на полуслоге (хоть обрыв я и починил через костыли, но почему обрывается, я так и не понял. Жду пояснительную бригаду в комментариях).
Дальше идет автопроверка: Whisper medium сверяет слова, отдельный счетчик ловит растянутые слова, длина сравнивается со слотом с допуском 12%, а паузы с японским оригиналом. Все, что ее прошло, попадает на маленькую страничку, где японский оригинал стоит рядом с дублями, а под каждым дублем три кнопки: «конфетка», «так себе» и «брак». Одиннадцать реплик по шесть дублей я прослушал минут за десять.
Десять минут на 90 секунд слушать нормально, а на серию из 408 реплик ушей уже не хватит. Поэтому все мои клики на страничке (которая была сделана для автоотбора) сразу писались в файл, и по ним я попробовал найти, чем конфетка отличается от остального. Всего я оценил 68 дублей: 14 конфеток, 18 «так себе» и 36 брака. Для каждого дубля я посчитал все, что умел: похожесть голоса по CAM++, естественность по UTMOS, точность слов, попадание в слот, темп в буквах в секунду и живость по размаху высоты и громкости. Добавились и две вещи, которых раньше не было: насколько мелодия дубля повторяет мелодию японской реплики и насколько совпадает рисунок громкости.
Мелодию я снимал как кривую высоты тона в полутонах, выравнивал дубль и оригинал по времени через DTW, который растягивает одну кривую вдоль другой так, чтобы похожие места встали друг напротив друга, и считал корреляцию. Сравнивал я дубли только внутри одной реплики, парами «конфетка против остальных», и если признак ничего не различает, то конфетка выигрывает у него в половине пар.
Совпадение мелодии с оригиналом выиграло в 70% пар, совпадение громкости — в 66%, темп — в 59%. Точность слов дала ровно 50%, UTMOS — 47%, а CAM++ — всего 33%, то есть у дублей, которые мне нравятся, голос по этой метрике чаще похож на образец меньше.
Из трех лучших признаков сложилась простая формула: сумма z-оценок мелодии, громкости и темпа внутри реплики. На первых 56 оценках лучший по формуле дубль совпал с моей конфеткой в шести репликах из девяти, тогда как случайный выбор угадал бы примерно в двух с половиной. Чтобы не обмануть себя подгонкой, я сгенерировал новые дубли для реплик u02–u04, которые в подборе формулы не участвовали, сначала оценил их на слух и только потом сравнил. Формула оказалась права в десяти парах из одиннадцати, а брак во всех трех репликах ушел в конец списка.
Смысл у формулы довольно прост, если не вдаваться в цифры. Хороший дубль повторяет рисунок игры японского актера, где голос поднимается, где бьет и где затихает, и при этом звучит бодро. Брак в среднем медленнее, 9,6 буквы в секунду против 10,9, и мелодией похож на оригинал меньше, 0,68 против 0,78. Все, что я мерил раньше ( слова, слот и похожесть голоса), хорошо отсеивает кашу и почти ничего не говорит о вкусе.
Первая стена называется Бумбум. Джонни в итоге звучит идеально (на мой субъективный и очень замыленный слух), а вот Бумбум вышел на твердую троечку. К тому же первую русскую реплику для него дала Drama 3 на 4080, так что целиком на 1660 цепочка пока не замыкается. Замену я искал на своей машине. Qwen3-TTS VoiceDesign собирает голос по текстовому описанию и говорит по-русски чисто, Whisper разобрал у нее 23 реплики из 24 без единой ошибки. После Seed-VC в тембр героя Бумбум вышел у меня без акцента, а Джонни снова с акцентом, так что пока непонятно, сколько дублей и их ксерокопий нужно делать.
Вторая стена в самом Seed-VC. Я проверил, зависит ли перенос акцента от длины образца. Бумбум с образцом в полторы секунды акцент не получил, а Джонни с образцом в 13 секунд, склеенным из четырех реплик, свой акцент сохранил. На этом месте я запутался окончательно...
Третья стена в тексте перевода. Протяжные гласные вроде бумбумовского «мы-ы-ы» модели тянут до конца лимита, пока звук не превратится в писк, так что переводчику под нейросеть придется обходиться без них. Ударения автоматически не проверяются вовсе. Higgs, который с образцом говорил по-русски, без образца не говорит совсем и выдает вместо речи гул, который Whisper подписывает как «СПОКОЙНАЯ МУЗЫКА».
Железо тоже напоминало о себе. Перед каждым запуском Qwen или OmniVoice приходилось закрывать OneDrive, Steam и лишние окна, иначе Windows жаловалась, что файл подкачки слишком мал. Whisper large-v3 с разметкой слов вылезал из шести ГБ видеопамяти в общую и тратил по 36 секунд на дубль, поэтому проверку делает medium. Две модели на видеокарте одновременно не уживаются, так что каждый следующий шаг ждет, пока досчитается предыдущий.
Главная стена осталась прежней: прибора для акцента у меня нет. Whisper трижды уверенно хвалил то, что уши браковали, CAM++ и UTMOS отсеивают брак и не находят лучший дубль, а формула вкуса ловит игру и молчит про акцент. Последнее слово пока за моим ухом (а говорили, что ИИ всех заменит).
Теперь про революцию. В серии 408 реплик, в моем отрывке — 11, то есть серия больше отрывка в 37 раз. На 1660 отрывок в 90 секунд занимает около 25 минут работы машины и десять минут моих ушей, так что целая серия по шесть дублей на реплику укладывается в одну ночь генерации, а формула вкуса сократит прослушивание до спорных мест. Конвейер от субтитров до видео уже работает без человека: переводит под длину слота, генерирует, отсеивает брак, укладывает реплики в губы и сводит с фоном.
И все-таки… Революция, на мой взгляд, немного откладывается. Главный вопрос у этой задачи уже не в клонировании голоса, а в клонировании без акцента.
Ну и результат меня хоть и впечатлил, но до автоматизма его довести я так и не сумел (вернее, сумел, но не до того качества, которого мне хотелось бы добиться). Конечно, эксперимент с Drama 3 можно было продолжить: модель мне показалась очень перспективной, и, возможно, на ней тоже можно было бы избавиться от акцента.
Так что если у вас есть опыт работы с такими моделями, то милости прошу в комментарии, с радостью послушаю, как вы избавлялись от акцента (если у вас стояла такая задача) или вы концептуально знаете, как это решать.