Видео в текст: Как превратить час видео с Youtube в полноценную статью за 0.30$
В этой статье я расскажу и покажу как из любого видео на youtube можно быстро скачать аудио и транскрибировать его. И также быстро, в режиме реального времени, отредактировать полученный текст под любой формат, будь то интервью, подкаст, инструкция или целый документальный фильм. Просто следуя этому руководству вы сможете легко переводить видео с ютуба в полноценные статьи для публикации на своих сайтах без ограничений на длину видео, их количество и т. д. И все это действительно стоит копейки, а точнее несколько центов за час видеоряда с аудио.
Для чего можно использовать технологию "аудио в текст"
Вот лишь несколько вариантов, для чего это можно использовать:
- Создать статью для блога на основе видео.
- Создать текстовый гайд или чек-лист по видео.
- Превратить видео в текст и перевести. Для записи видео на другом языке или для публикации текста на сайте.
- Использовать фрагменты текста видео для создания описаний товаров, рекламных объявлений или контента для SEO.
- Проанализировать текст из видео и выделить ключевые фразы или темы для написания собственных материалов.
- Превратить видео в текст и опубликовать на своем сайте, чтобы улучшить индексацию — поисковые роботы легче понимают информацию текстом, чем в видеоформате.
- В конце концов, можно запилить свой сервис на основе этого API.
Варианты использования могут быть ограничены только вашей фантазией.
Итак, с места в карьер!
Что будем использовать
В этой инструкции я буду использовать Python и Google Colab. После прочтения вы сможете сразу попробовать транскрибировать свои видео с ютуба. Вам не нужно будет устанавливать интерпретатор питона, все необходимые библиотеки и т. д. В Colab уже почти все включено. Для полноценной работы нужно будет только сделать копию.
Whisper от OpenAI
Транскрибировать текст будет модель Whisper от OpenAI. Это очень крутая модель, название которой говорит само за себя. Я пробовал транскрибировать аудио даже с очень плохим звуком и она справлялась на отлично. Для примера, есть видеозапись 1988 года, и там на середине очень плохой звук передается по радиосвязи. Я подал эту аудиодорожку модели Whisper и она все дословно перевела в текст без единой ошибки! Модель была обучена на 680 000 часов данных, собранных из интернета, треть из которых была не на английском языке.
Модель отлично понимает русский язык. Об этом красноречиво говорят графики тестов двух моделей на разных наборах данных. Частота ошибок в процентах для русского языка составляет всего около 5%!
Шаг 1: Установка необходимых библиотек
Для начала, нужно установить необходимые библиотеки для работы программы. Это pytubefix для скачивания и обработки видео с Youtube, pydub и ffmpeg для работы с аудио файлами. Ну и конечно устанавливаем openai.
Я устанавливаю конкретные версии openai и httpx. Это все потому, что при запуске кода из Google Colab я столкнулся с некоторыми ошибками, которые связаны с внутренними конфликтами зависимостей, которые устанавливаются вместе с openai. Установка конкретных версий решила эту проблему. А pytubefix это форк библиотеки pytube, в котором разработчики пофиксили некоторые баги основной библиотеки.
Шаг 2: Импорт библиотек
После установки библиотек необходимо их импортировать в наше окружение.
Добавить API_KEY
Затем нужно добавить ваш ключ API OpenAI. Как получить ключ OpenAI API я упоминал в этой статье. Для таких секретных вещей, как ключ API, в Google Colab есть специальная вкладка “Секреты”.
Проходим на эту вкладку, нажимаем “добавить секрет”. Вставляем название, как на скриншоте: API_KEY, значение: ваш ключ API.
Сам ключ API определяется здесь:
После этого нужно определиться с тем, какие параметры мы будем задавать для транскрибации. Здесь нужно вдумчиво составить и написать:
- Промпт для обработки текста во время транскрибации
- Промпт для обработки текста после транскрибации
- Модель для обработки текста
- Ссылки на видео с youtube
Пояснение
Модель Whisper может работать в двух режимах: транскрибация и перевод. Перевод можно использовать только на английский язык. Поэтому в данной статье перевод “из под капота” мы не будем рассматривать. (Хотя перевести на другие языки все таки можно, но об этом позже). Сейчас нам интересна транскрибация.
Для модели можно задать несколько параметров, например, формат выводимого текста может быть: json, text, srt или wtt (для субтитров). Можно задать язык, температуру и gpt-модель для постобработки текста. Первая обработка текста происходит во время транскрибации и настроить ее можно с помощью параметра prompt.
В параметре prompt можно написать команду для модели, чтобы она учитывала знаки препинания. Или написать какие-то специфичные названия, чтобы они были корректно написаны в тексте. Важно учитывать, что длина такого промпта не должна превышать 244 токена, все что больше - обрезается.
Помимо этого, можно задать промпт для постобработки текста уже в текстовую модель GPT. Вот в этом месте можно писать длинный промпт со всеми своими пожеланиями для постобработки транскрибированного текста: разметить текст в html, перевести текст на другой язык и т. д.
Вроде как с этой частью разобрались, теперь перейдем к нашему коду.
Прописываем промпт для обработки текста во время транскрибации.
Если это нужно, то прописываем промпт для обработки текста после транскрибации. Если не нужно, то оставляем строку пустой. Пишем модель для постобработки. По стандарту стоит GPT-4o.
И добавляем список URL наших видео, с которыми будем работать.
Переходим к следующему этапу: определение функций обработки текста и аудио.
Шаг 3: Функции для обработки текста и аудио
Здесь прописаны 3 основные функции. Немного расскажу что здесь происходит. Сначала определяем download_youtube_audio(). На вход подается URL адрес видео. Скачивается аудио-дорожка из видео на Youtube и возвращается путь к скачанному аудио файлу.
Т. к. максимальный размер аудио, который может обработать модель Whisper - 25 Мб, нужно, в случае превышения, разбить аудио файл на части. Это и делает функция split_audio(). Задается максимальный размер аудио и на вход подается путь до файла. Если размер превышает установленные 25 Мб, то файл разбивается на части.
Дальше внутри функции transcribe_audio() определяем объект OpenAI. И с помощью встроенных методов API отправляется запрос к модели whisper-1 с передачей параметров response_format и prompt. Происходит магия и в ответе возвращается текст транскрипции.
Шаг 4: Обработка видео и транскрибация
Затем просто внутри функции process_video() вызываем по очереди все основные функции обработки:
Скачиваем аудио.
Разделяем аудио на части, если файл больше 25 Мб.
Транскрибируем каждую часть и объединяем все в один текст.
Если задан промпт для постобработки PROMPT_POSTPROCESS, то выполняется этот промпт на 4 шаге.
Шаг 5: Запуск процесса для всех видео по очереди
Сначала создаем папки для хранения аудиофайлов и готовых текстов транскрипций.
Проходим по каждому URL из списка VIDEO_URLS и работаем с ним. Отлавливаем ошибки, если они возникают простыми принтами print().
Как запускать код в Google Colab
Я знаю 2 способа. Первый - запускать каждый кусок кода по очереди.
Но в нашем случае, мне кажется, это не актуально. Второй способ - запустить все ячейки кода сразу. Для этого идем на вкладку “Среда выполнения” и нажимаем “Выполнить все”.
В итоге в Colab под всеми ячейками с кодом должны появиться такие сообщения:
Если все сделали без ошибок и код отработал, идем смотреть, что там с текстом. Проходим в "Файлы", открываем созданную нами папку transcriptions.
Скачиваем файл(ы) и проверяем текст.
Профит! Вот пример, как получилось у меня: размеченная html статья "Что такое API?"
Что по стоимости?
Стоимость API Whisper можно посмотреть здесь.
Минута - 0,006$. С помощью нехитрых математических вычислений получаем, что транскрибировать час аудио будет стоить 0,36$. Дешевле любого готового сервиса раз в 5, который предлагает подобные услуги. Если знаете сервис дешевле, напишите в комменты.
Если не удобно работать с Google Colab, то у меня для вас есть этот код на Github. Качайте себе весь код из репозитории, устанавливайте все зависимости из requirements.txt и запускайте локально или на VPS.
Если статья была полезной, ставь лайк, пиши коммент. Если есть вопросы, также - в комменты. Дальше планирую писать подобные статьи про использование различных технологий для применения на практике. Так что подписывайся, чтобы ничего не пропустить.