Видео в текст: Как превратить час видео с Youtube в полноценную статью за 0.30$

Видео в текст: Как превратить час видео с Youtube в полноценную статью за 0.30$

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

Для чего можно использовать технологию "аудио в текст"

Вот лишь несколько вариантов, для чего это можно использовать:

  • Создать статью для блога на основе видео.
  • Создать текстовый гайд или чек-лист по видео.
  • Превратить видео в текст и перевести. Для записи видео на другом языке или для публикации текста на сайте.
  • Использовать фрагменты текста видео для создания описаний товаров, рекламных объявлений или контента для SEO.
  • Проанализировать текст из видео и выделить ключевые фразы или темы для написания собственных материалов.
  • Превратить видео в текст и опубликовать на своем сайте, чтобы улучшить индексацию — поисковые роботы легче понимают информацию текстом, чем в видеоформате.
  • В конце концов, можно запилить свой сервис на основе этого API.

Варианты использования могут быть ограничены только вашей фантазией.

Итак, с места в карьер!

Что будем использовать

В этой инструкции я буду использовать Python и Google Colab. После прочтения вы сможете сразу попробовать транскрибировать свои видео с ютуба. Вам не нужно будет устанавливать интерпретатор питона, все необходимые библиотеки и т. д. В Colab уже почти все включено. Для полноценной работы нужно будет только сделать копию.

Видео в текст: Как превратить час видео с Youtube в полноценную статью за 0.30$

Whisper от OpenAI

Транскрибировать текст будет модель Whisper от OpenAI. Это очень крутая модель, название которой говорит само за себя. Я пробовал транскрибировать аудио даже с очень плохим звуком и она справлялась на отлично. Для примера, есть видеозапись 1988 года, и там на середине очень плохой звук передается по радиосвязи. Я подал эту аудиодорожку модели Whisper и она все дословно перевела в текст без единой ошибки! Модель была обучена на 680 000 часов данных, собранных из интернета, треть из которых была не на английском языке.

Модель отлично понимает русский язык. Об этом красноречиво говорят графики тестов двух моделей на разных наборах данных. Частота ошибок в процентах для русского языка составляет всего около 5%!

Шаг 1: Установка необходимых библиотек

Для начала, нужно установить необходимые библиотеки для работы программы. Это pytubefix для скачивания и обработки видео с Youtube, pydub и ffmpeg для работы с аудио файлами. Ну и конечно устанавливаем openai.

# Устанавливаем библиотеки, необходимые для работы !pip install pytubefix pydub !apt-get install ffmpeg -y !pip install "openai==1.55.3" !pip install "httpx==0.27.2"

Я устанавливаю конкретные версии openai и httpx. Это все потому, что при запуске кода из Google Colab я столкнулся с некоторыми ошибками, которые связаны с внутренними конфликтами зависимостей, которые устанавливаются вместе с openai. Установка конкретных версий решила эту проблему. А pytubefix это форк библиотеки pytube, в котором разработчики пофиксили некоторые баги основной библиотеки.

Шаг 2: Импорт библиотек

После установки библиотек необходимо их импортировать в наше окружение.

# Импортируем необходимые библиотеки import os from pytubefix import YouTube from pydub import AudioSegment from openai import OpenAI from google.colab import userdata

Добавить API_KEY

Затем нужно добавить ваш ключ API OpenAI. Как получить ключ OpenAI API я упоминал в этой статье. Для таких секретных вещей, как ключ API, в Google Colab есть специальная вкладка “Секреты”.

Видео в текст: Как превратить час видео с Youtube в полноценную статью за 0.30$

Проходим на эту вкладку, нажимаем “добавить секрет”. Вставляем название, как на скриншоте: API_KEY, значение: ваш ключ API.

Видео в текст: Как превратить час видео с Youtube в полноценную статью за 0.30$

Сам ключ API определяется здесь:

# Определяем ключ OpenAI API API_KEY = userdata.get("API_KEY")

После этого нужно определиться с тем, какие параметры мы будем задавать для транскрибации. Здесь нужно вдумчиво составить и написать:

  • Промпт для обработки текста во время транскрибации
  • Промпт для обработки текста после транскрибации
  • Модель для обработки текста
  • Ссылки на видео с youtube
# Промпт для обработки текста во время транскрибации PROMPT_PREPROCESS = "Marilyn Manson - Tainted Love" # Промпт для обработки текста после транскрибации (постобработка) PROMPT_POSTPROCESS = "" # Модель GPT для постобработки GPT_MODEL = "gpt-4o" # Cпискок URL-адресов YouTube VIDEO_URLS = [ "https://youtu.be/oIaEjX_RMQU?si=VoROHSqTjUO0MGLu", "https://youtu.be/oIaEjX_RMQU?si=VoROHSqTjUO0MGLu", ]

