LINUX.ORG.RU

Скачивание видео с ютуб, через yt_dlp + прокси

 ,


1

2

Ubunto

Установил shadowsocks-libev, конфиг

{
    "server": "0.0.0.0",     
    "server_port": 8388,
    "local_address": "127.0.0.1",
    "local_port": 1080,
    "password": "your_password",
    "method": "chacha20-ietf-poly1305",
    "timeout": 300
}
curl -v --proxy socks5://root:your_password@92.63.***.***:8388 https://www.google.com
*   Trying 92.63.***.***:8388...
* Connected to 92.63.***.** (92.63.***.***) port 8388

Соединение зависает

 nc -vz 92.63.***.*** 8388
Connection to 92.63.***.*** 8388 port [tcp/*] succeeded!

Вероятно дело в авторизации, попробовал еще один вариант

wget -e use_proxy=yes -e http_proxy=socks5h://root:your_password@92.63.***.***:8388 https://www.google.com

Он сработал, скачал index гугл страницы. Ок

Далее, необходимо через yt_dlp, скачать видео. Написал скрипт, закинул на сервер

ydl_opts = {
    'format': 'bv+ba/best',  # Лучшее видео + лучший звук
    'outtmpl': "/var/rJNBGqiBI7s",  # Путь сохранения
    'merge_output_format': 'mp4',  # Объединение видео и аудио
    'postprocessors': [{
        'key': 'FFmpegVideoConvertor',
        'preferedformat': 'mp4',  # Конвертация в MP4
    }]
}

# Скачивание
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    ydl.download(["https://www.youtube.com/watch?v=rJNBGqiBI7s"])

Ок, видео загружено. Подитожим

Есть сервер, запуская скрипт на нем, возможно скачать видео. Далее на этом сервере, установил shadowsocks. Открыл порт, из вне доступен. Через CURL, зависает соединение. Через wget, соединение есть. Страницу получаем

То есть, со своего пк, в терминале выполняю команду

wget -e use_proxy=yes -e http_proxy=socks5h://root:your_password@92.63.***.***:8388 https://www.google.com

На удаленный сервер и удаленный сервер скачивает. Не знаю почему но с курл у меня так ничего не вышло.

Далее. Мне необходимо запустить скрипт для скачивания видео с ютуб, скрипт запускаю на своем пк, а скачать видео необходимо через удаленный прокси сервер. Поскольку доступа к ютубу с моего пк нету…

Мой вариант

import sys, yt_dlp

# Настройки загрузки
print(sys.argv[1])
ydl_opts = {
    'proxy': 'socks5h://root:your_password@92.63.***.***:8388',
    'format': 'bv+ba/best',  # Лучшее видео + лучший звук
    'outtmpl': "/var/rJNBGqiBI7s",  # Путь сохранения
    'merge_output_format': 'mp4',  # Объединение видео и аудио
    'postprocessors': [{
        'key': 'FFmpegVideoConvertor',
        'preferedformat': 'mp4',  # Конвертация в MP4
    }]
}

# Скачивание
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    ydl.download(["https://www.youtube.com/watch?v=rJNBGqiBI7s"])
[youtube] Extracting URL: https://www.youtube.com/watch?v=rJNBGqiBI7s
[youtube] rJNBGqiBI7s: Downloading webpage
WARNING: [youtube] Unable to download webpage: timed out
[youtube] rJNBGqiBI7s: Downloading tv client config

Подскажите, как верно настроить прокси, так чтобы возможно было скачать видео через yt_dlp. Кажется все варианты и форумы перелазал… Только на вас надежда…


Ответ на: комментарий от ugoday

sudo adduser zuldek

Добавил пользователя, далее перезапустил sudo systemctl restart shadowsocks-libev

Далее

nc -vz 92.63.***.*** 8388
Connection to 92.63.***.*** 8388 port [tcp/*] succeeded!

Далее

curl -v --proxy socks5h://zuldek:your_password@92.63.***.***:8388 https://www.google.com
*   Trying 92.63.***.***:8388...
* Connected to 92.63.***.*** (92.63.***.***) port 8388

Просто зависает на этом и все, а если

wget -e use_proxy=yes -e http_proxy=socks5h://zuldek:your_password@92.63.***.***:8388 https://www.google.com

Скачать видео через прокси, при помощи yt_dlp. Все так же не удается…

Zuldek
() автор топика
Ответ на: комментарий от Zuldek

wget -e use_proxy=yes -e http_proxy=socks5h://zuldek:your_password@92.63.***.***:8388 https://www.google.com

То есть через данную команду, при подключении к удаленному серверу, удается подгрузить страницу

Zuldek
() автор топика
Ответ на: комментарий от Zuldek

Что необходимо выполнить, чтобы через curl заработало? Вероятно, что если заработает через curl, то yt_dlp скачает через третий сервер.

Просто не знаю как yt_dlp, работает, быть может кто сталкивался, может подскажет?

Zuldek
() автор топика

Всё смешалось - люди, кони…

«server»: «0.0.0.0»,

На сервере такая строка правильная. На клиенте это должен быть ip сервера. Не нули, не 127. Судя по всему в вашем случае - 92.63.***.***

curl -v –proxy socks5://root:your_password@92.63.***.***:8388 https://www.google.com

Нет. Указываем локальный прокси, который поднимает клиент shadowsocks, а не коннектимся к серверу. curl про протокол shadowsocks ничего не знает.

curl -v --proxy socks5://127.0.0.1:1080 https://www.google.com

ALiEN175
()
Ответ на: комментарий от ALiEN175

Необходимо

curl -v --proxy socks5://127.0.0.1:1080 https://www.google.com

Выполнить команду, со своего пк, на удаленный сервер. Подключиться к удаленному серверу и скачать страницу гуг, ну или не скачать. Просто понять, что все работает.

В вашем примере, так делается на локальном сервере, необходимо конектиться к удаленному.

Что та слышал про ssh тунель, разве не это необходимо применять в yt_dlp?

Zuldek
() автор топика
Ответ на: комментарий от Zuldek

Что не так делаю

Ты пытаешься установить соединение к shadowsocks-серверу по протоколу socks, а это большая разница. Леопард и морской леопард тоже имеют общее слово в названии, но кардинально отличаются.

Dimez ★★★★★
()
wget -e use_proxy=yes -e http_proxy=socks5h://root:your_password@92.63.***.***:8388 https://www.google.com

Он сработал, скачал index гугл страницы. Ок

Не ок, не сработал, скачал напрямую, это можно было видеть из выхлопа wget.

Dimez ★★★★★
()
Ответ на: комментарий от Zuldek

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

Это делает caм shadowsocks! А вы к нему подключаетесь с помощью локального прокси.

Проверьте айпишник:

curl --proxy socks5://127.0.0.1:1080 ifconfig.io
ALiEN175
()
Ответ на: комментарий от anonymous

Ура, все получилось. Понял что на обоих серверах необходимо устанавливать,не на прямую подключаться, ну да ладно.

Удалил и там и тут, использовал ssh -D 1080 -C -N zuldek@92.63.***.***

Проще простого чем казалось.

Только вот после подключения, ввода пароля, ок. Запускаю второй терминал для того чтобы запустить скрипт.

Вопрос в том, после

ssh -D 1080 -C -N zuldek@92.63.***.***

Возможно ли это как то в фоне запустить и закрыть терминал, мол чтобы соединение было всегда?

Zuldek
() автор топика

Подскажите, как верно настроить прокси, так чтобы возможно было скачать видео через yt_dlp

А если все операции по скачивания видео производить на удалённом сервере, а уже потом скачивать себе готовое видео?

Алсо, есть клиенты ютуба с поддержкой прокси

pihter ★★★★★
()
Ответ на: комментарий от Zuldek

Возможно ли это как то в фоне запустить и закрыть терминал, мол чтобы соединение было всегда?

Я себе systemd unit написал для этих целей и пробрасываю 2 порта. Само стартует, само перезапускается, вообще думать не надо.

[Unit]
Description=Persistent SSH Tunnel from port 32400 on this server to port 32400 on the VPS.
After=network.target

[Service]
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/ssh -i /home/user/.ssh/id_rsa -NTC -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -R vps-ip:32400:0.0.0.0:32400 -R vps-ip:4533:0.0.0.0:4533 root@vps-ip -p port

[Install]
WantedBy=multi-user.target
Loki13 ★★★★★
()

Чтобы качать Youtube из Этой Страны, не нужны никакие свои сервера и shadowsocks.

Для этого есть byedpi и аналогичные программы для любых платформ.

Убыстрить ютуб (комментарий)

И скрипты никакие не нужно писать, есть удобная GUI-прога Tartube.

Либо подключиться к byedpi по инструкции выше, либо прошить роутер и тогда настройка downloader’ов вообще не требуется.

Убыстрить ютуб (комментарий)

Но это если хочется бесплатно сделать самоделку. А если не жалко денег на аренду сервера, то лучше на них купить нормальную готовую VPN. Стоит столько же, либо дешевле. И не надо верить слухам, что они побанены, они работают. То, что на протоколе VLESS точно работает. Да и даже OpenVPN может работать, есть патч (openvpn xor patch) но тут надо уточнять у провайдера.

anonymous
()