Цель сегодняшней (на 19.08.2026) заметки — это разбор как произвести установку инструмента в лице yt-dlp на Ubuntu 26.04 LTS Server которая представлена как виртуальная машина в среде виртуализации моего тестового сервера Debian 12 + Proxmox 8.2.2 прежде чем я обкатанную заметку перенесу на боевой сервер. Вот только устанавливать в систему будем в Python окружение.

yt-dlp — это консольный инструмент для получения информации и загрузки видео или аудио с YouTube и множества других сайтов.

Я уже давно использую yt-dlp, но до сегодняшнего момента эта была связка: как LXC контейнер под Proxmox 7.4.3, где OS: Ubuntu 22.04 LTS Server больше не работает, т.к. пишет, что ему нужен Python выше 3.10 и все время появляется ошибка: ERROR: unable to download video data: HTTP Error 403: Forbidden. C учетом этом я и оформил текущую проработку.

Шаг №1: Выполняю преднастройку операционной системы для последующего использования, опираемся на заметку: "Преднастройка Ubuntu 26.04 LTS Server для последующего использования"

Шаг №2: Устанавливаю в систему пакет ffmpeg:

ekzorchik@srv-us2604a:~$ sudo apt install -y ffmpeg

Шаг №3: Устанавливаю в систему пакет deno, работает в паре с yt-dlp (среда выполнения TypeScript, построенная на базе JS-движка):

На заметку: по умолчанию у меня CURL использует TLS 1.3 и ничего не происходит, а с TLS 1.2 процесс идет.

ekzorchik@srv-us2604a:~$ curl -fsSL --tlsv1.2 -A "Mozilla/5.0" --connect-timeout 10 --max-time 300 https://deno.land/install.sh | sh

######################################################################## 100.0%

Archive:  /home/ekzorchik/.deno/bin/deno.zip

  inflating: /home/ekzorchik/.deno/bin/deno

Deno was installed successfully to /home/ekzorchik/.deno/bin/deno

Download ▰▰▰▱▱▱ [00:59] 2/5

  jsr:@deno/installer-shell-setup/0.3.4/bundled.esm.js

файл скачался, просто на следующим этапе он почему-то застыл, прерываю выполнение сочетание клавиш "Ctrl + C"

^C

ekzorchik@srv-us2604a:~$

На заметку: По используемым ключам

-A "Mozilla/5.0" — подменить User-Agent (некоторые серверы блокируют curl).

--connect-timeout 10 — таймаут подключения 10 секунд.

--max-time 300 — общий таймаут 5 минут.

ekzorchik@srv-us2604a:~$ ~/.deno/bin/deno --version

deno 2.9.5 (stable, release, x86_64-unknown-linux-gnu)

v8 15.0.245.2-rusty

typescript 6.0.3

ekzorchik@srv-us2604a:~$

Шаг №4: Прописываю вызов утилиты deno в пользовательское окружение:

ekzorchik@srv-us2604a:~$ echo 'export PATH="$HOME/.deno/bin:$PATH"' >> ~/.bashrc

ekzorchik@srv-us2604a:~$ source ~/.bashrc

ekzorchik@srv-us2604a:~$ which deno

/home/ekzorchik/.deno/bin/deno

ekzorchik@srv-us2604a:~$ deno --version

deno 2.9.5 (stable, release, x86_64-unknown-linux-gnu)

v8 15.0.245.2-rusty

typescript 6.0.3

ekzorchik@srv-us2604a:~$

Шаг №5: Текущая версия Python в этом дистрибутиве:

ekzorchik@srv-us2604a:~$ python3 --version

Python 3.14.4

ekzorchik@srv-us2604a:~$

Шаг №6: Устанавливаю пакеты для работы Python в виртуальном окружении:

ekzorchik@srv-us2604a:~$ sudo apt install -y python3.14-venv python3.14-dev

Шаг №7: Создаем отдельное окружение для инструмента yt-dlp:

ekzorchik@srv-us2604a:~$ python3.14 -m venv ~/yt-dlp /home/ekzorchik/yt-dlp/

Шаг №8: Активируем окружение yt-dlp:

ekzorchik@srv-us2604a:~$ cd yt-dlp/

ekzorchik@srv-us2604a:~/yt-dlp$ source bin/activate

(yt-dlp) ekzorchik@srv-us2604a:~/yt-dlp$

Шаг №9: Обновляем pip (менеджер пакет внутри виртуального окружения):

(yt-dlp) ekzorchik@srv-us2604a:~/yt-dlp$ python3 -m pip install -U pip

Шаг №10: Устанавливаем инструмент yt-dlp c рекомендуемыми зависимостями:

(yt-dlp) ekzorchik@srv-us2604a:~/yt-dlp$ python3 -m pip install -U "yt-dlp[default]"

Шаг №11: Проверяем какая текущая версия инструмента yt-dlp:

(yt-dlp) ekzorchik@srv-us2604a:~/yt-dlp$ yt-dlp --version

2026.07.04

(yt-dlp) ekzorchik@srv-us2604a:~/yt-dlp$

На заметку: на официальном ресурсе проекта на текущую дату 19.08.2026 именно такая версия и значится.

Шаг №12: Выхожу из виртуального окружения под инструмент:

(yt-dlp) ekzorchik@srv-us2604a:~/yt-dlp$ deactivate

ekzorchik@srv-us2604a:~/yt-dlp$ cd ~/

ekzorchik@srv-us2604a:~$

Шаг №13: Дабы каждый раз не заходить в виртуальное окружение под инструмент yt-dlp через source, можно сделать символическую ссылку в систему, тем самым из переменной PATH будет обрабатываться вызов:

ekzorchik@srv-us2604a:~$ sudo ln -sf /home/ekzorchik/yt-dlp/bin/yt-dlp /usr/local/bin/yt-dlp

ekzorchik@srv-us2604a:~$ whereis yt-dlp

yt-dlp: /usr/local/bin/yt-dlp

ekzorchik@srv-us2604a:~$ yt-dlp --version

2026.07.04

ekzorchik@srv-us2604a:~$

Шаг №14: Проверяю, что инструмент yt-dlp видит deno:

ekzorchik@srv-us2604a:~$ yt-dlp --verbose

[debug] Command-line config: ['--verbose']