Пояснение

Модель Whisper может работать в двух режимах: транскрибация и перевод. Перевод можно использовать только на английский язык. Поэтому в данной статье перевод “из под капота” мы не будем рассматривать. (Хотя перевести на другие языки все таки можно, но об этом позже). Сейчас нам интересна транскрибация.

Для модели можно задать несколько параметров, например, формат выводимого текста может быть: json, text, srt или wtt (для субтитров). Можно задать язык, температуру и gpt-модель для постобработки текста. Первая обработка текста происходит во время транскрибации и настроить ее можно с помощью параметра prompt.

В параметре prompt можно написать команду для модели, чтобы она учитывала знаки препинания. Или написать какие-то специфичные названия, чтобы они были корректно написаны в тексте. Важно учитывать, что длина такого промпта не должна превышать 244 токена, все что больше - обрезается.

Помимо этого, можно задать промпт для постобработки текста уже в текстовую модель GPT. Вот в этом месте можно писать длинный промпт со всеми своими пожеланиями для постобработки транскрибированного текста: разметить текст в html, перевести текст на другой язык и т. д.

Вроде как с этой частью разобрались, теперь перейдем к нашему коду.

Прописываем промпт для обработки текста во время транскрибации.

# Промпт для обработки текста во время транскрибации PROMPT_PREPROCESS = "Marilyn Manson - Tainted Love"

Если это нужно, то прописываем промпт для обработки текста после транскрибации. Если не нужно, то оставляем строку пустой. Пишем модель для постобработки. По стандарту стоит GPT-4o.

# Промпт для обработки текста после транскрибации (постобработка) PROMPT_POSTPROCESS = "" # Модель GPT для постобработки GPT_MODEL = "gpt-4o"

И добавляем список URL наших видео, с которыми будем работать.

# Cпискок URL-адресов YouTube VIDEO_URLS = [ "https://youtu.be/oIaEjX_RMQU?si=VoROHSqTjUO0MGLu", "https://youtu.be/oIaEjX_RMQU?si=VoROHSqTjUO0MGLu", ]

Переходим к следующему этапу: определение функций обработки текста и аудио.

Шаг 3: Функции для обработки текста и аудио

Здесь прописаны 3 основные функции. Немного расскажу что здесь происходит. Сначала определяем download_youtube_audio(). На вход подается URL адрес видео. Скачивается аудио-дорожка из видео на Youtube и возвращается путь к скачанному аудио файлу.

# Функция для загрузки аудио с YouTube def download_youtube_audio(url, output_path="audio"): yt = YouTube(url, "IOS") stream = yt.streams.filter(only_audio=True).first() audio_file_path = os.path.join(output_path, f"audio_{yt.video_id}.mp3") stream.download(output_path=output_path, filename=f"audio_{yt.video_id}.mp3") return audio_file_path

Т. к. максимальный размер аудио, который может обработать модель Whisper - 25 Мб, нужно, в случае превышения, разбить аудио файл на части. Это и делает функция split_audio(). Задается максимальный размер аудио и на вход подается путь до файла. Если размер превышает установленные 25 Мб, то файл разбивается на части.

# Функция для разбиения аудиофайла, если он слишком большой def split_audio(file_path, max_file_size=25 * 1024 * 1024): audio = AudioSegment.from_file(file_path) if os.path.getsize(file_path) <= max_file_size: return [file_path] chunks = [] chunk_length = max_file_size * 1000 // len(audio) # в миллисекундах for i in range(0, len(audio), chunk_length): chunk = audio[i:i + chunk_length] chunk_path = f"{file_path}_chunk_{i // chunk_length}.mp3" chunk.export(chunk_path, format="mp3") chunks.append(chunk_path) return chunks

Дальше внутри функции transcribe_audio() определяем объект OpenAI. И с помощью встроенных методов API отправляется запрос к модели whisper-1 с передачей параметров response_format и prompt. Происходит магия и в ответе возвращается текст транскрипции.

# Функция для транскрибации аудио с помощью Whisper API def transcribe_audio(api_key, audio_path, prompt=""): client = OpenAI(api_key=api_key) with open(audio_path, "rb") as audio_file: transcription = client.audio.transcriptions.create( model="whisper-1", file=audio_file, response_format="text", prompt=prompt ) return transcription

