1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-youtube-downloader

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Статус сборки

youtube-dl - загрузка видео с youtube.com или других видео-платформ

УСТАНОВКА

Чтобы установить его сразу для всех UNIX пользователей (Linux, macOS и т.д.), введите:

sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

Если у вас нет curl, вы можете альтернативно использовать последнюю версию wget:

sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

Пользователи Windows могут скачать .exe файл и поместить его в любое место на их PATH, кроме %SYSTEMROOT%\System32 (например, не устанавливайте в C:\Windows\System32).

Вы также можете использовать pip:

sudo -H pip install --upgrade youtube-dl

Эта команда обновит youtube-dl, если вы уже установили его. Дополнительная информация доступна на странице pypi.

Пользователи macOS могут установить youtube-dl с помощью Homebrew: brew install youtube-dl

Или с помощью MacPorts:

sudo port install youtube-dl

В качестве альтернативы, обратитесь к инструкциям для разработчиков для получения информации о том, как проверять и работать с репозиторием git. Для дополнительных опций, включая PGP подписи, см. страницу загрузки youtube-dl.# ОПИСАНИЕ youtube-dl - это командная строковая программа для загрузки видео с YouTube.com и нескольких других сайтов. Она требует интерпретатора Python версии 2.6, 2.7 или 3.2+. Программа не имеет платформенных ограничений и должна работать на вашем Unix-компьютере, Windows или macOS. Программа выпущена в общественное достояние, что означает, что вы можете модифицировать её, распространять или использовать её по своему усмотрению.

youtube-dl [ПАРАМЕТРЫ] URL [URL...]

ПАРАМЕТРЫ

