Переклад англомовних YouTube відео на російську мову прямо в mpv.
Використовує Яндекс Translation API через Cloudflare воркер vot-worker.eu.cc.
Залежності:
sudo pacman -S nodejs yt-dlp mpv fzfВстановлення:
git clone https://github.com/MultiUpGame/vot-mpv ~/.local/share/vot-mpv
cd ~/.local/share/vot-mpv
bash install.sh~/.local/share/vot-mpv/
├── vot-translate.js # Node.js скрипт перекладу (серце системи)
├── vot-cli.js # CLI менеджер бібліотеки
├── vot.lua # Lua скрипт для mpv
├── integrations/
│ ├── ytv # YouTube пошук + інтеграція з бібліотекою
│ └── ytv-fmt # Допоміжний форматер для ytv
├── node_modules/ # npm пакети (@vot.js/node)
└── library.json # Бібліотека відео (створюється автоматично)
~/.config/mpv/scripts/
└── vot.lua # (копія, завантажується mpv)
~/.config/mpv/script-opts/
└── vot.conf # налаштування
~/.cache/vot/
└── <videoId>.mp3 # кеш перекладів (7 днів)
~/Videos/vot/
└── Назва відео [videoId].webm # скачані відео
mpv 'https://www.youtube.com/watch?v=...'Натисни Ctrl+T — вмикає/вимикає переклад.
Якщо переклад вже є в кеші — починається миттєво.
OSD показує джерело: [кеш] або [сервер].
Працює і для локальних файлів скачаних через vot download —
скрипт витягує videoId з назви файлу і бере переклад з кешу.
vot add <url> [url2...] Додати відео (можна кілька одразу, назва + thumbnail автоматично)
vot add --file <шлях> Додати всі URL з текстового файлу (по одному на рядок, # ігнорується)
vot add-playlist <url> Додати всі відео з плейлісту
vot list Показати всі відео зі статусами
vot pick fzf з thumbnails → відкрити в mpv
vot play <id> [quality] Відкрити в mpv (quality: 480/720/1080/2160/best)
vot fetch <id> Завантажити переклад для одного відео
vot fetch --all Завантажити переклади для всіх (макс 5хв/відео)
vot download <id> [q] Скачати відео (меню якості або вкажи q)
vot remove <id> Видалити все: бібліотека + відео + переклад + thumbnail
vot remove-video <id> Видалити тільки відео файл (залишити в бібліотеці)
vot remove-translation <id> Видалити тільки переклад (щоб перескачати)
vot clean Видалити переклади і thumbnails без запису в бібліотеці
vot sync-thumbs Завантажити thumbnails для всіх відео без них
vot status Статистика бібліотеки і місце на диску
vot update Оновити vot-mpv (git pull + переінсталяція)vot pick — керування прямо в списку:
| Клавіша | Дія |
|---|---|
Enter |
Відкрити в mpv |
Ctrl+D |
Видалити все (бібліотека + відео + переклад + thumbnail) |
Ctrl+X |
Скачати відео якщо нема / видалити якщо є |
Ctrl+R |
Скачати переклад якщо нема / видалити якщо є |
Список оновлюється одразу після дії. Thumbnail відображається справа.
Іконки:
🌐 онлайн 💾 локальне відео ✓ переклад є ✗ провал — немає
Якщо відео скачано — переклад зберігається назавжди (без 7-денного ліміту).
ytv hyprland tutorial # пошук
ytv # показати історію пошукуВідкриває fzf зі списком результатів:
★ 18:27 saneAspect Hyprland - Best Tiling WM in 2025
45:12 typecraft Hyprland Complete Config Guide
★ 32:05 Dreams of Code Hyprland Dotfiles from Scratch
★ — вже є в бібліотеці.
| Клавіша | Дія |
|---|---|
Enter |
Відкрити відео в mpv |
Ctrl+A |
Додати в бібліотеку (залишається в fzf, ★ з'являється) |
Ctrl+L |
Змінити ліміт результатів (зберігається в vot.conf) |
Ctrl+U |
Оновити результати з мережі (ігнорує кеш) |
Esc |
Вийти |
~/.config/mpv/script-opts/vot.conf:
language=ru # мова озвучки перекладу (ru / en / kk)
autoTranslate=yes # автоматично перекладати при відкритті відео (yes/no)
skipLangs=ru # НЕ перекладати відео цими мовами (через кому: ru,en)
quality=1080 # якість для перегляду і скачування (480/720/1080/2160/best)
search_limit=20 # кількість результатів у ytv (змінюється через Ctrl+L в пошуку)
vot_bin=/usr/bin/node
vot_script=/home/multi-man/.local/share/vot-mpv/vot-translate.jsПідтримувані мови:
| Параметр | Значення |
|---|---|
language (озвучка) |
ru, en, kk — більше Яндекс не підтримує |
| Вхідна мова відео | визначається автоматично: en, zh, ko, de, fr, es, it, ja, ar та інші |
skipLangs=ru — дефолт, щоб не перекладати російські відео на російську.
Додай будь-які інші коди якщо хочеш пропускати: skipLangs=ru,uk,de
Українська озвучка недоступна — Яндекс її не має в TTS.
quality використовується як дефолт для vot play, vot pick, vot download і ytv.
vot download завжди показує меню вибору, але підсвічує дефолт з конфігу.
Якщо відео гальмує або десинхронізується — додай у ~/.config/mpv/mpv.conf:
hwdec=autoВмикає апаратне декодування (VA-API/VDPAU). Особливо важливо для 4K/AV1.
- Ctrl+T →
vot.luaзапускаєvot-translate.js <url> /tmp/vot_xxx.mp3 - Скрипт перевіряє
~/.cache/vot/<videoId>.mp3— якщо є і свіжіше 7 днів, повертає одразу - Інакше — запит до
vot-worker.eu.cc(Cloudflare проксі до Яндекса) - Яндекс повертає URL аудіо на S3 → замінюється на audio-proxy воркера
- URL передається в mpv одразу (стрімінг), паралельно фоновий процес зберігає MP3 в кеш
Яндекс заблокований в Україні на рівні DNS і IP.
vot-worker.eu.cc — Cloudflare Workers проксі, його IP не заблокований.
vot.lua витягує videoId з назви файлу формату Назва [videoId].webm
і конструює YouTube URL для пошуку перекладу в кеші.
YouTube заблокований в Росії з серпня 2024. Яндекс не може завантажити нові відео. Працюють тільки відео що вже є в кеші Яндекса (перекладались раніше через браузерне розширення).
Node.js за замовчуванням пробує IPv6 першим — таймаут ~3с перед IPv4.
Вирішення: require("dns").setDefaultResultOrder("ipv4first") + власна fetchFn з таймаутом 15с.
| Пакет | Для чого |
|---|---|
nodejs |
запуск vot-translate.js |
yt-dlp |
тривалість відео + пошук (ytv) + скачування |
mpv |
відтворення |
fzf |
інтерактивний вибір в vot pick і ytv |
@vot.js/node |
VOT API клієнт (npm, в node_modules/) |