Шаг 4: Обработка видео и транскрибация

Затем просто внутри функции process_video() вызываем по очереди все основные функции обработки:

Скачиваем аудио.

# Шаг 1: Скачиваем аудио print(f"Загрузка аудио с видео: {video_url}") audio_path = download_youtube_audio(video_url) print(f"Аудио сохранено в файл: {audio_path}")

Разделяем аудио на части, если файл больше 25 Мб.

# Шаг 2: Разделяем аудио, если оно слишком большое audio_chunks = split_audio(audio_path) print(f"Количество частей аудио для обработки: {len(audio_chunks)}")

Транскрибируем каждую часть и объединяем все в один текст.

# Шаг 3: Транскрибируем каждую часть transcriptions = [] for chunk in audio_chunks: print(f"Обработка части аудио: {chunk}") transcription = transcribe_audio(api_key, chunk, prompt=prompt_preprocess) transcriptions.append(transcription) # Объединяем все части в один текст full_transcription = "\n".join(transcriptions)

Если задан промпт для постобработки PROMPT_POSTPROCESS, то выполняется этот промпт на 4 шаге.

# Шаг 4: Постобработка текста (если есть постобработка) if prompt_postprocess: print("Выполняется постобработка текста...") client = OpenAI(api_key=api_key) response = client.chat.completions.create( model=GPT_MODEL, messages=[ {"role": "system", "content": prompt_postprocess}, {"role": "user", "content": full_transcription} ] ) full_transcription = response.choices[0].message.content return full_transcription

Шаг 5: Запуск процесса для всех видео по очереди

Сначала создаем папки для хранения аудиофайлов и готовых текстов транскрипций.

# Создаём папку для сохранения результатов, если её нет os.makedirs("transcriptions", exist_ok=True) # Создаём папку для сохранения аудио, если её нет os.makedirs("audio", exist_ok=True)

Проходим по каждому URL из списка VIDEO_URLS и работаем с ним. Отлавливаем ошибки, если они возникают простыми принтами print().

# Обрабатываем все видео из списка for i, url in enumerate(VIDEO_URLS, start=1): try: print(f"Начало обработки видео {i}: {url}") transcription = process_video( API_KEY, url, prompt_preprocess=PROMPT_PREPROCESS, prompt_postprocess=PROMPT_POSTPROCESS ) # Сохраняем транскрипцию в файл output_file_path = f"transcriptions/transcription_{i}.txt" with open(output_file_path, "w", encoding="utf-8") as file: file.write(transcription) print(f"Транскрипция сохранена в файл: {output_file_path}") except Exception as e: print(f"Ошибка при обработке видео {i}: {e}")

Как запускать код в Google Colab

Я знаю 2 способа. Первый - запускать каждый кусок кода по очереди.

Видео в текст: Как превратить час видео с Youtube в полноценную статью за 0.30$

Но в нашем случае, мне кажется, это не актуально. Второй способ - запустить все ячейки кода сразу. Для этого идем на вкладку “Среда выполнения” и нажимаем “Выполнить все”.

Видео в текст: Как превратить час видео с Youtube в полноценную статью за 0.30$

В итоге в Colab под всеми ячейками с кодом должны появиться такие сообщения:

Видео в текст: Как превратить час видео с Youtube в полноценную статью за 0.30$

Если все сделали без ошибок и код отработал, идем смотреть, что там с текстом. Проходим в "Файлы", открываем созданную нами папку transcriptions.

Видео в текст: Как превратить час видео с Youtube в полноценную статью за 0.30$

Скачиваем файл(ы) и проверяем текст.

Видео в текст: Как превратить час видео с Youtube в полноценную статью за 0.30$

Профит! Вот пример, как получилось у меня: размеченная html статья "Что такое API?"

Видео в текст: Как превратить час видео с Youtube в полноценную статью за 0.30$

Что по стоимости?

Стоимость API Whisper можно посмотреть здесь.

Видео в текст: Как превратить час видео с Youtube в полноценную статью за 0.30$

Минута - 0,006$. С помощью нехитрых математических вычислений получаем, что транскрибировать час аудио будет стоить 0,36$. Дешевле любого готового сервиса раз в 5, который предлагает подобные услуги. Если знаете сервис дешевле, напишите в комменты.

Если не удобно работать с Google Colab, то у меня для вас есть этот код на Github. Качайте себе весь код из репозитории, устанавливайте все зависимости из requirements.txt и запускайте локально или на VPS.

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

11
Начать дискуссию