! Инструкция не закончена!
yt-dlp.exe -f bestvideo+bestaudio —merge-output-format mp4
Статьи на habr Часть 1 Часть 2 Обвиваем YouTube змеем, или как смотреть и скачивать видео с YouTube без VPN на чистом Python-е.
Запускаем PowerShell или Терминал от имени администратора Создаем папку C:\yt_dw и пустые файлы в ней
New-Item -Path "C:\yt_dw" -ItemType Directory -Force; New-Item -Path "C:\yt_dw\blacklist.txt", "C:\yt_dw\yt_downloader.py", "C:\yt_dw\yt_downloader2.py" -ItemType File -Force
Копируем в blacklist.txt список доменов Youtube
youtube.com
youtu.be
yt.be
googlevideo.com
ytimg.com
ggpht.com
gvt1.com
youtube-nocookie.com
youtube-ui.l.google.com
youtubeembeddedplayer.googleapis.com
youtube.googleapis.com
youtubei.googleapis.com
yt-video-upload.l.google.com
wide-youtube.l.google.com
Устанавливаем Python
winget install 9NQ7512CXL7T
Копируем код в yt_downloader.py (Скачать видео в 360p)
import random
import asyncio
BLOCKED = [line.rstrip().encode() for line in open('blacklist.txt', 'r', encoding='utf-8')]
TASKS = []
async def main(host, port):
server = await asyncio.start_server(new_conn, host, port)
await server.serve_forever()
async def pipe(reader, writer):
while not reader.at_eof() and not writer.is_closing():
try:
writer.write(await reader.read(1500))
await writer.drain()
except:
break
writer.close()
async def new_conn(local_reader, local_writer):
http_data = await local_reader.read(1500)
try:
type, target = http_data.split(b"\r\n")[0].split(b" ")[0:2]
host, port = target.split(b":")
except:
local_writer.close()
return
if type != b"CONNECT":
local_writer.close()
return
local_writer.write(b'HTTP/1.1 200 OK\n\n')
await local_writer.drain()
try:
remote_reader, remote_writer = await asyncio.open_connection(host, port)
except:
local_writer.close()
return
if port == b'443':
await fragemtn_data(local_reader, remote_writer)
TASKS.append(asyncio.create_task(pipe(local_reader, remote_writer)))
TASKS.append(asyncio.create_task(pipe(remote_reader, local_writer)))
async def fragemtn_data(local_reader, remote_writer):
head = await local_reader.read(5)
data = await local_reader.read(1500)
parts = []
if all([data.find(site) == -1 for site in BLOCKED]):
remote_writer.write(head + data)
await remote_writer.drain()
return
while data:
part_len = random.randint(1, len(data))
parts.append(bytes.fromhex("1603") + bytes([random.randint(0, 255)]) + int(
part_len).to_bytes(2, byteorder='big') + data[0:part_len])
data = data[part_len:]
remote_writer.write(b''.join(parts))
await remote_writer.drain()
asyncio.run(main(host='127.0.0.1', port=8881))Устанавливаем библиотеку pytubefix
py -m pip install pytubefix