[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8

[debug] yt-dlp version stable@2026.07.04 from yt-dlp/yt-dlp [997fa1408] (pip)

[debug] Python 3.14.4 (CPython x86_64 64bit) - Linux-7.0.0-30-generic-x86_64-with-glibc2.43 (OpenSSL 3.5.5 27 Jan 2026, glibc 2.43)

[debug] exe versions: ffmpeg 8.0.1 (setts), ffprobe 8.0.1

[debug] Optional libraries: Cryptodome-3.23.0, brotli-1.2.0, certifi-2026.07.22, mutagen-1.48.1, requests-2.34.2, sqlite3-3.46.1, urllib3-2.7.0, websockets-17.0.1, yt_dlp_ejs-0.8.0

[debug] JS runtimes: deno-2.9.5

[debug] Proxy map: {}

[debug] Request Handlers: urllib, requests, websockets

[debug] Plugin directories: none

[debug] Loaded 1744 extractors

 

Usage: yt-dlp [OPTIONS] URL [URL...]

 

yt-dlp: error: You must provide at least one URL.

Type yt-dlp --help to see a list of all options.

ekzorchik@srv-us2604a:~$

если в выводе выше есть «JS runtime: deno-…» то значит все хорошо.

Шаг №15: Пробую скачать понравившееся видео для последующего разбора если это процесс как что-то делать и не зависеть каждый раз от возможности доступа к ресурсу, так сказать в Offline режиме изучаем:

На заметку: Т.к. из России доступ к Youtube-контенту закрыт, то мне на помощь приходит заметка: "Выход в интернет из ЛВС через связку Ubuntu 24.04 + Xfce + AmneziaVPN Client"

ekzorchik@srv-us2604a:~$ yt-dlp --cookies cookies.txt --extractor-args "youtube:player-client=web_embedded,web,tv" https://www.youtube.com/watch?v=aqz-KE-bpKQ

[youtube] Extracting URL: https://www.youtube.com/watch?v=aqz-KE-bpKQ

[youtube] aqz-KE-bpKQ: Downloading webpage

[youtube] aqz-KE-bpKQ: Downloading web embedded client config

[youtube] aqz-KE-bpKQ: Downloading player 3891b194-main

[youtube] aqz-KE-bpKQ: Downloading web embedded player API JSON

[youtube] aqz-KE-bpKQ: Downloading web client config

[youtube] aqz-KE-bpKQ: Downloading web player API JSON

[youtube] aqz-KE-bpKQ: Downloading tv client config

[youtube] aqz-KE-bpKQ: Downloading tv player API JSON

[youtube] [jsc:deno] Solving JS challenges using deno

[info] aqz-KE-bpKQ: Downloading 1 format(s): 401+258

[download] Resuming download at byte 61474926

[download] Destination: Big Buck Bunny 60fps 4K - Official Blender Foundation Short Film [aqz-KE-bpKQ].f401.mp4

[download] 100% of  679.44MiB in 00:02:54 at 3.90MiB/s

[download] Destination: Big Buck Bunny 60fps 4K - Official Blender Foundation Short Film [aqz-KE-bpKQ].f258.m4a

[download] 100% of   29.34MiB in 00:00:05 at 5.06MiB/s

[Merger] Merging formats into "Big Buck Bunny 60fps 4K - Official Blender Foundation Short Film [aqz-KE-bpKQ].mp4"

Deleting original file Big Buck Bunny 60fps 4K - Official Blender Foundation Short Film [aqz-KE-bpKQ].f258.m4a (pass -k to keep)

Deleting original file Big Buck Bunny 60fps 4K - Official Blender Foundation Short Film [aqz-KE-bpKQ].f401.mp4 (pass -k to keep)

ekzorchik@srv-us2604a:~$

А теперь небольшие пояснения по используемым аргументам:

yt-dlp -> Запускает программу yt-dlp

--cookies cookies.txt -> Загружает cookies из файла cookies.txt

--extractor-args "..." -> Передаёт дополнительные настройки экстрактору YouTube

youtube: -> Эти настройки относятся именно к экстрактору YouTube

player-client=web_embedded,web,tv -> Указывает yt-dlp использовать несколько типов клиентов YouTube

URL -> Ссылка на видео, которое нужно обработать

На заметку: YouTube по-разному отвечает различным типам клиентов. Иногда один клиент может получить информацию или форматы, которые другой клиент не возвращает или для которых возникают ограничения. Поэтому команда явно задаёт несколько player-client.

Шаг №16: Проверяя все еще раз (на 20.08.2026) перед тем как опубликовать текущую заметку, столкнулся что при указании ключа "-U", пишет, что есть новая версия:

ekzorchik@srv-us2604a:~$ yt-dlp -U

Current version: stable@2026.07.04 from yt-dlp/yt-dlp

Latest version: stable@2026.08.19 from yt-dlp/yt-dlp

ERROR: You installed yt-dlp with pip or using the wheel from PyPi; Use that to update

ekzorchik@srv-us2604a:~$

но и обновлять я, должен находясь в виртуальном окружении python:

ekzorchik@srv-us2604a:~$ cd yt-dlp/

ekzorchik@srv-us2604a:~/yt-dlp$ source bin/activate

(yt-dlp) ekzorchik@srv-us2604a:~/yt-dlp$

(yt-dlp) ekzorchik@srv-us2604a:~/yt-dlp$ python3 -m pip install -U "yt-dlp[default]"

Installing collected packages: yt-dlp

  Attempting uninstall: yt-dlp

    Found existing installation: yt-dlp 2026.7.4

    Uninstalling yt-dlp-2026.7.4:

      Successfully uninstalled yt-dlp-2026.7.4

Successfully installed yt-dlp-2026.8.19

(yt-dlp) ekzorchik@srv-us2604a:~/yt-dlp$ yt-dlp --version

2026.08.19

(yt-dlp) ekzorchik@srv-us2604a:~/yt-dlp$ deactivate

ekzorchik@srv-us2604a:~/yt-dlp$ cd ~/

ekzorchik@srv-us2604a:~$

Шаг №17: Проверяю, а работает ли скачиванием Youtubeмедиа контента — ответ да:

На заметку: Я использую доступ к Youtube через прокси, который у меня поднят на VPS системы площадки Германии посредством инструмента 3proxy, как такое сделать смотрите заметки блога https://lin.ekzorchik.ru

ekzorchik@srv-us2604a:~$ yt-dlp -4 --proxy http://VPS_WAN_IP:PORT --extractor-args "youtube:player-client=web_embedded,web,tv" -x --audio-format mp3 https://youtu.be/B5tmUu4iLeg

[youtube] Extracting URL: https://youtu.be/B5tmUu4iLeg

[youtube] B5tmUu4iLeg: Downloading webpage

[youtube] B5tmUu4iLeg: Downloading web embedded client config

[youtube] B5tmUu4iLeg: Downloading player 3891b194-main

[youtube] B5tmUu4iLeg: Downloading web embedded player API JSON

[youtube] B5tmUu4iLeg: Downloading tv client config

[youtube] B5tmUu4iLeg: Downloading tv player API JSON

[youtube] [jsc:deno] Solving JS challenges using deno

[info] B5tmUu4iLeg: Downloading 1 format(s): 251

[download] Destination: КЛЯТВА ДЕМОНА — Лермонтов | Dark Melodic Techno [B5tmUu4iLeg].webm

[download] 100% of    9.34MiB in 00:00:04 at 1.89MiB/s

[ExtractAudio] Destination: КЛЯТВА ДЕМОНА — Лермонтов | Dark Melodic Techno [B5tmUu4iLeg].mp3

Deleting original file КЛЯТВА ДЕМОНА — Лермонтов | Dark Melodic Techno [B5tmUu4iLeg].webm (pass -k to keep)

ekzorchik@srv-us2604a:~$

Что имеем по итогу, это переработанная заметка, где я собрал все действия от и до дабы заработало мое самообучение на основе инструмента yt-dlp на доступ к Offline мультимедийному контенту, который теперь скачивается и уже после изучается. По мере сталкивания с различными нюансами заметка будет дополняться или писаться как продолжение.

На этом, ну можно сказать, до встречи, с уважением автор ekzorchik.