Pull to refresh

Comments 32

нельзя загрузить файлы напрямую в статью

Предполагается, что проект размещается где-то на GitHub, например.

Можно было действительно оформить в виде репозитория на github. Прибавить установочный или requerments файл, снабдить немного документацией там (хотя бы пример базового использования функций) и уже глядишь готовый полезный тул, чтобы упрощать людям жизнь!

А если еще в pypi залить, можно будет вообще


pip install package_name
pip -m package_name

Не хочу быть душным, просто это реально максимально упрощает установку и использование

Спасибо за совет, но у меня особо функций и нет, все выполняется сразу после запуска и не спрашивает пользователя.

Возможно, когда нечем будет занять руки я опубликую код и на гитхабе.

Ого! Как раз мне прилетела задача озвучивать видосы разными языками по сгенеренным ранее субтитрам.

Спасибо, мил человек!

Можно твой код взять основу и немного переделать? Лицензия у него какая?

Лицензия свободная, писал сам с нуля, взять можно.
Но если намечается что то серьезное советую изменить метод запросов с костыля в виде пробной версии с недолговечным токеном на запросы с использованием токена своего собственного приложения. Сам я это не сделал потому что гугл хотел от меня слишком много лишних (на мой взгляд) данных.

Дада, сегодня ночью буду гонять и ковырять. Я ничерта не знаю про Google TTS и никогда им не пользовался, хотел сегодня ночером начать погружаться в тематику.

Твой код прям супер в тему! Земной тебе поклон!

Слушай, маленький вопрос на счёт файла с ударениями.

А ты не видал где подобных же, но под разные другие языки, типа хинди, например?

А сохранение перевода книги средствами Google и python мы умеем делать? Я могу, безо всяких токенов, но статью оформлять пока лень, да и есть опасения, что прикроют лавочку, если все начнут злоупотреблять ею.

Что до озвучки текста, то есть голосовые движки, которые можно найти в Интернете. Есть программы озвучки, типа «Балаболка». Для изучения иностранных языков, в принципе, неплохо. Вот мои некоторые эксперименты:

https://youtu.be/MWCMmgTUlDs

https://youtu.be/F4mD-2vf0k4

Пока что у меня не возникало потребности в переводе книг, так что нет. И если у вас есть способ использовать именно google tts без токена - прошу описать хотя бы принцип, буду благодарен.

Насчет голосовых движков - я пробовал другие, но мне больше всего зашел именно вариант от гугла, так что про него и статья.

Речь шла об отсутствии токена для перевода текстов, хотя для больших объемов перевода он нужен. Выход был в автоматизации запросов, типа:https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=ru&dt=t&tbb=1&ie=UTF-8&oe=UTF-8&q=СТРОКА_ТЕКСТА_В_URL_КОДИРОВКЕ, с помощью Питон.
Размер одного (get) запроса не более 10-15 КБ (я брал 7-8 КБ). Время паузы между запросами должно быть более 10 секунд (у меня было – 11).

На Питоне был написан бот, который считывает запросы из файлов (их может быть сотни, сами файлы формируются другим скриптом из текста оригинала) и отправляет их на сайт, с помощью «import requests», с определенной задержкой («import time»). Результаты приходят в формате json, с которыми можно работать через пакет, загружаемый «import json». Далее мы формируем вывод переведенного текста, так, как нам удобно.

Переводит этот сервис Гугла очень неплохо, поэтому я понимаю ваш интерес именно к Гугловскому инструментарию, хотя лично я сторонник живого звука.

Вполне допускаю, что озвучку коротких текстов Гугл может делать и без токена, так, как он делает перевод. Если это так, то можно воспользоваться предложенной идеей – посылкой автоматизированных запросов, с достаточными задержками между ними и обработкой полученных результатов. По крайней мере, 5000 символов Гугл озвучивает бесплатно, в браузере. Остается найти только соответствующую ссылку на API-сервис, как для перевода текста.

