Код, использованный в этой статье, можно найти здесь.

Смотрели фильм / сериал с субтитрами и удивлялись тому, как они волшебным образом всплывают? Или интересно, как можно добавлять субтитры к своим видео? К концу этой статьи вы сможете создавать субтитры программным способом.

Перво-наперво - почему для субтитров предпочтительнее формат файла SRT?

SRT - это широко распространенный формат субтитров, совместимый с большинством медиаплееров и имеющий огромные преимущества для SEO. Блог - Понимание и создание файлов SRT не только хорошо объясняет файлы SRT и их преимущества, но также объясняет, как добавить их в ваши видео на различных платформах, таких как YouTube, Facebook и т. Д.

Если вы следите за упомянутым блогом, вы поймете, что в эпоху автоматизации создание файла SRT требует большого количества ручного труда. Можно ли как-то минимизировать эти усилия?

Есть два способа сделать это -

  1. Обучите свою собственную модель машинного обучения - для этого требуется много данных, ручной труд для аннотирования данных (ирония), время и, откровенно говоря, много денег. Это того не стоит для небольших приложений / организаций.
  2. Используйте предварительно обученные API - теперь есть несколько предварительно обученных API, которые могут эффективно выполнять эту работу. Дополнительные преимущества: они требуют меньше времени на настройку, просты в освоении и экономичны. Мы будем использовать один такой API для создания субтитров - API преобразования речи в текст Google Cloud.

Давайте начнем!

Предварительные условия

Настройка среды

Включите API преобразования речи в текст в своем проекте Google Cloud. На панели навигации выберите API и службы ›Библиотека› Cloud Speech-to-Text API и нажмите Включить.

Теперь запустите приведенные ниже команды из своего Терминала.

  • Клонировать репозиторий -
git clone [email protected]:darshan-majithiya/Generate-SRT-File-using-Google-Cloud-s-Speech-to-Text-API.git
  • Установите требования -
cd Generate-SRT-File-using-Google-Cloud-s-Speech-to-Text-API
pip install -r requirements.txt
  • Переместите сюда свой credentials.json и затем экспортируйте учетные данные -
export GOOGLE_APPLICATION_CREDENTIALS="credentials.json"

Подготовка данных

Я фанат Костюмов, поэтому буду использовать это видео для демонстрации. Не стесняйтесь использовать любое другое видео.

Я скачаю это видео с помощью модуля pytube3.

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

Получение количества каналов, скорости передачи и частоты дискретизации видео

Эти значения атрибутов нужны нам для преобразования видео в аудио, которое позже будет использоваться API преобразования речи в текст.

  • Каналы - это проход или канал связи, по которому передается звуковой сигнал.
  • Частота дискретизации - определяет, сколько раз в секунду происходит дискретизация звука.
  • Битрейт - это количество бит, закодированных в секунду, или количество битов, переданных / полученных в секунду. Более высокая скорость передачи данных при более высокой частоте дискретизации означает хорошее качество звука.

Я использовал модуль pydub для извлечения этих атрибутов.

Преобразование видео в аудио и загрузка в GCS

Преобразуйте видео в аудио для использования API преобразования речи в текст и сохраните его в GCS, поскольку для аудио ›1 мин и размера ≥ 10 МБ API требует, чтобы звук хранился в корзине.

Расшифровка аудио

Конфигурация

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

config = {
        "language_code": "en-US",
        "sample_rate_hertz": int(sample_rate),
        "encoding": enums.RecognitionConfig.AudioEncoding.LINEAR16,
        "audio_channel_count": int(channels),
        "enable_word_time_offsets": True,
        "model": "video",
        "enable_automatic_punctuation":True
    }
  • language_code - язык, используемый в вашем видео / аудио. Вы можете проверить все поддерживаемые языки здесь.
  • sample_rate_hertz - частота дискретизации видео / аудио, извлеченного с помощью модуля pydub.
  • кодировка - API преобразования речи в текст поддерживает только определенный тип кодирования аудио. Вы можете найти все поддерживаемые кодировки здесь.
  • audio_channel_count - количество каналов, используемых видео / аудио.
  • enable_word_time_offsets - если True, дает время начала и время окончания каждого слова.
  • модель - модель, которая будет использоваться API для транскрипции. Нашим исходным источником является видео, поэтому мы использовали модель видео. Но есть и другие модели, вы можете проверить их здесь.
  • enable_automatic_punctuation - если True, он также пытается обнаружить знаки препинания.

Помимо всего этого, есть много других доступных функций, таких как диаризация говорящего, уверенность на уровне слов, раздельная транскрипция для каждого канала и т. Д. API преобразования речи в текст также поддерживает транскрипцию для потоковой передачи в реальном времени.

Расшифровать

Приведенная ниже функция long_running_recongnize транскрибирует видеофайл и возвращает объект ответа, который содержит транскрипты, достоверность, слова, start_time и end_time для каждого слова.

Создание файла SRT

Для создания файла SRT я использовал модуль srt. Код ниже преобразует объект ответа из API преобразования речи в текст в строку формата SRT. Код выглядит немного сложным, и это связано с тем, что каждая переменная требуется для отображения субтитров синхронно со звуком при использовании ее в медиаплеере.

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

Затем вы можете сохранить субтитры как:

with open("subtitles.srt", "w") as f:
    f.write(subtitles)

Полный код этой статьи можно найти на Github.

Заключение

Независимо от того, хотите ли вы выполнить диаризацию выступающих или хотите транскрибировать звонки клиентов для анализа производительности ваших сотрудников или, может быть, сгенерируете субтитры для потоковой передачи в реальном времени для зрителей - вы можете положиться на API преобразования речи в текст Google Cloud, чтобы сделать это за вас в эффективном режиме. путь с минимальными усилиями.

Если вы хотите узнать о многих других таких удивительных сценариях использования, следите за новостями в Searce Engineering Blog!

Если вам понравилась эта статья, не стесняйтесь хлопать много раз (вы знаете, что хотите!) И поделитесь ею с другом. Вы также можете оставить комментарий, чтобы задать вопрос или рассказать мне, как улучшить. 😄

Здравствуйте, я специалист по аналитике и машинному обучению в Searce Inc., а также сертифицированный младший инженер по облачным вычислениям Google. Я считаю, что данные и запоминающийся пользовательский опыт - это две важнейшие составляющие любого интеллектуального продукта. Свяжитесь со мной в LinkedIn или поздоровайтесь в Twitter.