YouTube MCP: скачиваем видео и вшиваем субтитры
Зачем это нужно
Я часто скачиваю видео с ютуба, чтобы перекинуть в телеграм канал. В телеграме видео можно глянуть и без звука, да и принято щас так, как в рилсах кароче. Да и ролики бывают не на славянских языках, вшивать их каждый раз руками это эт лень.
Я запилил эмсипи-сервер для оупенкода, который делает всё одной командой: скачивает видео, достаёт субтитры (русские или английские), переводит их на русский прямо в чате и вшивает в видео. Никаких апи-ключей, никаких внешних сервисов — только yt-dlp, ffmpeg и сам оупенкод.
Как это работает
- Спрашиваю у оупенкода «скачай видос с ютуба, вшей субтитры»
- Оупенкод спрашивает у меня ссылку и куда сохранить
- Эмсипи сервер скачивает видео в 480p (для телеграма самое то)
- Сервер достаёт субтитры — сперва русские если есть, если нет — английские
- Если субтитры на английском, оупенкод переводит их на русский прямо в диалоге
- Ффмпег вшивает субтитры в видео
- Готовый файл лежит в ~/Downloads
Всё это занимает пару минут и не требует ни одной команды в терминале.
Архитектура
Система состоит из трёх частей:
1. Эмсипи-сервер
Пайтон-скрипт на FastMCP с четырьмя инструментами:
download_video— скачивает 480p через yt-dlpextract_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 со встроенными субтитрами, готовый для телеграма.
Если у видео нет русских субтитров, оупенкод скачает английские и переведёт их на русский прямо в диалоге — никаких лишних телодвижений.