Claude code, курс на русском
На просторах интернета есть курс по Claude Code. Он полностью на английском языке. У него английская озвучка и английские субтитры. Я немного знаю английский язык, но мне сложновато воспринимать техническую информацию на английском языке.
Я пытался найти, как меня перевести, и мой друг подсказал мне, что можно перевести видео с помощью ElevenLabs. Я купил тариф за 5 долларов и решил попробовать перевести их. Я перевел только три видео, а потом тарифы закончились. Всего там 15 видео, и даже тарифа за 20 долларов и 30 долларов не хватит для того, чтобы перевести все видео.
Я решил сделать копию сайта, положить те 3 видео и искать другой способ перевести остальные.
Создание сайта
Я отдал ссылку Клоду на копирование сайта и оказалось, что Клод не может прочитать этот сайт. Я решил сделать это через Figma. Я скопировал ссылку на сайт и вставил в плагин HTML to Figma, который может сделать макет из ссылки.
На выходе получился макет сайта.

Claude code не смог прочитать мою ссылку на макет, не знаю почему. Я скопировал ему стили этот макета и попросил сделать сайт.

Он разработал точную копию сайта с несколькими косяками.

Видео и картинки не подтянулись, их пришлось добавлять рукам.
Доработал некоторые фичи
Добавил прогресс-бар. Если видео просмотрено > 50%, отмечаем, что пользователь прошел урок. А с текстовыми — если дочитал до конца.
Добавил поиск по контенту урока. Если человек что-то забыл и ему надо найти.

Перевел картинки на русский язык.

Следующая задача — перевести оставшиеся видео.
Перевод видео с помощью Яндекс Браузера и плагина VOT
Есть перевод от Яндекс Браузера. Яндекс Браузер внедрил его несколько лет назад, и около года назад я нашел такой же плагин-переводчик для Google Chrome, который выполняет тот же функционал, что и Яндекс Браузер.
Видео на YouTube и других видео платформах можно было перевести одной кнопкой: просто нажать «перевод», и видео автоматически переводилось.

Однако это не работало на сайте, где были видео Cloud Code, потому что там должна быть специальная обертка и специальные классы.
Код этого плагина довольно сложный, и я не смог изменить его так, чтобы он работал с видео, которые лежат у меня на хостинге, или с видео, которые находятся на странице этого курса по Cloud Code.
Я начал общаться с СhatGPT, и он подсказал мне, что есть библиотека, которая использует этот плагин.

Плагин, по сути, с помощью этой библиотеки обращается к серверам Яндекс Браузера и получает субтитры, озвучивая видео. То есть, отправив ссылку на видео в этой библиотеке, можно было получить аудиодорожку сразу с переводом.
В моей голове сразу появилась идея: почему бы нам не скачать видео, не скачать аудиодорожку и не склеить их вместе, по сути получая сразу готовое видео с переводом.
Так я и сделал
Плагин скачивал видео, аудио и склеивал их. Видео одного из уроков.
Но есть проблема. В видео термины расползаются неправильно.
В видео он говорит не Клод код, а облачный код. Не playwright, а драматург.
изменить качество перевода я никак не мог. Я решил найти другую библиотеку для того, чтобы переводить и синтезировать речь. Я воспользовался библиотеками Google Переводчика и Edge TTS для синтеза речи.
Чтобы он произносил слова правильно, я решил добавить словарь, где я показываю, как правильно и неправильно произносить.

После этого перевод стал лучше.
Но снова появилась проблема: я мог понять, что что-то не так с переводом, только тогда, когда видео уже сгенерировано.
Это довольно неприятно, потому что некоторые вещи он может произносить неправильно.
Если видео длится пять минут, то, чтобы точно посмотреть все слова, нам нужно после первого просмотра его прослушать и выписать все слова.
Я решил сделать немножко иначе: я решил создать версию, где можно загружать видео с компьютера и по ходу редактировать текст, который будет произноситься.