-h, --help                           Вывести это справочное сообщение и завершить выполнение
--version                            Вывести версию программы и завершить выполнение
-U, --update                         Обновить эту программу до последней версии. Убедитесь, что у вас есть достаточные права доступа (запустите с помощью sudo, если необходимо)
-i, --ignore-errors                  Продолжать загрузку, несмотря на ошибки, например, чтобы пропустить недоступные видео в плейлисте
--abort-on-error                     При возникновении ошибки прервать загрузку следующих видео (в плейлисте или на командной строке)
--dump-user-agent                    Отобразить текущее браузерное идентификационное имя
--list-extractors                    Перечислить все поддерживаемые извлечения
--extractor-descriptions             Вывести описания всех поддерживаемых извлечений
--force-generic-extractor           Принудительно использовать общий извлечник
```     --default-search PREFIX              Использовать этот префикс для неквалифицированных URL. Например, "gvsearch2:" загружает два видео с Google Videos для youtube-dl "large apple". Используйте значение "auto", чтобы позволить youtube-dl угадывать ("auto_warning" для вывода предупреждения при угадывании). "error" просто выбрасывает ошибку. Значение по умолчанию "fixup_error" исправляет сломанные URL, но выбрасывает ошибку, если это невозможно, вместо поиска.
      --ignore-config                      Не читать конфигурационные файлы. Когда задано в глобальном конфигурационном файле /etc/youtube-dl.conf: не читать конфигурацию пользователя в ~/.config/youtube-dl/config                                         (%APPDATA%/youtube-dl/config.txt на
                                           Windows)
      --config-location ПУТЬ               Путь к файлу конфигурации; либо путь
                                           к конфигу, либо к папке, содержащей
                                           его.
      --flat-playlist                      Не извлекать видео из плейлиста,
                                           а только перечислять их.
      --mark-watched                       Помечать видео как просмотренные
                                           (только для YouTube).
      --no-mark-watched                    Не помечать видео как просмотренные
                                           (только для YouTube).
      --no-color                           Не выводить коды цвета в вывод. ## Опции сети:
     --proxy URL                          Использовать указанный HTTP/HTTPS/SOCKS
                                          прокси. Для включения SOCKS прокси,
                                          укажите правильную схему. Например,                                         socks5://127.0.0.1:1080/. Передайте
                                          пустую строку (--proxy "") для
                                          прямого подключения
     --socket-timeout SECONDS             Время ожидания перед отменой, в
                                          секундах
     --source-address IP                  IP-адрес клиента для привязки
     -4, --force-ipv4                     Выполнять все подключения через IPv4
     -6, --force-ipv6                     Выполнять все подключения через IPv6## Географическое ограничение:
     --geo-verification-proxy URL         Использовать этот прокси для
                                          проверки IP-адреса для некоторых
                                          сайтов с географическим ограничением.
                                          По умолчанию используется прокси,
                                          указанный опцией --proxy (или
                                          отсутствует, если опция не указана),
                                          для фактической загрузки.
     --geo-bypass                         Пропускать географическое
                                          ограничение путем подделки HTTP-заголовка
                                          X-Forwarded-For
     --no-geo-bypass                      Не пропускать географическое
                                          ограничение путем подделки HTTP-заголовка
                                          X-Forwarded-For
     --geo-bypass-country CODE            Пропускать географическое
                                          ограничение с явно указанным двухбуквенным
                                          кодом страны ISO 3166-1
     --geo-bypass-ip-block IP_BLOCK       Пропускать географическое
                                          ограничение с явно указанным блоком IP
                                          в формате CIDR

## Выбор видео:
      --playlist-start ЧИСЛО              Видео в плейлисте для начала (по умолчанию 1)
      --playlist-end ЧИСЛО                Видео в плейлисте для завершения (по умолчанию последнее)
      --playlist-items ITEM_SPEC          Видео в плейлисте для загрузки.Укажите индексы видео в плейлисте, разделённые запятыми, например: "--playlist-items 1,2,5,8", если вы хотите загрузить видео с индексами 1, 2, 5, 8 в плейлисте. Вы можете указать диапазон: "--playlist-items 1-3,7,10-13", это загрузит видео с индексами 1, 2, 3, 7, 10, 11, 12 и 13.
      --match-title РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ Загрузить только те видео, названия которых соответствуют этому регулярному выражению или безразличному подстроковому поиску
      --reject-title РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ Пропустить загрузку для видео, названия которых соответствуют этому регулярному выражению или безразличному подстроковому поиску
      --max-downloads ЧИСЛО               Прекратить загрузку после загрузки ЧИСЛА файлов
      --min-filesize РАЗМЕР               Не загружать видео, размер которых меньше РАЗМЕРА (например, 50k или 44.6m)
      --max-filesize РАЗМЕР               Не загружать видео, размер которых больше РАЗМЕРА (например, 50k или 44.6m)
      --date ДАТА                         Загрузить только видео, загруженные в эту дату
      --datebefore ДАТА                   Загрузить только видео, загруженные до или в эту дату (включительно)
      --dateafter ДАТА                    Загрузить только видео, загруженные после или в эту дату (включительно)
      --min-views КОЛИЧЕСТВО             Не загружать видео, у которых меньше КОЛИЧЕСТВА просмотров
      --max-views КОЛИЧЕСТВО             Не загружать видео, у которых больше КОЛИЧЕСТВА просмотров
      --match-filter ФИЛЬТР              Общий фильтр видео. Укажите любой ключ (см."Шаблон вывода" для списка доступных ключей) для проверки наличия ключа,
key для проверки отсутствия ключа,
key > ЧИСЛО (например, "comment_count > 12",
также работает с >=, <, <=, !=, =) для сравнения с числом,
key = 'ЛИТЕРАЛ' (например, "uploader = 'Mike Smith'",
также работает с !=) для проверки соответствия строковому литералу и &
для требований к нескольким ключам. Значения, которые неизвестны,
исключаются, если вы не поставите вопросительный знак (?)
после оператора. Например, чтобы выбрать видео,
которые были лайкнуты более 100 раз и дизлайкнуты менее 50 раз
(или функция дизлайка недоступна на данном сервисе),
но которые также имеют описание, используйте
--match-filter "like_count > 100 & dislike_count <? 50 & description" .
      --no-playlist                        Скачивать только видео, если URL
                                           ссылается на видео и плейлист.
      --yes-playlist                       Скачивать плейлист, если URL
                                           ссылается на видео и плейлист.
      --age-limit ЛЕТ                     Скачивать только видео, подходящие для
                                           указанного возраста
      --download-archive ФАЙЛ             Скачивать только видео, не указанные в                                          архивном файле. Записывать идентификаторы всех
                                           скачанных видео в него.
      --include-ads                        Скачивать рекламу (экспериментальная)
      -r, --limit-rate СКОРОСТЬ           Максимальная скорость загрузки в байтах
                                           в секунду (например, 50K или 4.2M)
      -R, --retries ПОПЫТКИ               Количество попыток (по умолчанию 10), или
                                           "бесконечно".
      --fragment-retries ПОПЫТКИ          Количество попыток для фрагмента
                                           (по умолчанию 10), или "бесконечно" (DASH,
                                           hlsnative и ISM)
      --skip-unavailable-fragments         Пропуск недоступных фрагментов (DASH,
                                           hlsnative и ISM)
      --abort-on-unavailable-fragment      Прерывание загрузки, если какой-либо фрагмент
                                           недоступен
      --keep-fragments                     Сохранение загруженных фрагментов на диске после
                                           завершения загрузки; фрагменты удаляются по умолчанию
      --buffer-size РАЗМЕР                Размер буфера загрузки (например, 1024 или
                                           16K) (по умолчанию 1024)
      --no-resize-buffer                   Не изменять автоматически размер буфера. По умолчанию,
                                           размер буфера автоматически изменяется с начального
                                           значения РАЗМЕР.
      --http-chunk-size РАЗМЕР            Размер блока для блочного HTTP-загрузки                                          (например, 10485760 или 10M) (по умолчанию отключено).
                                           Может быть полезен для обхода ограничений скорости,
                                           накладываемых веб-сервером (экспериментальный).
      --playlist-reverse                   Загрузка видео плейлиста в обратном порядке.
      --playlist-random                    Загрузка видео плейлиста в случайном порядке.
      --xattr-set-filesize                 Установка атрибута файла ytdl. filesize с
                                           ожидаемым размером файла.
      --hls-prefer-native                  Использование встроенного загрузчика HLS вместо
                                           ffmpeg.
      --hls-prefer-ffmpeg                  Использование ffmpeg вместо встроенного загрузчика HLS.
      --hls-use-mpegts                     Использовать контейнер mpegts для видео HLS,
                                           что позволяет воспроизводить видео во время его загрузки (некоторые плееры могут не поддерживать воспроизведение).
      --external-downloader COMMAND        Использовать указанный внешний загрузчик.
                                           В настоящее время поддерживаются aria2c, avconv, Axel, curl, ffmpeg, httpie, wget.
      --external-downloader-args ARGS      Передавать эти аргументы внешнему загрузчику.
## Опции файловой системы:
      -a, --batch-file FILE                Файл, содержащий URL-ы для загрузки ('-'
                                           для стандартного ввода), один URL на строку. Строки, начинающиеся с '#', ';' или ']', считаются комментариями и игнорируются.     --id                                 Использовать только идентификатор видео в имени файла
      -o, --output TEMPLATE                Шаблон имени выходного файла, см. раздел "OUTPUT TEMPLATE" для получения всей информации
      --output-na-placeholder PLACEHOLDER  Заполнитель для недоступных метаданных в шаблоне имени выходного файла (по умолчанию "NA")
      --autonumber-start NUMBER            Указать начальное значение для %(autonumber)s (по умолчанию 1)
      --restrict-filenames                 Ограничить имена файлов только ASCII символами, и избегать '&' и пробелов в именах файлов
      -w, --no-overwrites                  Не перезаписывать файлы
      -c, --continue                       Принудительно возобновить частично загруженные файлы. По умолчанию youtube-dl будет возобновлять загрузки, если это возможно.
      --no-continue                        Не возобновлять частично загруженные файлы (начать сначала)
      --no-part                            Не использовать .part файлы - записывать напрямую в выходной файл
      --no-mtime                           Не использовать заголовок Last-modified для установки времени модификации файла
      --write-description                  Записать описание видео в файл .description
      --write-info-json                    Записать метаданные видео в файл .info.json
      --write-annotations                  Записать аннотации видео в файл .annotations.xml
      --load-info-json FILE                JSON файл, содержащий информацию о видео (создан с помощью опции "--write-info-json")
      --cookies FILE                       Файл для чтения cookies и временного хранения cookie-файла
                                           cookie jar     --cache-dir DIR                      Расположение в файловой системе, где youtube-dl может временно хранить некоторые загруженные данные. По умолчанию $XDG_CACHE_HOME/youtube-dl или ~/.cache/youtube-dl. В настоящее время кэшируются только файлы YouTube-плеера (для видео с зашифрованными подписями), но это может измениться.
      --no-cache-dir                       Отключить кэширование файловой системы
      --rm-cache-dir                       Удалить все файлы кэширования файловой системы## Опции миниатюр:
     --write-thumbnail                    Записать миниатюру на диск
     --write-all-thumbnails               Записать все форматы миниатюр на диск
     --list-thumbnails                    Симулировать и вывести все доступные
                                          форматы миниатюр## Параметры подробности / Симуляции:
      -q, --тихий-режим                    Включить тихий режим
      --игнорировать-предупреждения        Игнорировать предупреждения
      -s, --симулировать                   Не скачивать видео и не записывать ничего на диск
      --пропустить-скачивание              Не скачивать видео
      -g, --получить-url                   Симулировать, тихий режим, но вывести URL
      -e, --получить-название              Симулировать, тихий режим, но вывести название
      --получить-id                        Симулировать, тихий режим, но вывести ID
      --получить-миниатюру                 Симулировать, тихий режим, но вывести URL миниатюры
      --получить-описание                  Симулировать, тихий режим, но вывести описание видео     --get-duration               Симулировать, тихий режим, но вывести длительность видео
      --get-file-name              Симулировать, тихий режим, но вывести имя выходного файла
      --get-format                 Симулировать, тихий режим, но вывести выходной формат
      -j, --output-json           Симулировать, тихий режим, но вывести информацию в формате JSON. См. "ШАБЛОН ВЫХОДНЫХ ДАННЫХ" для описания доступных ключей.
      -J, --output-single-json    Симулировать, тихий режим, но вывести информацию в формате JSON для каждого аргумента командной строки. Если URL относится к плейлисту, вывести всю информацию о плейлисте в одной строке.
      --output-json               Будьте тихими и выведите информацию о видео в формате JSON (видео всё ещё скачивается).
      --new-line                   Выводить прогресс-бар новыми строками
      --no-progress                Не выводить прогресс-бар
      --console-title              Отображать прогресс в заголовке окна консоли
      -v, --verbose-mode          Выводить различные данные отладки
      --output-pages              Вывести загруженные страницы, закодированные с помощью base64 для отладки проблем (очень подробно)
      --write-pages               Записать загруженные промежуточные страницы в текущей директории для отладки
                                 проблем     --print-traffic                      Отображать отправленный и полученный HTTP-трафик
      -C, --call-home                      Обращаться к серверу youtube-dl для отладки
      --no-call-home                       Не обращаться к серверу youtube-dl для отладки## Обходные решения:
     --encoding КОДИРОКА                  Принудительно задать указанный формат кодировки
                                          (экспериментальный)
     --no-check-certificate                Отключить проверку сертификата при HTTPS
     --prefer-insecure                     Использовать незашифрованный соединение для получения информации о видео.
                                          (Поддерживается только для YouTube)
     --user-agent UA                       Указать пользовательский агент
     --referer URL                         Указать пользовательский referer, использовать если доступ к видео ограничен определенным доменом
     --add-header ПОЛЯ:ЗНАЧЕНИЕ           Указать пользовательский HTTP-заголовок и его значение, разделенные двоеточием ':'. 
                                          Эту опцию можно использовать несколько раз
     --bidi-workaround                     Обойти терминалы, которые не поддерживают двунаправленный текст. Требуется выполнение bidiv или fribidi.
     --sleep-interval SEКУНД              Количество секунд для ожидания перед каждым загрузкой, когда используется в одиночку или нижняя граница диапазона для случайного ожидания перед каждой загрузкой (минимальное возможное количество секунд для ожидания).    --max-sleep-interval СЕКУНД         Верхняя граница диапазона для случайного ожидания перед каждой загрузкой (максимальное возможное количество секунд для ожидания).
                                          Должна использоваться только вместе с --min-sleep-interval. ## Опции формата видео:
     -f, --format FORMAT                  Код формата видео, см. раздел "ВЫБОР
                                          ФОРМАТА" для всех сведений
     --all-formats                        Скачивать все доступные форматы видео
     --prefer-free-formats                Приоритет свободным форматам видео,
                                          если не указан конкретный формат
     -F, --list-formats                   Вывести все доступные форматы для
                                          запрошенных видео
     --youtube-skip-dash-manifest         Не скачивать манифесты DASH и
                                          связанные данные для видео YouTube
     --merge-output-format FORMAT         Если требуется объединение (например,
                                          bestvideo+bestaudio), выводить в
                                          указанном контейнерном формате.  Один
                                          из mkv, mp4, ogg, webm, flv.  Игнорируется,
                                          если объединение не требуется## Варианты субтитров:
     --write-sub                          Записать файл субтитров
     --write-auto-sub                     Записать автоматически сгенерированные субтитры
                                          (только для YouTube)
     --all-subs                           Скачать все доступные субтитры видео
     --list-subs                          Перечислить все доступные субтитры для видео    --sub-format FORMAT                  Формат субтитров, принимает предпочтения форматов, например: "srt" или
                                          "ass/srt/best"
     --sub-lang LANGS                     Языки субтитров для загрузки (необязательно), разделенные запятыми, используйте
                                          --list-subs для получения доступных языковых тегов## Варианты аутентификации:
    -u, --username USERNAME              Войти с этим идентификатором аккаунта
    -p, --password PASSWORD              Пароль аккаунта. Если этот параметр не указан, youtube-dl запросит пароль
                                         интерактивно.
    -2, --twofactor TWOFACTOR            Код двухфакторной аутентификации
    -n, --netrc                          Использовать данные аутентификации из .netrc
    --video-password PASSWORD            Пароль видео (vimeo, youku)## Варианты Adobe Pass:
     --ap-mso MSO                         Идентификатор Adobe Pass для нескольких систем (провайдер телевидения), используйте --ap-list-mso для получения списка всех поддерживаемых систем
     --ap-username USERNAME               Идентификатор входа для нескольких систем
     --ap-password PASSWORD               Пароль для нескольких систем. Если этот параметр не указан, youtube-dl запросит пароль интерактивно.
     --ap-list-mso                        Перечислить все поддерживаемые системы## Опции послепроцессинга:
      -x, --extract-audio                  Преобразование видеофайлов в аудиофайлы
                                           (требуется ffmpeg/avconv и
                                           ffprobe/avprobe)
      --audio-format FORMAT               Указание аудиоформата: "best", "aac",
                                           "flac", "mp3", "m4a", "opus", "vorbis",
                                           или "wav"; "best" по умолчанию; Без
                                           эффекта без -x
      --audio-quality QUALITY             Указание качества аудиофайлов ffmpeg/avconv,
                                           введите значение от 0 (лучше) до 9
                                           (хуже) для VBR или конкретную скорость
                                           битрейта, например 128K (по умолчанию 5)
      --recode-video FORMAT               Перекодировка видео в другой формат, если
                                           необходимо (поддерживаемые форматы:
                                           mp4|flv|ogg|webm|mkv|avi)
      --postprocessor-args ARGS           Передача этих аргументов постпроцессору
      -k, --keep-video                     Сохранение видеофайла на диске после                                          послепроцессинга; видеофайл удаляется по
                                           умолчанию
      --no-post-overwrites                 Не перезаписывать файлы после
                                           послепроцессинга; файлы после
                                           послепроцессинга перезаписываются по
                                           умолчанию
      --embed-subs                         Встраивание субтитров в видео (только для
                                           видеофайлов mp4, webm и mkv)
      --embed-thumbnail                    Встраивание миниатюры в аудиофайл как
                                           обложку
      --add-metadata                       Запись метаданных в видеофайл
      --metadata-from-title FORMAT         Парсинг дополнительных метаданных, таких
                                           как название песни / исполнитель, из
                                           названия видео. Синтаксис формата такой
                                           же, как --output. Также можно использовать
                                           регулярное выражение с именованными
                                           группами захвата. Распарсенные параметры
                                           заменяют существующие значения. Пример: --metadata-from-title
                                           "%(artist)s - %(title)s" соответствует
                                           названию вида "Coldplay - Paradise".
                                           Пример (регулярное выражение):
                                           --metadata-from-title
                                           "(?P<artist>.+?) - (?P<title>.+)"
      --xattrs                             Записывать метаданные в xattrs файла
                                          видео (используя стандарты Dublin Core
                                           и XDG)
      --fixup POLICY                       Автоматически исправлять известные
                                           дефекты файла. Один из never (ничего не
                                           делать), warn (только выводить
                                           предупреждение), detect_or_warn (по
                                           умолчанию; исправлять файл, если это
                                           возможно, предупреждать в противном
                                           случае)
      --prefer-avconv                      ПREFER avconv over ffmpeg для выполнения
                                           постпроцессинга
      --prefer-ffmpeg                      ПREFER ffmpeg over avconv для выполнения
                                           постпроцессинга (по умолчанию)
      --ffmpeg-location PATH               Расположение ffmpeg/avconv бинарника;
                                           либо путь к бинарнику, либо содержащая
                                           его директория.
      --exec CMD                           Выполнять команду на файле после
                                           загрузки и постпроцессинга, аналогично
                                           синтаксису -exec в find.
                                           Пример: --exec 'adb push {} /sdcard/Music/ && rm {}'
      --convert-subs FORMAT                Конвертировать субтитры в другой формат
                                           (текущие поддерживаемые: srt|ass|vtt|lrc)

# КОНФИГУРАЦИЯВы можете настроить youtube-dl, разместив любую поддерживаемую опцию командной строки в файле конфигурации. На Linux и macOS системный файл конфигурации расположен по адресу `/etc/youtube-dl.conf`, а пользовательский файл конфигурации — по адресу `~/.config/youtube-dl/config`. На Windows пользовательский файл конфигурации может находиться по адресу `%APPDATA%\youtube-dl\config.txt` или `C:\Users\<user name>\youtube-dl.conf`. Обратите внимание, что по умолчанию файл конфигурации может не существовать, поэтому вам может потребоваться создать его самостоятельно.

Например, с помощью следующего файла конфигурации youtube-dl всегда будет извлекать аудио, не копировать метку времени mtime, использовать прокси и сохранять все видео в директории `Movies` в домашней директории:

Строчки, начинающиеся с #, являются комментариями

Всегда извлекать аудио

-x

Не копировать метку времени mtime

--no-mtime

Использовать этот прокси

--proxy 127.0.0.1:3128

Сохранять все видео в директории Movies в домашней директории

-o ~/Movies/%(title)s.%(ext)s


Обратите внимание, что опции в файле конфигурации — это те же опции, или переключатели, которые используются в обычных вызовах командной строки, поэтому **не должно быть пробелов** после `-` или `--`, например, `-o` или `--proxy`, но не `- o` или `-- proxy`.

Вы можете использовать `--ignore-config`, если хотите отключить файл конфигурации для конкретного запуска youtube-dl.Вы также можете использовать `--config-location`, если хотите использовать пользовательский файл конфигурации для конкретного запуска youtube-dl.

### Аутентификация с помощью файла `.netrc`

Вы также можете настроить автоматическое хранение учетных данных для извлечений, поддерживающих аутентификацию (предоставляя имя пользователя и пароль с помощью `--username` и `--password`), чтобы не передавать учетные данные как аргументы командной строки при каждом запуске youtube-dl и предотвратить отслеживание простых текстовых паролей в истории командной строки. Это можно сделать с помощью файла [`.netrc`](https://stackoverflow.com/tags/.netrc/info) на основе каждого извлечения. Для этого вам нужно создать файл `.netrc` в вашем каталоге `$HOME` и ограничить права доступа на чтение/запись только для вас:

touch $HOME/.netrc chmod a-rwx,u+rw $HOME/.netrc

После этого вы можете добавить учетные данные для извлечения в следующем формате, где *extractor* — это имя извлечения в нижнем регистре:

machine login password

Например:

machine youtube login myaccount@gmail.com password my_youtube_password machine twitch login my_twitch_account_name password my_twitch_password

Чтобы активировать аутентификацию с помощью файла `.netrc`, вам следует передать `--netrc` в youtube-dl или поместить его в [файл конфигурации](#configuration). На Windows вам также может потребоваться вручную настроить переменную окружения `%HOME%`. Например:

set HOME=%USERPROFILE%


Параметр `-o` позволяет пользователям указывать шаблон для имен файлов-выводов.

**tl;dr:** [перейти к примерам](#output-template-examples).Основное использование заключается в том, чтобы не устанавливать никаких шаблонных аргументов при загрузке одного файла, как в случае с `youtube-dl -o funny_video.flv "https://some/video"`. Однако, шаблон может содержать специальные последовательности, которые будут заменены при загрузке каждого видео. Эти специальные последовательности могут быть сформатированы в соответствии с [операциями форматирования строк в Python](https://docs.python.org/2/library/string.html#string-formatting). Например, `%(NAME)s` или `%(NAME)05d`. Для ясности, это процентный символ, за которым следует имя в скобках, а затем форматирующие операции. Допустимые имена вместе с типом последовательности:

- `id` (строка): Идентификатор видео
- `title` (строка): Название видео
- `url` (строка): URL видео
- `ext` (строка): Расширение имени файла видео
- `alt_title` (строка): Второстепенное название видео
- `display_id` (строка): Альтернативный идентификатор видео
- `uploader` (строка): Полное имя загрузчика видео
- `license` (строка): Название лицензии, под которой видео распространяется
- `creator` (строка): Создатель видео
- `release_date` (строка): Дата (YYYYMMDD), когда видео было выпущено
- `timestamp` (число): UNIX-тамп-стамп момента, когда видео стало доступным
- `upload_date` (строка): Дата загрузки видео (YYYYMMDD)
- `uploader_id` (строка): Псевдоним или идентификатор загрузчика видео
- `channel` (строка): Полное имя канала, на котором видео загружено
- `channel_id` (строка): Идентификатор канала- `location` (строка): Физическое местоположение, где видео было снято
- `duration` (число): Длительность видео в секундах
- `view_count` (число): Количество пользователей, которые посмотрели видео на платформе
- `like_count` (число): Количество положительных оценок видео
- `dislike_count` (число): Количество отрицательных оценок видео
- `repost_count` (число): Количество репостов видео
- `average_rating` (число): Средняя оценка, данная пользователями, шкала зависит от веб-страницы
- `comment_count` (число): Количество комментариев к видео
- `age_limit` (число): Возрастное ограничение для видео (в годах)
- `is_live` (логическое): Является ли это видео прямым эфиром или видео с фиксированной длительностью
- `start_time` (число): Время в секундах, с которого должно начаться воспроизведение, как указано в URL
- `end_time` (число): Время в секундах, до которого должно закончиться воспроизведение, как указано в URL
- `format` (строка): Человекочитаемое описание формата
- `format_id` (строка): Код формата, указанный с помощью `--format`
- `format_note` (строка): Дополнительная информация о формате
- `width` (число): Ширина видео
- `height` (число): Высота видео
- `resolution` (строка): Текстовое описание ширины и высоты
- `tbr` (число): Средняя скорость передачи аудио и видео в KBit/s
- `abr` (число): Средняя скорость передачи аудио в KBit/s
- `acodec` (строка): Название используемого аудиокодека
- `asr` (число): Частота дискретизации аудио в Гц
- `vbr` (число): Средняя скорость передачи видео в KBit/s- `fps` (число): Частота кадров
- `vcodec` (строка): Название используемого видеокодека
- `container` (строка): Название формата контейнера
- `filesize` (число): Количество байт, если известно заранее
- `filesize_approx` (число): Оценка количества байт
- `protocol` (строка): Протокол, который будет использоваться для фактической загрузки
- `extractor` (строка): Название извлекателя
- `extractor_key` (строка): Имя ключа извлекателя
- `epoch` (число): Unix эпоха при создании файла
- `autonumber` (число): Число, которое будет увеличиваться с каждым скачиванием, начиная с `--autonumber-start`
- `playlist` (строка): Название или идентификатор плейлиста, содержащего видео
- `playlist_index` (число): Индекс видео в плейлисте, заполненный ведущими нулями в соответствии с общей длиной плейлиста
- `playlist_id` (строка): Идентификатор плейлиста
- `playlist_title` (строка): Название плейлиста
- `playlist_uploader` (строка): Полное имя загрузчика плейлиста
- `playlist_uploader_id` (строка): Псевдоним или идентификатор загрузчика плейлиста

Доступны для видео, которое относится к некоторому логическому разделу или секции:Тип документа для перевода: markdown
Язык исходного текста: английский
Язык финального текста: русский

---

Типы данных, доступные для видео:

 - `chapter` (строка): Название или заголовок раздела, к которому относится видео
 - `chapter_number` (число): Номер раздела, к которому относится видео
 - `chapter_id` (строка): Идентификатор раздела, к которому относится видео

Доступны для видео, которое является эпизодом некоторого сериала или программы:

 - `series` (строка): Название сериала или программы, к которой относится эпизод видео
 - `season` (строка): Название сезона, к которому относится эпизод видео
 - `season_number` (число): Номер сезона, к которому относится эпизод видео
 - `season_id` (строка): Идентификатор сезона, к которому относится эпизод видео
 - `episode` (строка): Название эпизода видео
 - `episode_number` (число): Номер эпизода видео в рамках сезона
 - `episode_id` (строка): Идентификатор эпизода видео

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

 - `track` (строка): Название трека
 - `track_number` (число): Номер трека в рамках альбома или диска
 - `track_id` (строка): Идентификатор трека
 - `artist` (строка): Исполнитель(и) трека
 - `genre` (строка): Жанр(ы) трека
 - `album` (строка): Название альбома, к которому относится трек
 - `album_type` (строка): Тип альбома
 - `album_artist` (строка): Список всех исполнителей, участвующих в альбоме
 - `disc_number` (число): Номер диска или другого физического носителя, к которому относится трек
 - `release_year` (число): Год (YYYY) выпуска альбомаКаждая из вышеупомянутых последовательностей, упомянутая в шаблоне вывода, будет заменена на фактическое значение, соответствующее имени последовательности. Обратите внимание, что некоторые последовательности не гарантируются присутствием, так как они зависят от метаданных, полученных определённым извлечением. Такие последовательности будут заменены запасным значением, предоставленным с помощью `--output-na-placeholder` (`NA` по умолчанию).

Например, для `-o %(title)s-%(id)s.%(ext)s` и mp4 видео с названием `youtube-dl test video` и идентификатором `BaW_jenozKcj`, это приведёт к созданию файла `youtube-dl test video-BaW_jenozKcj.mp4` в текущей директории.

Для числовых последовательностей можно использовать форматирование, связанное с числами, например, `%(view_count)05d` приведёт к строке с количеством просмотров, заполненным нулями до 5 символов, как в `00042`. Шаблоны вывода также могут содержать произвольный иерархический путь, например, `-o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s'`, что приведёт к загрузке каждого видео в директорию, соответствующую этому шаблону пути. Любые отсутствующие директории будут автоматически созданы для вас.

