Загружаем видео из VK без установки расширений

02.02.2025

Решаемая проблема: в ВК люди грузят видео со спаррингов и тренировок, а также и трансляции турниров, но в ВК очень неудобно их смотреть. ВК при просмотре видео иногда тормозит, плеер по удобству и функционалу очень сильно уступает моему любимому MPV: тот умеет в замедление и ускорение “в один клик”, покадровую перемотку в обе стороны, а ещё в нём можно кусок видео зациклить. Да и видео хочется иметь в локальном архиве, а не искать каждый раз по всему ВК, когда захотелось пересмотреть.

Типовой путь, которым пойдёт >90% обывателей, — установить какое-нибудь расширение для скачивания видео. Мне такое решение не нравится, так как никто не гарантирует, что это расширение кроме скачивания видео не будет ещё что-то делать от моего имени или в какой-то момент не начнёт это делать. Я решил использовать yt-dlp, которым уже пользовался для загрузки видео с youtube. Конечно, и в yt-dlp может оказаться зловредный код, но шансов, что это будет обнаружено, больше, чем в случае со случайным расширением: проект всё же достаточно крупный, чтобы на него много глаз смотрело, и уязвимости в нём находят и устраняют. То, что я там видел среди уязвимостей на 28 октября 2024 года хоть и жутковато местами, но для моих сценариев неактуально. Например, на уровне утечки кук вещи, которые находили в 2023 году, для моего сценария использования не актуальны, потому что ссылки я руками копирую.

Хотелось бы и вовсе не давать доступ к своей учётке, но часть видео, которые мне нужны, выкладываются не в публичном доступе, а в клубных чатах. Поэтому yt-dlp всё-таки придётся скормить нужный набор кук. И хочется, чтобы в куки со всех остальных сайтов yt-dlp не смотрел. В Firefox это решается через создание нового профиля. Идём в about:profiles, там создаём новый профиль и копируем директорию, в которой он лежит. У меня на Debian путь выглядит примерно так: /home/danila/.cache/mozilla/firefox/1234abcd.danila-VK.

Когда сделали профиль, со страницы about:profiles выбираем “Launch profile in new browser” и там логинимся в ВК (и не ходим из-под него на другие сайты). Теперь у нас есть профиль из которого yt-dlp будет брать куки для ВК, но куки для других сайтов в него не попадут.

Если yt-dlp у вас ещё не установлен, то ставим его. Несмотря на то, что он у меня есть в репозиториях, я всё равно ставлю его через PyPI: в Debian в репе пакеты древние, и конкретно в этом случае это критично. Делаем под yt-dlp отдельную среду и устанавливаем.

Теперь делаем скриптик, чтобы каждый раз руками не запускать среду и не вводить параметры для выбора профиля в бразуере. У меня Linux и PyPI в отдельной среде, поэтому скрипт выглядит так, как ниже. Вам может понадобиться адаптировать под свою ось.

#!/bin/bash
# --- Start of block to include in all scripts ---
set -e  # Fail on any error (except some tech cases)
set -u  # Fail if refernced unset variable
# set -x  # Commands printed in shell (for debug purposes)
set -o pipefail  # Print error code
# More on set here:
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
## --- End of block to include in all scripts ---

source ~/.env/yt-dlp/bin/activate
yt-dlp --cookies-from-browser firefox:1234abcd.danila-VK $1
echo $1 >> videos_from_vk.txt

Не забываем дать себе права на его исполнение, и дальше используем. Для примера загрузим что-нибудь красивое, например, видео с боем в латах от MwS и Arma Moskovia.

./load_video_from_vk.sh https://vk.com/video-9289924_456239094

Время от времени yt-dlp надо обновлять, так как некоторые сайты, для которых он нужен, меняются или пытаются ему противодействовать. Как настоящие параноики, смотрим, что поменялось при обновлении.

Может быть, когда-нибудь доберусь до того, чтобы прикрутить выбор разрешения видео отсюда.