Как скачать ютуб шортс на python?

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

import yt_dlp

def download_youtube_shorts(video_url, output_file='output.mp4'):
    ydl_opts = {
        'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4',
        'outtmpl': output_file,
        # 'cookies': 'cookies.txt', 
        'user-agent': 'Mozilla/5.0 (Linux; Android 10; Mobile; rv:83.0) Gecko/83.0 Firefox/83.0',
        'nocheckcertificate': True,
        'socket_timeout': 60,
        'retries': 10,
        'no-mtime': True,
        'hls_use_mpegts': True, 
        'hls_prefer_native': True,
        'merge_output_format': 'mp4',
    }

    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        try:
            info = ydl.extract_info(video_url, download=True)
            print(f"Видео успешно скачано! Название: {info['title']}")
        except Exception as e:
            print(f"Произошла ошибка при загрузке видео: {e}")

if __name__ == "__main__":
    youtube_shorts_url = ''  # ссылка
    download_youtube_shorts(youtube_shorts_url)

В логах получаю следующее:

[youtube] Extracting URL: https://www.youtube.com/shorts/awbv4Yf9rZQ
[youtube] awbv4Yf9rZQ: Downloading webpage
[youtube] awbv4Yf9rZQ: Downloading ios player API JSON
[youtube] awbv4Yf9rZQ: Downloading mweb player API JSON
[youtube] awbv4Yf9rZQ: Downloading m3u8 information
[info] awbv4Yf9rZQ: Downloading 1 format(s): 614+140
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 10
[download] Destination: output.f614.mp4
[download] Got error: HTTPSConnectionPool(host='rr6---sn-gvnuxaxjvh-304s.googlevideo.com', port=443): Read timed out. (read timeout=60.0). Retrying (1/10)...

Также проверял скрипт на другом интернет соединении и результат тот же.


Ответы (1 шт):

Автор решения: Fox Fox

Ваш код выдаёт такую ошибку:

[youtube] Extracting URL: https://youtu.be/opEHHiF3_KM
[youtube] opEHHiF3_KM: Downloading webpage
[youtube] opEHHiF3_KM: Downloading ios player API JSON
[youtube] opEHHiF3_KM: Downloading mweb player API JSON
[youtube] opEHHiF3_KM: Downloading player 2f238d39
[youtube] opEHHiF3_KM: Downloading m3u8 information
[info] Testing format 609
[info] opEHHiF3_KM: Downloading 1 format(s): 609+140
ERROR: You have requested merging of multiple formats but ffmpeg is not installed. Aborting due to --abort-on-error
Произошла ошибка при загрузке видео: ERROR: You have requested merging of multiple formats but ffmpeg is not installed. Aborting due to --abort-on-error
Press any key to continue . . .

Вы перемудрили с опциями. Мой код работает:

import yt_dlp
import os

# URL видео YouTube Shorts
url = 'https://youtu.be/opEHHiF3_KM'

# Настройки для загрузки
ydl_opts = {
    'format': 'best',  # Выбор лучшего качества
    'outtmpl': '%(title)s.%(ext)s',  # Шаблон имени файла
}

# Скачивание видео
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    ydl.download([url])

os.system("pause")
→ Ссылка