Чтобы использовать литералы процента в шаблоне вывода, используйте `%%`. Чтобы вывести в стандартный поток вывода, используйте `-o -`.Текущий шаблон по умолчанию — `%(название)s-%(id)s.%(расширение)s`.

В некоторых случаях вы не хотите специальные символы, такие как 中, пробелы или &, особенно при передаче загруженного имени файла на систему Windows или через канал, не безопасный для 8-битных символов. В этих случаях добавьте флаг `--restrict-filenames`, чтобы получить более короткое название.

#### Шаблон вывода и Windows-скрипты

Если вы используете шаблон вывода внутри Windows-скрипта, то необходимо экранировать обычные символы процента (`%`) удвоением, так что `-o "%(название)s-%(id)s.%(расширение)s"` должно стать `-o "%%(название)s-%%(id)s.%%(расширение)s"`. Однако вы не должны изменять `%`'ы, которые не являются обычными символами, например, переменные окружения для расширения должны оставаться нетронутыми: `-o "C:\%HOMEPATH%\Desktop\%%(название)s.%%(расширение)s"`.

#### Примеры шаблонов вывода

Обратите внимание, что на Windows вы можете потребоваться использовать двойные кавычки вместо одинарных.

```bash
$ youtube-dl --get-filename -o '%(название)s.%(расширение)s' BaW_jenozKc
youtube-dl test video ''_ä↭𝕐.mp4    # Всякие странные символы

$ youtube-dl --get-filename -o '%(название)s.%(расширение)s' BaW_jenozKc --restrict-filenames
youtube-dl_test_video_.mp4          # Простое имя файла

# Загрузка видео YouTube-плейлиста в отдельную директорию, индексированную по порядку видео в плейлисте
$ youtube-dl -o '%(плейлист)s/%(индекс_плейлиста)s - %(название)s.%(расширение)s' https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re
```# Загрузка всех плейлистов YouTube-канала/пользователя, сохраняя каждый плейлист в отдельной директории:
$ youtube-dl -o '%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' https://www.youtube.com/user/TheLinuxFoundation/playlists

# Загрузка курса Udemy, сохраняя каждый раздел в отдельной директории под директорией MyVideos в вашем домашнем каталоге
$ youtube-dl -u user -p password -o '~/MyVideos/%(playlist)s/%(chapter_number)s - %(chapter)s/%(title)s.%(ext)s' https://www.udemy.com/java-tutorial/