В итоге я с первого раза могу отредактировать некоторые сложные слова, чтобы он произносил их правильно.
Синхронизация
Я делал этот перевод в первую очередь для себя и потому что было интересно разобраться, а можно ли так делать.
Я пошел сам смотреть курс и заметил проблему: синхронизация. На видео он показывает одно, а текст запаздывает. Он объясняет предыдущие фразы. Плюс корявый перевод раздражает.
Что делать?
Надо разобраться с синхронизацией. Определять, когда какие фразы начинаются и пытаться уместиться в это время. Чтобы это было сделано хорошо, нужно подключать нейронку.
Взял ключ API от Claude и попросил его написать новую версию.
Теперь при переводе он после транскрибации видео из английского языка начинает переводить его с помощью API Claude Code

Теперь редактирование работает по таймингам, четким отрезкам времени

После этого речь синтезируется

На перевод одного видео ушло треть доллара, около 27 рублей.

Проблема осталась, причины:
- Русский текст обычно длиннее английского — на 15−30%
- edge-tts не контролирует скорость — он генерирует аудио естественной длины
- Текущий код просто ставит аудио по таймингу начала, не проверяя, успеет ли оно закончиться
После каждого синтеза фразы мы проверяем длительность. После проверяем, попадает ли он в тайминг. Если не попадает, вылезает за тайминг, то мы его ускоряем.
На бумаге было классно, в реальности звучит плохо.
Добавил в ассистета OpenAI фразу «Попробуй переводить так, чтобы это влезало примерно с одной скоростью в тайминги. Чтобы не был слишком быстро.».
Пробую перевести через OpenAI.
Теперь появляются паузы, который ломают нормальный ход повествования. Попросил нейронку ответь, можно ли это починить в принципе.
Он предложил сделать новый алгоритм сборки аудио. Пробуем
Тоже самое. К сожалению, я пока не понимаю, как это исправить. Появилась идея снова вернуться к версии от VOT с корявым переводом, но нормальными таймингами.
Сейчас тайминги определяет Whisper. Там нет ИИ, который может осмыслить весь текст и понять, как лучше его сконструировать.
Я решил включить туда нейронку, чтобы она анализировала текст и выставляла тайминги. Потому что по сути в видео на 5 минут около 5−7 ключевых точек, когда тайминги правда важны.
Была проблема с определением предлогов, но через пару итераций это удалось исправить. Итоговый вариант. Его и оставил во всех видео.
Проблема с произношением
Когда он переводит текст, проблем нет. Например, слово Github. Он его пишет на английском, и здесь все классно.
Но когда он его озвучивает, он пропускает «u» в последнем слоге. В итоге как бы съедает буквы. Говорит не «Гитхаб», а «Гитхб». Это решет слух

Пробуем делать транслитерацию. Чтобы он переделал слова из английского языка в русский. «Claude Code → Клауд Код».
Сначала попробуем простую транслитерацию через библиотеку.

Сработало это почти так, как надо. «Claude Code → Клод Коде» — немного не так, как я хотел. Возможно будет произносить не как «Код», а именно «КодЕ».
Попробуем прогнать через нейронку.

А вот с нейронкой это стало лучше. Давайте сделаем видео и сравним, как он их произносит.
Сравниваем видео с транслитерацией
Без транлитерации
С простой транслитерацией
С транслитерацией от нейронки
Учитывая то, что простая транслитерация практически не отличается от нейроночной, мы выбираем её.
Чем отличается простая от нейронки?
Простая транслитерация, это транслитерация с помощью библиотеки, куска кода. Когда есть база английских и русских букв и шаблоны их написания. Это для нас бесплатно.
А нейронка учитывает особенности произношения слов. Она думает на переводом, а не просто заменяет символы. Это для нас стоит денег. Потому что мы должны весь текст видео отправить в нейронку, она должна подумать, потратить токены и после отдать готовый текст. Запрос и отдача — платные.
Как в итоге сейчас работает перевод?
- Whisper: Распознаёт английскую речь в видео и переводит в текст.
- Перевод: Claude API / OpenAI Assistant / Google Translate.
- Глоссарий: Исправляет технические термины. Мы в словаре вписываем, что на что поменять.
- Редактирование: Можно отредактировать текст до его озвучки.
- edge-tts: Синтезирует речь нейросетевым голосом, делает это прекрасно.
- ffmpeg: Объединяет видео с новой аудиодорожкой.
Из платных: перевод, тайминги и транслитерация с помощью нейронки. Без них будет слегка хуже. С ними лучше, но надо будет заплатить. Видео на 5 минут —~20₽.