Да, переводчиком гугл позволяет пользоваться без токена. Однако с tts ситуация иная, без токена он возвращает Bad Request. Как вы заметили, у гугла существует демо форма, но именно на основе того, что гугл позволяет озвучивать 5000 символов просто так, и функционирует мой код. Текст разбивается по 5000 символов и отправляется в ту демо-форму, откуда уже и получает результат, с последующим кодированием в звук.

Сама же ссылка на api выглядит так texttospeech.googleapis.com/v1test1/text:synthesize, и к ней обязательно поле токена, если оно будет например пустое выдаст Unauthorized. Совсем без него Bad Request. Как с переводчиком здесь никак не получается.

Ну, в принципе, вы свою проблему решили, как и я свою. Но, что мне нравиться в переводе Гугла, то, что можно переводить художественные книги, например, французских авторов. Иногда существующий литературный перевод, например, для «Красной лилии», Анатоля Франса местами выглядит хуже, чем перевод от Гугла. Для изучения языка это самое то. А живой озвучки более, чем достаточно на Ютубе.

А годится ли это решение для озвучки ходожественных книг? Можно ли пример послушать?

Как по мне, для художественных книг подходит только если улучшать словарь. Да и подавляющее большинство уже озвучены, не обязательно использовать tts. Но тройку книг залил - скачать.

Послушал ваши примеры - по-моему очень хорошо. Во всяком случае - сильно лучше, чем читают некоторые "декламаторы"-любители. Разве что, на мой вкус, темп немного увеличить.

Если можно, выложите сам файл скрипта куда-нибудь, на тот же гугл-диск. Возникли пробемы с кодировками, писал Вам в ЛС. Возможно, если не перегонять его через буфер этих проблем не будет.

Немного более простой путь получения токена:

  1. Открываем в браузере https://gstatic.com/cloud-site-ux/text_to_speech/text_to_speech.min.html

  2. в строку url вводим

    javascript: void window.addEventListener("cloud-demo-captcha-solved", function(ev){document.write(ev.detail.token)})

    (на странице после этого ничего не меняется)

  3. Жмем "SPEAK IT", после решения капчи на странице отображается токен.

Сработало после вставки в Консоль. Со строкой url не получилось. (Пробовал в Chromium 93)

В строку url нельзя вставить из буфера обмена "javascript:" - оно удаляется при вставке по соображениям безопасности. Надо его вручную дописывать.

Думаю из за этого не получилось.

Смотря где. Например у меня в браузере для этого есть настройка, так что код работает.

nameBook=str(configF['book']['nameBook'])

getitem raise KeyError(key) KeyError: 'book'

выдает ошибку

У вас в папке со скриптом присутствует файл конфига? Возможно в нем вы стёрли первую строку? Посмотрите в конце статьи скриншот, в нем видно какие файлы должны быть в одной папке.

config.ini на месте и [book] в начале файла присутствует

Может, ты коряво ключ скопировал в конфигу? Ты его закавычь.

Бро, либа random не используется нигде. Убери из импорта.

Еще замечание, бро.

Перед вызовом малтипроцессинга куда-то в район строки 172 нехудо бы сунуть родное if __name__ == '__main__' , а то оно будет свинить.

Слушай, бро. Ну, получается относительно неплохо, хотя не хватает в тексте пауз порой.

Однако, у меня на выходе звуковое файло почему-то крякает порой. У тебя такое было? Это на моей стороне косяк, или так гугль работает?

Такого у себя не замечал. Возможно, у вас в тексте какие то лишние символы? Попробуйте так же сгенерировать аудио под тем же порядковым номером, в конфиге можно указать откуда начинать, и послушать на наличие посторонних звуков.

У меня проблема с паузами возникает в диалогах. Почему-то при наличии тире, после точки паузы нет совсем. Но если тире нет, а просто после точки идет новая строка - все паузы расставляет корректно. Удалил регуляркой все тире в прямой речи - паузы появились и диалоги читает хорошо.

Еще движок путается с е/ё - пришлось пройтись поиском и руками заменить где надо черт/чёрт и подобные слова.

У меня файлы не крякают - хотя не все могут их открыть. vlc, mpv открывает нормально, а вот audacious - нет. Вместо звука дикий писк

Sign up to leave a comment.

Articles