```# Скачивание всех серий сезона, сохранение каждой серии и каждого сезона в отдельной директории под C:/MyVideos
$ youtube-dl -o "C:/MyVideos/%(series)s/%(season_number)s - %(season)s/%(episode_number)s - %(episode)s.%(ext)s" https://videomore.ru/kino_v_detalayah/5_sezon/367617

# Передача видео, которое скачивается, в stdout
$ youtube-dl -o - BaW_jenozKc

ФОРМАТ СЕЛЕКЦИИ

По умолчанию youtube-dl пытается скачать лучшее доступное качество, то есть если вы хотите лучшее качество, вам не нужно передавать какие-либо специальные опции, youtube-dl сделает это за вас по умолчанию.

Но иногда вы можете захотеть скачать в другом формате, например, когда вы находитесь на медленном или прерывистом соединении. Основной механизм для достижения этого — так называемая форматная выборка, на основе которой вы можете явно указать желаемый формат, выбрать форматы на основе некоторых критериев или критериев, установить приоритет и многое другое.Общая синтаксическая конструкция для форматной выборки выглядит как --format FORMAT или более короткая -f FORMAT, где FORMAT — это выборочное выражение, то есть выражение, которое описывает формат или форматы, которые вы хотите скачать.

tl;dr: перейти к примерам.

Простейший случай — это запрос на конкретный формат, например, с помощью -f 22 вы можете скачать формат с кодом формата, равным OnClickListener. Вы можете получить список доступных кодов формата для определенного видео, используя --list-formats или -F. Обратите внимание, что эти коды форматов специфичны для конкретного извлечения.

Вы также можете использовать расширение файла (в настоящее время поддерживаются 3gp, aac, flv, m4a, mp3, mp4, ogg, wav, webm) для скачивания лучшего качества формата определенного расширения файла, представленного как единого файла, например, -f webm скачает лучший формат качества с расширением файла webm, представленного как единого файла.

Вы также можете использовать специальные названия для выбора определенных краевых форматов:


Исправлено:

  • "OnClickListener" заменено на "22".
  • Убраны лишние пробелы и исправлены ошибки в тексте.

Текст: Общая синтаксическая конструкция для форматной выборки выглядит как --format FORMAT или более короткая -f FORMAT, где FORMAT — это выборочное выражение, то есть выражение, которое описывает формат или форматы, которые вы хотите скачать.

tl;dr: перейти к примерам.

Простейший случай — это запрос на конкретный формат, например, с помощью -f 22 вы можете скачать формат с кодом формата, равным 22. Вы можете получить список доступных кодов формата для определенного видео, используя --list-formats или -F. Обратите внимание, что эти коды форматов специфичны для конкретного извлечения.

Вы также можете использовать расширение файла (в настоящее время поддерживаются 3gp, aac, flv, m4a, mp3, mp4, ogg, wav, webm) для скачивания лучшего качества формата определенного расширения файла, представленного как единого файла, например, -f webm скачает лучший формат качества с расширением файла webm, представленного как единого файла.

Вы также можете использовать специальные названия для выбора определенных краевых форматов: - best: Выбор лучшего качества формата, представленного как единого файла с видео и аудио.

  • worst: Выбор худшего качества формата, представленного как единого файла с видео и аудио.
  • bestvideo: Выбор лучшего качества видео-только формата (например, DASH видео). Может быть недоступен.
  • worstvideo: Выбор худшего качества видео-только формата. Может быть недоступен.
  • bestaudio: Выбор лучшего качества аудио-только формата. Может быть недоступен.
  • worstaudio: Выбор худшего качества аудио-только формата. Может быть недоступен. Например, чтобы скачать видео с наименьшим качеством, вы можете использовать -f worstvideo.Если вы хотите скачать несколько видео, и у них нет одинаковых форматов, вы можете указать порядок предпочтений, используя слеши. Обратите внимание, что слеш ассоциативен слева направо, то есть форматы слева предпочтительнее. Например, -f 22/17/18 загрузит формат 22, если он доступен, в противном случае загрузит формат 17, если он доступен, в противном случае загрузит формат 18, если он доступен, в противном случае сообщит, что нет подходящих форматов для загрузки.

Если вы хотите скачать несколько форматов одного видео, используйте запятую в качестве разделителя, например, -f 22,17,18 загрузит все три формата, если они доступны. Или более сложный пример, объединённый с функцией предпочтений: -f 136/137/mp4/bestvideo,140/m4a/bestaudio.

Вы также можете фильтровать видеоформаты, добавляя условие в скобках, как в -f "best[height=720]" (или -f "[filesize>10M]").

Следующие числовые мета-поля можно использовать с операторами сравнения <, <=, >, >=, = (равно), != (не равно):

  • filesize: Количество байт, если известно заранее

  • width: Ширина видео, если известна

  • height: Высота видео, если известна

  • tbr: Средняя скорость передачи аудио и видео в KBit/s

  • abr: Средняя скорость передачи аудио в KBit/s

  • vbr: Средняя скорость передачи видео в KBit/s

  • asr: Частота дискретизации аудио в Гц

  • fps: Частота кадровТакже фильтрация работает для сравнений = (равно), ^= (начинается с), $= (заканчивается на), *= (содержит) и следующих строковых мета-полях:

  • ext: Расширение файла

  • acodec: Имя используемого аудиокодека

  • vcodec: Имя используемого видеокодека

  • container: Имя контейнера

  • protocol: Протокол, который будет использоваться для фактической загрузки, в нижнем регистре (http, https, rtsp, rtmp, rtmpe, mms, f4m, ism, http_dash_segments, m3u8, или m3u8_native)

  • format_id: Краткое описание формата

  • language: Код языка

Любое строковое сравнение может быть предварено отрицанием ! для получения противоположного сравнения, например, !*= (не содержит).

Обратите внимание, что ни одно из вышеупомянутых мета-полей не гарантируется присутствием, так как это зависит только от метаданных, полученных конкретным извлечением, то есть метаданных, предлагаемых видеохостером. Форматы, для которых значение неизвестно, исключаются, если вы не поставите вопросительный знак (?) после оператора. Вы можете объединять фильтры форматов, например, -f "[высота <=? 720][tbr>500]" выбирает видео с разрешением до 720p (или видео, где высота неизвестна) с битрейтом не менее 500 Кбит/с.Вы можете объединить видео и аудио двух форматов в один файл, используя -f <видео-формат>+<аудио-формат> (требуется установленный ffmpeg или avconv), например, -f bestvideo+bestaudio загрузит лучший формат только для видео, лучший формат только для аудио и объединит их вместе с помощью ffmpeg/avconv.Выбор форматов также можно группировать с помощью скобок, например, если вы хотите загрузить лучшие mp4 и webm форматы с высотой менее 480, вы можете использовать -f '(mp4,webm)[высота<480]'.

С конца апреля 2015 года и версии 2015.04.26, youtube-dl использует -f bestvideo+bestaudio/best как стандартный выбор формата (см. #5447, #5456). Если ffmpeg или avconv установлены, это приведет к загрузке bestvideo и bestaudio отдельно и объединению их в один файл, что обеспечит наилучшее общее качество. В противном случае будет использоваться best, что приведет к загрузке наилучшего доступного качества, представленного как один файл. best также требуется для видео, не发布的来自YouTube的音频和视频文件。如果您只想下载某些DASH格式(例如,如果您对获取分辨率为1080p以上的视频不感兴趣),您可以在配置文件中添加 -f bestvideo[высота<=1080]+bestaudio/best。请注意,如果您使用youtube-dl将内容流式传输到stdout(并且很可能将其管道传输到您的媒体播放器),即,您明确指定输出模板为 -o -,youtube-dl仍然使用 -f best 格式选择,以便立即将内容传递给您的播放器,而不是等待bestvideobestaudio下载并合并。

如果您希望保留旧的格式选择行为(在youtube-dl 2015.04.26之前),即,您希望下载作为单个文件提供的最佳可用质量媒体,您应该明确指定您的选择 -f best。您可能希望将其添加到配置文件中,以便每次运行youtube-dl时都不必输入它。

Примеры выбора формата

Обратите внимание, что на Windows могут потребоваться двойные кавычки вместо одинарных.```bash

Скачать лучший доступный формат mp4 или любой другой лучший формат, если mp4 недоступен

$ youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'

Скачать лучший доступный формат, но не лучше 480p

$ youtube-dl -f 'bestvideo[height<=480]+bestaudio/best[height<=480]'

Скачать лучший видео-только формат, но не больше 50 МБ

$ youtube-dl -f 'best[filesize<50M]'

Скачать лучший доступный формат по прямой ссылке через протокол HTTP/HTTPS

$ youtube-dl -f '(bestvideo+bestaudio/best)[protocol^=http]'

Скачать лучший видео-формат и лучший аудио-формат без их слияния

$ youtube-dl -f 'bestvideo,bestaudio' -o '%(title)s.f%(format_id)s.%(ext)s'

Обратите внимание, что в последнем примере рекомендуется использовать шаблон вывода, так как `bestvideo` и `bestaudio` могут иметь одинаковое имя файла.


# ВЫБОР ВИДЕО

Видео можно фильтровать по дате загрузки с помощью опций `--date`, `--datebefore` или `--dateafter`. Они принимают даты в двух форматах:

 - Абсолютные даты: Даты в формате `YYYYMMDD`.
 - Относительные даты: Даты в формате `(now|today)[+-][0-9](day|week|month|year)(s)?`

Примеры:

```bash
# Скачать только видео, загруженные в последние 6 месяцев
$ youtube-dl --dateafter now-6months

# Скачать только видео, загруженные 1 января 1970 года
$ youtube-dl --date 19700101

# Скачать только видео, загруженные в десятилетие 2000-х
$ youtube-dl --dateafter 20000101 --datebefore 20091231

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Как обновить youtube-dl?

Если вы следовали нашим инструкциям по ручной установке, вы можете просто запустить youtube-dl -U (или, на Linux, sudo youtube-dl -U).Если вы установили youtube-dl с помощью pip, достаточно выполнить sudo pip install -U youtube-dl.

Если вы установили youtube-dl с помощью менеджера пакетов, такого как apt-get или yum, используйте стандартные механизмы обновления системы. Обратите внимание, что пакеты распределений часто устаревают. Как правило, youtube-dl выпускает обновления по крайней мере раз в месяц, а часто и еженедельно или даже ежедневно. Просто перейдите по адресу https://yt-dl.org, чтобы узнать текущую версию. К сожалению, мы, разработчики youtube-dl, ничего не можем сделать, если ваша распределение предоставляет действительно устаревшую версию. Вы можете (и должны) пожаловаться в вашей распределении в их багтрекере или поддержке. В крайнем случае вы также можете удалить версию, установленную вашим менеджером пакетов, и следовать нашим инструкциям по ручной установке. Для этого удалите пакет дистрибутива, с помощью команды вида

sudo apt-get remove -y youtube-dl

Затем просто следуйте нашим инструкциям по ручной установке:

sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl
hash -r

После этого вы сможете обновляться с помощью sudo youtube-dl -U.

youtube-dl работает очень медленно на Windows

Добавьте исключение для youtube-dl.exe в настройках Windows Defender.

Я получаю ошибку Unable to extract OpenGraph title при работе с плейлистами YouTubeYouTube изменил формат плейлистов в марте 2014 года и позже, поэтому вам потребуется версия youtube-dl не ниже 2014.07.25 для загрузки всех видео с YouTube.

Если вы установили youtube-dl с помощью менеджера пакетов, pip, setup.py или tarball, используйте тот же метод для обновления. Обратите внимание, что пакеты Ubuntu, похоже, больше не обновляются. Поскольку мы не связаны с Ubuntu, мы мало что можем сделать. Вы можете сообщить об ошибках людям, ответственным за упаковку Ubuntu, на эту почту — им нужно просто обновить пакет до относительно новой версии. См. выше, как это сделать.

Я получаю ошибку при попытке использовать шаблон вывода: error: использование шаблона вывода конфликтует с использованием заголовка, идентификатора видео или автоматического номера

Убедитесь, что вы не используете -o вместе с любыми из этих опций -t, --title, --id, -A или --auto-number в командной строке или в конфигурационном файле. Удалите последнее, если оно используется.

Нужно ли мне всегда передавать -citw?

По умолчанию youtube-dl стремится использовать лучшие опции (кстати, если у вас есть убедительный случай, что это должно быть иначе, пожалуйста, сообщите об этом в качестве проблемы). Поэтому копирование длинных строк опций с веб-страниц не всегда необходимо и иногда вредно. В частности, единственная опция из -citw, которая регулярно полезна, это -i.### Можно ли вернуть опцию -b? Большинство людей, задающих этот вопрос, не осознают, что youtube-dl теперь по умолчанию загружает самое высокое доступное качество, как это указано YouTube, что может быть 1080p или 720p в некоторых случаях, поэтому вам больше не нужно использовать опцию -b. Для некоторых конкретных видео YouTube может не указывать, что они доступны в определенном высококачественном формате, в котором вас интересует. В этом случае просто запросите его с помощью опции -f, и youtube-dl попытается загрузить видео.

Я получаю HTTP ошибку 402 при попытке загрузить видео. Что это?

Похоже, что YouTube требует пройти тест CAPTCHA, если вы загружаете слишком много. Мы рассматриваем возможность предоставить способ для решения CAPTCHA, но в данный момент лучший вариант действий — открыть веб-браузер на URL YouTube, решить CAPTCHA, и перезапустить youtube-dl.

Нужны ли мне другие программы?

youtube-dl работает отлично самостоятельно на большинстве сайтов. Однако, если вы хотите конвертировать видео/аудио, вам потребуется avconv или ffmpeg. На некоторых сайтах — в частности на YouTube — видео могут быть доступны в более высоком качестве без звука. youtube-dl обнаружит, есть ли avconv/ffmpeg, и автоматически выберет лучший вариант.Видео или видеоформаты, передаваемые по протоколу RTMP, могут быть загружены только при наличии rtmpdump. Загрузка MMS и RTSP видео требует установки либо mplayer, либо mpv.

Я загрузил видео, но как его воспроизвести?

Как только видео полностью загружено, воспользуйтесь любым видеоплеером, например mpv, vlc или mplayer.

Я извлёк URL видео с помощью -g, но оно не воспроизводится на другом компьютере / в моём веб-браузере.

Это зависит от сервиса. В большинстве случаев запросы к видео (для загрузки/воспроизведения) должны исходить с того же IP-адреса и с теми же куками и/или HTTP-заголовками. Используйте опцию --cookies, чтобы записать необходимые куки в файл, и укажите загрузчику читать куки из этого файла. Некоторые сайты также требуют использовать общий User-Agent, используйте --dump-user-agent, чтобы увидеть используемый youtube-dl. Вы также можете получить необходимые куки и HTTP-заголовки из JSON-вывода, полученного с помощью --dump-json. Использование IPv6 может быть полезным; в некоторых случаях ограничения применяются только к IPv4. Некоторые сервисы (иногда только для подмножества видео) не ограничивают URL видео по IP-адресу, cookie или user-agent, но это является исключением, а не правилом.Пожалуйста, имейте в виду, что некоторые протоколы URL не поддерживаются браузерами по умолчанию, включая RTMP. Если вы используете -g, ваш собственный загрузчик должен поддерживать эти протоколы также.

Если вы хотите воспроизвести видео на машине, которая не запускает youtube-dl, вы можете перенаправить содержимое видео с машины, которая запускает youtube-dl. Вы можете использовать -o -, чтобы позволить youtube-dl потоково передавать видео в stdout, или просто позволить проигрывателю загружать файлы, записанные youtube-dl последовательно.

ОШИБКА: нет fmt_url_map или conn информации в информации о видео

YouTube перешёл на новый формат информации о видео в июле 2011 года, который не поддерживается старыми версиями youtube-dl. См. выше, чтобы узнать, как обновить youtube-dl.

ОШИБКА: не удалось скачать видео

YouTube требует дополнительной подписи с сентября 2012 года, которая не поддерживается старыми версиями youtube-dl. См. выше, чтобы узнать, как обновить youtube-dl.

URL видео содержит амперсанд, и я получаю странный вывод [1] 2839 или 'v' не является внутренней или внешней командойЭто на самом деле вывод вашей оболочки. Поскольку амперсанд является одним из специальных символов оболочки, он интерпретируется оболочкой, что препятствует передаче всего URL youtube-dl. Чтобы отключить оболочку от интерпретации амперсандов (или любого другого специального символа), вам нужно либо заключить весь URL в кавычки, либо экранировать их обратным слешом (какой подход будет работать, зависит от вашей оболочки).Например, если ваш URL https://www.youtube.com/watch?t=4&v=BaW_jenozKc, вы должны получить следующую команду:

youtube-dl 'https://www.youtube.com/watch?t=4&v=BaW_jenozKc'

или

youtube-dl https://www.youtube.com/watch?t=4\&v=BaW_jenozKc

Для Windows вам нужно использовать двойные кавычки:

youtube-dl "https://www.youtube.com/watch?t=4&v=BaW_jenozKc"

ExtractorError: Could not find JS function 'OF'

В феврале 2015 года новый YouTube-плеер содержал последовательность символов в строке, которая была неверно интерпретирована старыми версиями youtube-dl. См. выше, чтобы узнать, как обновить youtube-dl.

Ошибка HTTP 429: Too Many Requests или 402: Payment Required

Эти два кода ошибки указывают на то, что сервис блокирует ваш IP-адрес из-за перегрузки. Обычно это мягкий блок, который можно снять, решив CAPTCHA. Просто откройте браузер и решите CAPTCHA, предложенную сервисом, после чего передайте cookies в youtube-dl. Обратите внимание, что если ваш компьютер имеет несколько внешних IP-адресов, вам также нужно передать точно такой же IP-адрес, который вы использовали для решения CAPTCHA, с помощью опции --source-address. Также вам может потребоваться передать HTTP-заголовок User-Agent вашего браузера с помощью опции --user-agent.Если это не так (сервис не предлагает решить CAPTCHA), вы можете связаться с сервисом и попросить их разблокировать ваш IP-адрес, или — если у вас уже есть разрешенный IP-адрес — использовать опции --proxy или --source-address для выбора другого IP-адреса.### Ошибка SyntaxError: Non-ASCII character

Ошибка

File "youtube-dl", line 2
SyntaxError: Non-ASCII character '\x93' ...

означает, что вы используете устаревшую версию Python. Пожалуйста, обновите до Python 2.6 или 2.7.

Что это за двоичный файл? Где исчез код?

С июня 2012 года (#342) youtube-dl упакован в исполняемый zipfile. Просто распакуйте его (может потребоваться переименование в youtube-dl.zip на некоторых системах) или клонируйте репозиторий git, как указано выше. Если вы модифицируете код, вы можете запустить его, выполнив файл __main__.py. Чтобы перекомпилировать исполняемый файл, выполните make youtube-dl.

Исполняемый файл выдает ошибку из-за отсутствия MSVCR100.dll

Чтобы запустить исполняемый файл, вам сначала нужно установить Microsoft Visual C++ 2010 Service Pack 1 Redistributable Package (x86).

На Windows, как мне настроить ffmpeg и youtube-dl? Где мне положить исполняемые файлы?

Если вы поместите youtube-dl и ffmpeg в ту же директорию, из которой выполняете команду, это будет работать, но это довольно неудобно.Чтобы сделать другую директорию работоспособной — как для ffmpeg, так и для youtube-dl, или для обеих — просто создайте директорию (например, C:\bin, или C:\Users\<User name>\bin), поместите все исполняемые файлы непосредственно в нее, а затем установите переменную окружения PATH, чтобы включить эту директорию. Отныне, после перезапуска вашей оболочки, вы сможете получить доступ к youtube-dl и ffmpegyoutube-dl сможет найти ffmpeg) просто введя youtube-dl или ffmpeg, независимо от того, в какой директории вы находитесь.### Как я могу поместить загрузки в определенную папку?

Используйте параметр -o для указания шаблона вывода, например -o "/home/user/videos/%(title)s-%(id)s.%(ext)s". Если вы хотите, чтобы это работало для всех ваших загрузок, добавьте параметр в ваш файл конфигурации.

Как я могу загрузить видео, начинающееся с -?

Используйте либо добавьте https://www.youtube.com/watch?v= перед ID, либо разделите ID от параметров с помощью --:

youtube-dl -- -wNyEUrxzFU
youtube-dl "https://www.youtube.com/watch?v=-wNyEUrxzFU"

Как я могу передать cookie-файлы youtube-dl?

Используйте параметр --cookies, например --cookies /path/to/cookies/file.txt.

Для извлечения cookie-файлов из браузера используйте любое расширение браузера, которое поддерживает экспорт cookie-файлов. Например, Get cookies.txt LOCALLY (для Chrome) или cookies.txt (для Firefox).

Обратите внимание, что файл cookie должен быть в формате Mozilla/Netscape и первая строка файла cookie должна быть либо # HTTP Cookie File, либо # Netscape HTTP Cookie File. Убедитесь, что у вас есть правильный формат новой строки в файле cookie и преобразуйте новую строку, если необходимо, чтобы она соответствовала вашей ОС, то есть CRLF (\r\n) для Windows и LF (\n) для Unix и Unix-подобных систем (Linux, macOS и т.д.). HTTP Error 400: Bad Request при использовании --cookies является хорошим признаком неверного формата новой строки.Передача cookie-файлов youtube-dl является хорошим способом обхода входа, когда определённый извлечник не реализует это явно. Другой случай использования — обход CAPTCHA, который некоторые веб-сайты требуют от вас решить в определённых случаях для получения доступа (например, YouTube, CloudFlare).

Как я могу прямым потоком передать медиа-файлы в медиаплеер?

Сначала вам нужно указать youtube-dl на прямую передачу медиа-файлов в stdout с помощью -o -, а также указать ваш медиаплеер на чтение из stdin (он должен быть способен на это для прямого потока), а затем соединить первый поток с последним. Например, прямая передача в vlc может быть достигнута следующим образом:

youtube-dl -o - "https://www.youtube.com/watch?v=BaW_jenozKcj" | vlc -

Как мне скачать только новые видео из плейлиста?

Используйте функцию download-archive. С этой функцией вы должны сначала скачать полный плейлист с помощью --download-archive /путь/к/файлу/архива/скачивания.txt, что запишет идентификаторы всех видео в специальный файл. Каждый последующий запуск с тем же --download-archive будет скачивать только новые видео и пропускать все видео, которые были скачаны ранее. Обратите внимание, что только успешные загрузки записываются в файл.

Например, сначала,

youtube-dl --download-archive archive.txt "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"
```скачает полный плейлист `PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re` и создаст файл `archive.txt`. Каждый последующий запуск будет скачивать только новые видео, если такие есть:

    youtube-dl --download-archive archive.txt "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"

### Нужно ли мне добавить `--hls-prefer-native` в конфигурацию?

Когда youtube-dl обнаруживает HLS-видео, он может скачать его либо с помощью встроенного загрузчика, либо с помощью ffmpeg. Поскольку многие HLS-потоки немного некорректны, а ffmpeg и youtube-dl каждый лучше справляются с некоторыми некорректными случаями, есть опция для переключения загрузчика, если это необходимо.

Когда youtube-dl знает, что один конкретный загрузчик лучше всего работает для определенного сайта, этот загрузчик будет выбран. В противном случае youtube-dl выберет лучший загрузчик для общей совместимости, что в настоящее время происходит с использованием ffmpeg. Этот выбор может измениться в будущих версиях youtube-dl с улучшением встроенного загрузчика и/или ffmpeg.

