Today

YouTube MCP: скачиваем видео и вшиваем субтитры

Зачем это нужно

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

Я запилил эмсипи-сервер для оупенкода, который делает всё одной командой: скачивает видео, достаёт субтитры (русские или английские), переводит их на русский прямо в чате и вшивает в видео. Никаких апи-ключей, никаких внешних сервисов — только yt-dlp, ffmpeg и сам оупенкод.

Как это работает

Процесс выглядит так:

  1. Спрашиваю у оупенкода «скачай видос с ютуба, вшей субтитры»
  2. Оупенкод спрашивает у меня ссылку и куда сохранить
  3. Эмсипи сервер скачивает видео в 480p (для телеграма самое то)
  4. Сервер достаёт субтитры — сперва русские если есть, если нет — английские
  5. Если субтитры на английском, оупенкод переводит их на русский прямо в диалоге
  6. Ффмпег вшивает субтитры в видео
  7. Готовый файл лежит в ~/Downloads

Всё это занимает пару минут и не требует ни одной команды в терминале.

Архитектура

Система состоит из трёх частей:

1. Эмсипи-сервер

Пайтон-скрипт на FastMCP с четырьмя инструментами:

  • download_video — скачивает 480p через yt-dlp
  • extract_subs — достаёт субтитры (с авто-субтитрами как запасной вариант)
  • save_subs — сохраняет переведённые субтитры
  • burn_subs — вшивает субтитры через ffmpeg

Сервер лежит в ~/.config/opencode/mcp/youtube_mcp_server.py:

Скачать готовый файл

2. Регистрация в оупенкод

Добавляем в ~/.config/opencode/opencode.jsonc:

"youtube": {
  "type": "local",
  "command": [
    "/Users/ваш_юзер/.config/opencode/mcp/venv/bin/python3",
    "/Users/ваш_юзер/.config/opencode/mcp/youtube_mcp_server.py"
  ]
}

3. Скилл

Чтобы оупенкод сам понимал когда вызывать инструменты, создаём скилл в ~/.opencode/skills/youtube-processor/SKILL.md:

Скачать готовый файл

В скилле описана последовательность: спросить ссылку и путь → скачать → достать субтитры → если английские — перевести → вшить → отдать результат.

Как я перевожу субтитры без апи-ключей

Самый ленивый момент — перевод. Вместо того чтобы дёргать гугл-транслейт или оплачивать апи, я просто отдаю текст субтитров самому оупенкоду. Он переводит всё в диалоге, сохраняя таймкоды и структуру SRT, сохраняет обратно и передаёт на вшивание. Можно локально конечно, но не у всех есть. Да и в целом зачем лишний шаг.

Что получилось в итоге

Протестировал на видео со новостями на стопгейм, ютуб выдаёт автоматические русские субтитры, так что перевод не понадобился. Видео 8 минут скачалось за 10 секунд, субтитры за 3 секунды, вшивание заняло пару минут. На выходе — mp4 со встроенными субтитрами, готовый для телеграма.

Если у видео нет русских субтитров, оупенкод скачает английские и переведёт их на русский прямо в диалоге — никаких лишних телодвижений.

Особенности

  • Для работы нужен FFMpeg с libass. Если subtitles фильтр не найден — brew install libass && brew install homebrew-ffmpeg/ffmpeg/ffmpeg
  • Если субтитров нет вообще — оупенкод спросит, сохранить видео без них или отменить
  • Для “возрастных видео” может понадобиться куки браузера