В частности, общий извлечник (используется, когда ваш сайт не входит в [список поддерживаемых сайтов youtube-dl](https://ytdl-org.github.io/youtube-dl/supportedsites.html)) не может требовать одного конкретного загрузчика.Если вы добавите либо `--hls-prefer-native`, либо `--hls-prefer-ffmpeg` в вашу конфигурацию, для разных подмножеств видео будет некорректно скачиваться. Вместо этого гораздо лучше [отправить отчет об ошибке](https://yt-dl.org/bug) или запрос на внесение изменений, который подробно объяснит, почему встроенный или ffmpeg HLS-загрузчик является лучшим выбором для вашего случая использования.### Можно ли добавить поддержку для этого сайта аниме-видео или сайта, который показывает текущие фильмы бесплатно?

В качестве политики (а также с точки зрения закона), youtube-dl не включает поддержку для сервисов, которые специализируются на нарушении авторских прав. В качестве правила большинства, если вы не можете легко найти видео, которое сервис явно имеет право распространять (то есть, которое было загружено создателем, дистрибьютором создателя или опубликовано под свободной лицензией), сервис, вероятно, не подходит для включения в youtube-dl.

Примечание: если сервис не хранит нарушительный контент, а только ссылается на тех, кто это делает, это свидетельствует о том, что сервис **не** должен быть включён в youtube-dl. То же самое относится к любому уведомлению о соответствии DMCA, если вся передняя страница сервиса заполнена видео, которые он не имеет права распространять. Заметка о "справедливом использовании" также неубедительна, если сервис показывает защищённые авторским правом видео в полном объёме без разрешения.

Запросы на поддержку сервисов, которые **покупают** права на распространение своего контента, вполне допустимы. Если у вас есть сомнения, вы можете просто указать источник, упоминающий легитимную покупку контента.### Как я могу ускорить работу над моей проблемой?

(Также известно как: Помогите, моя важная проблема не решается!) Команда основных разработчиков youtube-dl очень мала. Хотя мы делаем всё возможное, чтобы решить как можно больше проблем, иногда это может занять довольно много времени. Чтобы ускорить решение вашей проблемы, вот что вы можете сделать:

Во-первых, пожалуйста, сообщите о проблеме [в нашем трекере проблем](https://yt-dl.org/bugs). Это позволяет нам координировать все усилия пользователей и разработчиков и служит единым источником. К сожалению, проект youtube-dl вырос настолько, что использование личной электронной почты как эффективный канал коммуникации больше не применимо.

Пожалуйста, ознакомьтесь с [инструкциями по отслеживанию ошибок](#bugs) ниже. Многие ошибки не содержат всей необходимой информации. Если это возможно, предложите прокси, VPN или доступ к командной строке разработчикам youtube-dl. Если вы можете, проведите тестирование проблемы на нескольких компьютерах в разных странах, чтобы исключить местное цензурирование или проблемы с настройками.

Если никто не заинтересован в решении вашей проблемы, вы можете взять дело в свои руки и отправить запрос на внесение изменений (или заставить/оплатить кого-то ещё сделать это).Не стесняйтесь время от времени поднимать проблему, оставляя небольшой комментарий ("Проблема всё ещё присутствует в версии youtube-dl... из Франции, но исправлена из Бельгии"), но, пожалуйста, не чаще одного раза в месяц. Пожалуйста, не объявляйте вашу проблему как `важную` или `срочную`.

### Как можно определить, поддерживается ли заданный URL сервисом youtube-dl?

Во-первых, ознакомьтесь с [списком поддерживаемых сайтов](docs/supportedsites.md). Обратите внимание, что иногда сайт может изменить схему URL (например, с https://example.com/video/1234567 на https://example.com/v/1234567), и youtube-dl может отчитаться об URL службы из этого списка как не поддерживаемом. В этом случае просто сообщите об ошибке.

Определить, поддерживается ли URL, **невозможно**. Это связано с тем, что youtube-dl содержит универсальный извлечник, который соответствует **всем** URL. Вы можете быть склонны отключить, исключить или удалить универсальный извлечник, но этот извлечник не только позволяет пользователям извлекать видео с множества сайтов, которые встраивают видео с другой службы, но также может использоваться для извлечения видео с службы, которую он сам хостит. Поэтому мы ни в коем случае не рекомендуем и не поддерживаем отключение, исключение или удаление универсального извлечника.Если вы хотите узнать, поддерживается ли заданный URL, просто вызовите youtube-dl с этим URL. Если вы не получите видео, вероятно, URL либо не ссылается на видео, либо не поддерживается. Вы можете выяснить это, изучив вывод (если вы запускаете youtube-dl в консоли) или перехватив исключение `UnsupportedError`, если вы запускаете его из программы на Python.# Почему мне нужно пройти через столько формальностей при подаче сообщений об ошибках?До того, как у нас появился шаблон для ошибок, несмотря на наши подробные [инструкции по отчету об ошибках](#bugs), около 80% отчетов об ошибках, которые мы получали, были бесполезными, например, потому что люди использовали древние версии, отстоящие на сотни выпусков, из-за простых синтаксических ошибок (не в youtube-dl, а в общем использовании командной строки), из-за того, что проблема уже была отмечена несколько раз ранее, из-за того, что люди не читали сообщение об ошибке, даже если оно говорило "пожалуйста, установите ffmpeg", из-за того, что люди не упоминали URL, который они пытались скачать, и многих других простых, легко избегаемых проблем, многих из которых было совершенно не связано с youtube-dl. youtube-dl — это проект с открытым исходным кодом, который поддерживается слишком малым числом добровольцев, поэтому мы предпочитаем тратить время на исправление ошибок там, где уверены, что простые проблемы не применимы, и где можем быть уверены, что сможем воспроизвести проблему без необходимости повторно обращаться к репортеру. В связи с этим выход `youtube-dl -v YOUR_URL_HERE` (вместе с вашим URL) действительно является всем, что требуется для подачи отчета об ошибке. Шаблон отчета также подсказывает вам, какие базовые шаги вы можете выполнить, например, проверить, что ваша версия youtube-dl является актуальной.

# Руководство для разработчиковБольшинство пользователей не требуется сборка youtube-dl и они могут [скачать сборки](https://ytdl-org.github.io/youtube-dl/download.html) или получить их из своего дистрибутива.

Чтобы запустить youtube-dl как разработчик, вам не нужно ничего собирать. Просто выполните

    python -m youtube_dl

Чтобы запустить тесты, просто запустите ваш любимый тестовый запуск или выполните тестовый файл напрямую; любое из следующего работает:

    python -m unittest discover
    python test/test_download.py
    nosetests

Для версий Python 3.6 и выше, вы можете использовать [pynose](https://pypi.org/project/pynose/) для реализации `nosetests`. Оригинальная [nose](https://pypi.org/project/nose/) не была обновлена для версий 3.10 и выше.

См. пункт 6 [руководства по добавлению поддержки нового сайта](#добавление-поддержки-для-нового-сайта) для информации о том, как запустить тестовые случаи для конкретного извлечения.

Если вы хотите создать сборку youtube-dl самостоятельно, вам потребуется

* python
* make (только GNU make поддерживается)
* pandoc
* zip
* nosetests

### Добавление поддержки для нового сайта

Если вы хотите добавить поддержку для нового сайта, сначала **убедитесь**, что этот сайт **не посвящен [нарушению авторских прав](README.md#можете-вы-добавить-поддержку-для-этого-сайта-аниме-видео-или-сайта-который-показывает-текущие-фильмы-бесплатно)**. youtube-dl **не поддерживает** такие сайты, поэтому запросы на включение поддержки для них **будут отклонены**.После того, как вы убедитесь, что этот сайт распространяет свои материалы законно, вы можете следовать этому краткому списку (предполагая, что ваш сервис называется `yourextractor`):

1. [Создайте форк этого репозитория](https://github.com/ytdl-org/youtube-dl/fork)
2. Выполните команду для получения исходного кода:

        git clone git@github.com:YOUR_GITHUB_USERNAME/youtube-dl.git

3. Создайте новую ветку git с помощью команды:

        cd youtube-dl
        git checkout -b yourextractor

4. Начните с этого простого шаблона и сохраните его в `youtube_dl/extractor/yourextractor.py`:

    ```python
    # кодировка: utf-8
    from __future__ import unicode_literals

    from .common import InfoExtractor

    class YourExtractorIE(InfoExtractor):
        _VALID_URL = r'https?://(?:www\.)?yourextractor\.com/watch/(?P<id>[0-9]+)'
        _TEST = {
            'url': 'https://yourextractor.com/watch/42',
            'md5': 'TODO: md5 сумма первых 10241 байта видеофайла (используйте --test)',
            'info_dict': {
                'id': '42',
                'ext': 'mp4',
                'title': 'Название видео здесь',
                'thumbnail': r're:^https?://.*\.jpg$',
                # TODO более свойств, либо как:
                # * Значение
                # * MD5 контрольная сумма; начните строку с md5:
                # * Регулярное выражение; начните строку с re:
                # * Любое значение типа Python (например int или float)
            }
        }

        def _real_extract(self, url):
            video_id = self._match_id(url)
            webpage = self._download_webpage(url, video_id)

            # TODO более кода следует здесь, например ...
            title = self._html_search_regex(r'<h1>(.+?)</h1>', webpage, 'title')
    ```            return {
                'id': видео_id,
                'title': заголовок,
                'description': self._og_search_description(веб_страница),
                'uploader': self._search_regex(r'<div[^>]+id="uploader"[^>]*>([^<]+)<', веб_страница, 'uploader', fatal=False),
                # TODO добавьте больше свойств (см. youtube_dl/extractor/common.py)
            }
    ```
5. Добавьте импорт в [`youtube_dl/extractor/extractors.py`](https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/extractor/extractors.py).
6. Запустите `python test/test_download.py TestDownload.test_YourExtractor`. Это *должно завершиться ошибкой* сначала, но вы можете продолжать перезапускать его до тех пор, пока не закончите. Если вы решите добавить больше одного теста (на самом деле, тестового случая), то переименуйте ``_TEST`` в ``_TESTS`` и сделайте его списком словарей. Тесты будут названы `TestDownload.test_YourExtractor`, `TestDownload.test_YourExtractor_1`, `TestDownload.test_YourExtractor_2`, и т.д. Обратите внимание:
    * имена тестов используют имя класса извлечения **без окончания `IE`**
    * тесты с ключом `only_matching` в словаре теста не учитываются.
8. Посмотрите на [`youtube_dl/extractor/common.py`](https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/extractor/common.py) для возможных вспомогательных методов и [детального описания того, что должен и может вернуть ваш извлечник](https://github.com/ytdl-org/youtube-dl/blob/7f41a598b3fba1bcab2817de64a08941200aa3c8/youtube_dl/extractor/common.py#L94-L303). Добавьте тесты и код для столько, сколько вам нужно.
9. Убедитесь, что ваш код соответствует [стандартам написания кода для youtube-dl](#youtube-dl-кодирования-стандарты) и проверьте код с [flake8](https://flake8.pycqa.org/en/latest/index.html#quickstart):        $ flake8 youtube_dl/extractor/yourextractor.py

9. Убедитесь, что ваш код работает под всеми [версиями Python](https://www.python.org/), поддерживаемыми youtube-dl, а именно 2.6, 2.7, и 3.2+.
10. Когда тесты проходят, [добавьте](https://git-scm.com/docs/git-add) новые файлы и [закоммитьте](https://git-scm.com/docs/git-commit) их и [отправьте](https://git-scm.com/docs/git-push) результат, как это:

        $ git add youtube_dl/extractor/yourextractor.py
        $ git commit -m "Добавлен новый извлечник YourExtractor"
        $ git push
        $ git add youtube_dl/extractor/extractors.py
        $ git add youtube_dl/extractor/yourextractor.py
        $ git commit -m '[yourextractor] Добавить новый извлечённый файл'
        $ git push origin yourextractor

11. Наконец, [создайте запрос на слияние](https://help.github.com/articles/creating-a-pull-request). Мы затем проверим и объединим его.

В любом случае, большое спасибо за ваши вклады!

## Кодовые соглашения для youtube-dl

В этом разделе представлены руководства по написанию идиоматического, надёжного и будущее-ориентированного кода извлечения.Извлекатели по своей природе очень хрупки, так как они зависят от структуры данных, предоставленных сторонними хостами медиа, которые находятся вне вашего контроля, и эта структура часто меняется. В качестве разработчика извлечения ваша задача не только написать код, который будет правильно извлекать ссылки на медиа и метаданные, но также минимизировать зависимость от структуры данных источника и даже сделать код способным предвидеть потенциальные будущие изменения и быть готовым к ним. Это важно, так как это позволит извлечению не ломаться при незначительных изменениях структуры, что позволит старым версиям youtube-dl продолжать работать. Хотя эта проблема может быть легко решена выпуском новой версии youtube-dl с внесённым исправлением, все предыдущие версии становятся сломанными во всех репозиториях и пакетах дистрибутивов, которые могут не быть такими быстрыми в получении обновления от нас. Безусловно, некоторые дистрибутивы без постоянных выпусков могут никогда не получить обновление вовсе.### Обязательные и необязательные метаполя

Для успешного извлечения youtube-dl полагается на метаданные, которые ваш извлечённый файл извлекает и предоставляет youtube-dl, выраженные в виде [информационного словаря](https://github.com/ytdl-org/youtube-dl/blob/7f41a598b3fba1bcab2817de64a08941200aa3c8/youtube_dl/extractor/common.py#L94-L303) или просто *info dict*. Только следующие метаполя в *info dict* считаются обязательными для успешного процесса извлечения youtube-dl:

 - `id` (идентификатор медиа)
 - `title` (название медиа)
 - `url` (URL для загрузки медиа) или `formats`

В действительности только последний вариант технически является обязательным (то есть, если вы не можете определить местоположение загрузки медиа, извлечение не имеет смысла). Но по соглашению youtube-dl также считает `id` и `title` обязательными. Таким образом, вышеупомянутые метаполя являются критическими данными, без которых извлечение не имеет смысла, и если любое из них не может быть извлечено, то извлечённый файл считается полностью сломанным. [Любое поле](https://github.com/ytdl-org/youtube-dl/blob/7f41a598b3fba1bcab2817de64a08941200aa3c8/youtube_dl/extractor/common.py#L188-L303) помимо упомянутых считается **необязательным**. Это означает, что извлечение должно быть **терпимым** к ситуациям, когда источники для этих полей могут быть недоступны (даже если они всегда доступны в данный момент), и **будущепroof**, чтобы не нарушить извлечение общих обязательных полей.#### Пример

Предположим, что у вас есть словарь источников `meta`, который вы получили в виде JSON с HTTP-запросом, и он имеет ключ `summary`:

```python
meta = self._download_json(url, video_id)

Предположим, что в данный момент структура meta выглядит следующим образом:

{
    ...
    "summary": "some fancy summary text",
    ...
}

Предположим, что вы хотите извлечь summary и поместить его в результирующий словарь информации как description. Поскольку description является необязательным мета-полем, вы должны быть готовы к тому, что этот ключ может отсутствовать в словаре meta, поэтому вы должны извлекать его следующим образом:

description = meta.get('summary')  # верно

а не так:

description = meta['summary']  # неверно

Второй вариант приведет к сбою процесса извлечения с ошибкой KeyError, если summary исчезнет из meta в будущем, но с первым подходом извлечение продолжит работу с description установленным в None, что вполне допустимо (помните, что None эквивалентен отсутствию данных).

Аналогично, вы должны передать fatal=False, когда извлекаете необязательные данные с веб-страницы с помощью _search_regex, _html_search_regex или подобных методов, например:

description = self._search_regex(
    r'<span[^>]+id="title"[^>]*>([^<]+)<',
    webpage, 'description', fatal=False)

С fatal установленным в False, если _search_regex не сможет извлечь description, он выдаст предупреждение и продолжит извлечение.Вы также можете передать default=<some fallback value>, например:

description = self._search_regex(
    r'<span[^>]+id="title"[^>]*>([^<]+)<',
    webpage, 'description', default=None)

В случае неудачи этот код продолжит извлечение без ошибок, установив description в None. Это полезно для мета-полей, которые могут присутствовать или отсутствовать.

Предоставление альтернативных источников

При извлечении метаданных попытайтесь делать это из нескольких источников. Например, если title присутствует в нескольких местах, попытайтесь извлечь его из хотя бы некоторых из них. Это делает извлечение более будущепroof в случае, если некоторые из источников станут недоступными.

Пример

Предположим, что meta из предыдущего примера имеет поле title, и вы собираетесь его извлечь. Поскольку title является обязательным полем метаданных, вы должны получить что-то вроде:

title = meta['title']

Если title исчезнет из meta в будущем из-за изменений со стороны хостера, извлечение не удастся, так как title является обязательным полем. Это ожидаемо.

Предположим, что у вас есть другой источник, из которого можно извлечь title, например HTML-метка og:title страницы webpage. В этом случае вы можете предоставить сценарий резервного варианта:

title = meta.get('title') or self._og_search_title(webpage)

Этот код попытается извлечь title из meta сначала, и если это не удастся, попытается извлечь og:title из webpage.### Регулярные выражения

Не захватывайте группы, которые вы не используете

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

Пример

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

Правильно:

r'(?:id|ID)=(?P<id>\d+)'

Неправильно:

r'(id|ID)=(?P<id>\d+)'

Сделайте регулярные выражения расслабленными и гибкими

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

Пример

Предположим, что вам нужно извлечь title из следующего HTML-кода:

<span style="position: absolute; left: 910px; width: 90px; float: right; z-index: 9999;" class="title">some fancy title</span>

Код для этой задачи должен выглядеть примерно так:

title = self._search_regex(
    r'<span[^>]+class="title"[^>]*>([^<]+)', webpage, 'title')

Или даже лучше:

title = self._search_regex(
    r'<span[^>]+class=(["\'])title\1[^>]*>(?P<title>[^<]+)',
    webpage, 'title', group='title')

Обратите внимание, как вы терпимо относитесь к потенциальным изменениям в значении атрибута style или переходу от использования двойных кавычек к одинарным для атрибута class:Код точно не должен выглядеть так:

title = self._search_regex(
    r'<span style="position: absolute; left: 910px; width: 90px; float: right; z-index: 9999;" class="title">(.*?)</span>',
    webpage, 'title', group='title')

Политика длинных строк

Существует мягкий лимит, чтобы держать строки кода меньше 80 символов. Это означает, что он должен соблюдаться, если это возможно, и если это не ухудшает читаемость и поддержку кода.

Например, вы никогда не должны разделять длинные строковые литералы, такие как URL или некоторые другие часто копируемые сущности, на несколько строк, чтобы соответствовать этому лимиту:

Правильно:

'https://www.youtube.com/watch?v=FqZTN594JQw&list=PLMYEtVRpaqY00V9W81Cwmzp6N6vZqfUKD4'

Неправильно:

'https://www.youtube.com/watch?v=FqZTN594JQw&list='
'PLMYEtVRpaqY00V9W81Cwmzp6N6vZqfUKD4'

Встроенные значения

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

Пример

Правильно:

title = self._html_search_regex(r'<title>([^<]+)</title>', webpage, 'title')

Неправильно:

TITLE_RE = r'<title>([^<]+)</title>'
# ...несколько строк кода...
title = self._html_search_regex(TITLE_RE, webpage, 'title')

Сжатие запасных значений

Несколько запасных значений могут быстро стать неудобными. Сжимайте несколько запасных значений в одно выражение через список шаблонов.#### Пример

Хорошо:

description = self._html_search_meta(
    ['og:description', 'description', 'twitter:description'],
    webpage, 'description', default=None)

Неудобно:

description = (
    self._og_search_description(webpage, default=None)
    or self._html_search_meta('description', webpage, default=None)
    or self._html_search_meta('twitter:description', webpage, default=None))

Методы, поддерживающие список шаблонов: _search_regex, _html_search_regex, _og_search_property, _html_search_meta.

Заключительные круглые скобки

Всегда перемещайте заключительные круглые скобки после последнего аргумента.

Пример

Правильно:

    lambda x: x['ResultSet']['Result'][0]['VideoUrlSet']['VideoUrl'],
    list)

Неправильно:

    lambda x: x['ResultSet']['Result'][0]['VideoUrlSet']['VideoUrl'],
    list,
)

Использование удобных функций преобразования и парсинга

Оберните все извлеченные числовые данные в безопасные функции из youtube_dl/utils.py: int_or_none, float_or_none. Используйте их для конвертации строк в числа. Используйте url_or_none для безопасной обработки URL.

Используйте traverse_obj для безопасного извлечения метаданных из распарсенных JSON.

Используйте unified_strdate для унифицированного извлечения upload_date или любого поля метаданных типа YYYYMMDD, unified_timestamp для унифицированного извлечения timestamp, parse_filesize для извлечения filesize, parse_count для извлечения полей метаданных типа count, parse_resolution, parse_duration для извлечения duration, parse_age_limit для извлечения age_limit.Изучите youtube_dl/utils.py для получения дополнительных полезных вспомогательных функций.

Дополнительные примеры

Безопасное извлечение необязательного описания из распарсенного JSON

При обработке сложного JSON, как часто возвращаемого запросами к API сайта или хранящегося в веб-страницах для "hydration", можно использовать утилиту traverse_obj() для обработки нескольких значений по умолчанию и для обеспечения ожидаемого типа метаданных. Документация функции определяет, как работает функция: также просмотрите использование в кодовой базе для получения дополнительных примеров.

В этом примере текстовое значение description или None извлекается из члена .result.video[0].summary распарсенного JSON response, если доступно.

description = traverse_obj(response, ('result', 'video', 0, 'summary', T(compat_str)))

T(...) является сокращением для литерала множества; если вы не любите людей, которые все еще используют Python 2.6, T(type_or_transformation) можно записать как литерал множества {type_or_transformation}.

Некоторые извлечения используют более старую и менее функциональную функцию try_get() в том же контексте.

description = try_get(response, lambda x: x['result']['video'][0]['summary'], compat_str)
Безопасное извлечение дополнительных необязательных метаданныхВ этом примере различные необязательные значения метаданных извлекаются из члена .result.video[0] распарсенного JSON response, который ожидается быть JS объектом, распарсенным в dict, без ошибок, если это не так, или если любые из целевых значений отсутствуют или недействительны.```python

video = traverse_obj(response, ('result', 'video', 0, T(dict))) or {}

ранее:

video = try_get(response, lambda x: x['result']['video'][0], dict) or {}

description = video.get('summary') duration = float_or_none(video.get('durationMs'), scale=1000) view_count = int_or_none(video.get('views'))


Предположим, вы извлекли JSON таким образом в структуру данных Python с именем `media_json` с помощью, например, методов `_download_json()` или `_parse_json()` класса `InfoExtractor`:
```json
{
    "title": "Example video",
    "comment": "try extracting this",
    "media": [{
        "type": "bad",
        "size": 320,
        "url": "https://some.cdn.site/bad.mp4"
    }, {
        "type": "streaming",
        "url": "https://some.cdn.site/hls.m3u8"
    }, {
        "type": "super",
        "size": 1280,
        "url": "https://some.cdn.site/good.webm"
    }],
    "moreStuff": "more values",
    ...
}

Тогда код извлечения может собрать различные поля JSON:

...
from ..utils import (
    determine_ext,
    int_or_none,
    T,
    traverse_obj,
    txt_or_none,
    url_or_none,
)
...
        ...
        info_dict = {}
        # извлекаем заголовок и описание, если они корректны и не пустые
        info_dict.update(traverse_obj(media_json, {
            'title': ('title', T(txt_or_none)),
            'description': ('comment', T(txt_or_none)),
        }))
```        # извлекаем любые распознаваемые форматы медиа
        fmts = []
        # проходим по списку "media", извлекаем `dict` с желаемыми ключами
        for fmt in traverse_obj(media_json, ('media', Ellipsis, {
                'format_id': ('type', T(txt_or_none)),
                'url': ('url', T(url_or_none)),
                'width': ('size', T(int_or_none)), })):
            # значения `fmt`, которые были `None`, были удалены
            if 'url' not in fmt:
                continue
            fmt_url = fmt['url']  # известно, что это корректный URL
            ext = determine_ext(fmt_url)
            if ext == 'm3u8':
                fmts.extend(self._extract_m3u8_formats(fmt_url, video_id, 'mp4', fatal=False))
            else:
                fmt['ext'] = ext
                fmts.append(fmt)        # Сортируем, выбрасываем исключение, если форматы не найдены
        self._sort_formats(fmts)

        info_dict['formats'] = fmts
        ...

Извлекатель выбрасывает исключение вместо случайных сбоев, если структура JSON изменяется так, что форматы не находятся.

ВКЛЮЧЕНИЕ youtube-dl

youtube-dl старается быть хорошей программой командной строки и, следовательно, должна быть вызываемой из любого языка программирования. Если вы столкнулись с проблемами парсинга его вывода, не стесняйтесь создать отчет. Из программы на Python вы можете интегрировать youtube-dl более мощным образом, например, так:

from __future__ import unicode_literals
import youtube_dl

ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['https://www.youtube.com/watch?v=BaW_jenozKc'])

Вероятно, вы захотите использовать различные опции. Для получения списка доступных опций ознакомьтесь с файлом youtube_dl/YoutubeDL.py. В качестве отправной точки, если вы хотите перехватить вывод youtube-dl, установите объект logger.

Вот более полный пример программы, которая выводит только ошибки (и короткое сообщение после завершения загрузки), а также загружает/конвертирует видео в файл mp3:

from __future__ import unicode_literals
import youtube_dl


class MyLogger(object):
    def debug(self, msg):
        pass

    def warning(self, msg):
        pass    def error(self, msg):
        print(msg)


def my_hook(d):
    if d['status'] == 'finished':
        print('Завершено скачивание, теперь конвертируем ...')


ydl_opts = {
    'format': 'bestaudio/best',
    'postprocessors': [{
        'key': 'FFmpegExtractAudio',
        'preferredcodec': 'mp3',
        'preferredquality': '192',
    }],
    'logger': MyLogger(),
    'progress_hooks': [my_hook],
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['https://www.youtube.com/watch?v=BaW_jenozKc'])

ОШИБКИ

Ошибки и предложения следует сообщать в системе отслеживания ошибок: https://github.com/ytdl-org/youtube-dl/issues (https://yt-dl.org/bug является псевдонимом для этого). Если вы не были приглашены отправить отчет об ошибке или нет других уважительных причин (например, GitHub не принимает отчет об ошибке), пожалуйста, не отправляйте отчеты об ошибках по личной электронной почте. Для обсуждений присоединяйтесь к каналу IRC #youtube-dl на freenode (webchat).

Открытие отчета об ошибке или предложенияУбедитесь, что вы следуете инструкциям, предоставленным ниже и в системе отслеживания ошибок. Полностью заполните соответствующий шаблон ошибки. Рассмотрите возможность того, что ваша проблема уже описана в существующем отчете об ошибке: если да, следуйте обсуждению там. Избегайте комментариев к существующим дубликатам отчетов об ошибках, так как такие комментарии не добавляют к обсуждению ошибки и могут быть расценены как спам. Пожалуйста, включите полный вывод youtube-dl при запуске с флагом -v, то есть добавьте флаг -v к вашей командной строке, скопируйте весь вывод и вставьте его в тело сообщения об ошибке, обрамив ```. Вывод должен выглядеть похожим образом:

$ youtube-dl -v <ваша командная строка>
[отладка] Системная конфигурация: []
[отладка] Конфигурация пользователя: []
[отладка] Аргументы командной строки: [u'-v', u'https://www.youtube.com/watch?v=BaW_jenozKcj']
[отладка] Кодировки: локаль cp1251, файловая система mbcs, вывод cp866, предпочтения cp1251
[отладка] Версия youtube-dl 2015.12.06
[отладка] Git HEAD: 135392e
[отладка] Python версия 2.6.6 - Windows-2003Server-5.2.3790-SP2
[отладка] exe версии: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
[отладка] Список прокси: {}
...

**Не публикуйте скриншоты подробных логов; только обычный текст допустим.**Вывод (включая первые строки) содержит важную отладочную информацию. Сообщения об ошибках без полного вывода часто не воспроизводимы и поэтому не решаются в кратчайшие сроки, если вообще решаются.

Наконец, пожалуйста, проверьте ваше сообщение об ошибке, чтобы избежать различных распространённых ошибок (вы можете и должны использовать это как проверочный список), перечисленных ниже.

Достаточна ли сама по себе описания проблемы?

Мы часто получаем сообщения об ошибках, которые трудно понять. Чтобы избежать последующих уточнений, и чтобы помочь участникам, которые не являются носителями английского языка, пожалуйста, подробно опишите ту функцию, которую вы хотите запросить, или ту ошибку, которую вы хотите исправить.

Убедитесь, что:

  • Ясно указано, что за проблема
  • Как она может быть исправлена
  • Как выглядит ваше предложенное решение

Если ваш отчёт короче двух строк, он почти наверняка недостаточен, что делает его трудным для нас для понимания. Мы часто слишком вежливы, чтобы закрывать такие сообщения об ошибках, но недостающая информация делает недоразумения вероятными. Как коммиттер, я часто раздражаюсь из-за таких сообщений об ошибках, поскольку единственный возможный способ для меня двигаться вперёд — это снова и снова просить уточнений.Для отчётов об ошибках это означает, что ваш отчёт должен содержать полный вывод youtube-dl при вызове с флагом -v. Сообщение об ошибке, которое вы получаете для (большинства) ошибок, даже говорит об этом, но вы не поверите, сколько наших сообщений об ошибках не содержат этой информации. Если ваш сервер имеет несколько IP-адресов или вы подозреваете цензуру, добавление --call-home может быть хорошей идеей для получения дополнительной диагностики. Если ошибка ERROR: Unable to extract ... и вы не можете воспроизвести её из нескольких стран, добавьте --dump-pages (предупреждение: это приведёт к значительному объёму вывода, перенаправьте его в файл log.txt, добавив >log.txt 2>&1 к вашей команде) или загрузите файлы .dump, которые вы получите при добавлении --write-pages куда-то.Запросы поддержки сайта должны содержать пример URL. Пример URL — это URL, который вы можете захотеть скачать, например https://www.youtube.com/watch?v=BaW_jenozKc. На странице должен присутствовать явный видеоролик. За исключением очень специфических обстоятельств, главная страница видео-сервиса (например, https://www.youtube.com/) не является примером URL.

Является ли проблема уже документированной?Убедитесь, что кто-то еще не открыл ту же проблему, которую вы пытаетесь открыть. Используйте поиск в верхней части окна или просмотрите GitHub Issues этого репозитория. Вначале используйте фильтр поиска -label:duplicate, чтобы сосредоточиться на активных проблемах. Если проблема уже существует, не стесняйтесь написать что-то вроде "Эта проблема затрагивает меня также, версия 2015.01.01. Вот дополнительная информация о проблеме: ...". Хотя некоторые проблемы могут быть старыми, новый пост в них часто стимулирует быструю активность.### Используете ли вы последнюю версию?

Перед отчетом о проблеме введите youtube-dl -U. Это должно сообщить, что вы используете последнюю версию. Около 20% отчетов, которые мы получаем, уже исправлены, но люди используют устаревшие версии. Это касается и запросов на новые функции.

Почему существующие опции недостаточны?

Перед запросом новой функции, пожалуйста, посмотрите на список поддерживаемых опций. Многие запросы на новые функции уже реализованы! Пожалуйста, обязательно укажите вашу работу в отчете о проблеме и подробно объясните, почему существующие похожие опции не решают вашу проблему.

Существует ли достаточно контекста в вашем отчете о баге?Люди хотят решать проблемы, и часто считают, что делают нам одолжение, разбивая свои большие проблемы (например, желание пропускать уже загруженные файлы) на конкретные запросы (например, требование проверить, существует ли файл перед загрузкой страницы информации). Однако, что часто происходит, так это то, что они разбивают проблему на два шага: один простой, а другой невозможный (или крайне сложный). Затем нам предъявляется очень сложный запрос, хотя исходная проблема могла бы быть решена гораздо проще, например, путем записи идентификаторов загруженных видео в отдельный файл. Чтобы избежать этого, вы должны включить более широкий контекст, где это не очевидно. В частности, каждый запрос на новую функцию, не связанный с добавлением поддержки нового сайта, должен содержать сценарий использования, который объясняет, в какой ситуации отсутствующая функция была бы полезна.

Вопрос касается только одной проблемы?Некоторые из наших пользователей считают, что существует ограничение на количество задач, которые они могут или должны открыть. Ограничения на количество задач, которые они могут или должны открыть, не существует. Хотя может показаться привлекательным выгрузить все ваши проблемы в одну задачу, это означает, что кто-то, кто решает одну из ваших проблем, не сможет отметить задачу как закрытую. В целом, отчет о большом количестве проблем приводит к тому, что задача остается незакрытой, поскольку никто не хочет атаковать эту монструозную задачу, пока кто-то милосердно не разделит задачу на несколько.

В частности, каждая задача поддержки сайта должна относиться только к услугам на одном сайте (обычно под общим доменом, но всегда использующим одну и ту же технологию backend). Не запрашивайте поддержку для видео пользователей Vimeo, подкастов Белого дома и страниц Google Plus в одной задаче. Также убедитесь, что вы не публикуете отчеты о багах вместе с запросами на новые функции. Как правило, запрос на новую функцию не должен включать выводы youtube-dl, которые не непосредственно связаны с данной функцией. Не публикуйте отчеты о сетевой ошибке вместе с запросом на новый видео сервис.

Нужен ли вам кто-то для реализации этой функции?Публикуйте только те функции, которые вам (или вашему недееспособному другу, с которым вы можете лично поговорить) необходимы. Не публикуйте функции только потому, что они кажутся хорошей идеей. Если они действительно полезны, они будут запрошены кем-то, кто ими пользуется.

Ваш вопрос касается youtube-dl?

Может показаться странным, но некоторые отчеты о багах, которые мы получаем, совершенно не связаны с youtube-dl и относятся к другой, или даже к собственной, приложению репортера. Пожалуйста, убедитесь, что вы действительно используете youtube-dl. Если вы используете пользовательский интерфейс для youtube-dl, отправьте отчет о баге разработчику приложения, предоставляющего этот интерфейс. С другой стороны, если ваш пользовательский интерфейс для youtube-dl не работает каким-то образом и вы считаете, что это связано с youtube-dl, не стесняйтесь отправить отчет о баге.

КОПИРУЙТ

youtube-dl выпускается в общественное достояние авторами.

Этот файл README был первоначально написан Даниелом Болтоном и также выпускается в общественное достояние.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Youtube-dl — это инструмент командной строки, который используется для загрузки видеофайлов с сайта YouTube.com. Он разработан на Python и требует интерпретатора Python для запуска. Поддерживает различные операционные системы и множество видеосайтов, включая отечественные (например, Youku, Tudou, Sohu) и зарубежные (включая сам YouTube). Развернуть Свернуть
Python и 4 других языков
Unlicense
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-youtube-downloader.git
git@api.gitlife.ru:oschina-mirror/mirrors-youtube-downloader.git
oschina-mirror
mirrors-youtube-downloader
mirrors-youtube-downloader
master