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

OSCHINA-MIRROR/mirrors-youtube-downloader

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

Build Status

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 PATH               Расположение конфигурационного файла;
                                     либо путь к конфигурационному файлу, либо его директории.
--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                         Обходить географические ограничения с помощью подмены заголовка X-Forwarded-For
--no-geo-bypass                      Не обходить географические ограничения с помощью подмены заголовка X-Forwarded-For
--geo-bypass-country CODE            Принудительно обходить географические ограничения с явно предоставленным двухбуквенным кодом страны ISO
                                     3166-2
--geo-bypass-ip-block IP_BLOCK       Принудительно обходить географические ограничения с явно предоставленным IP-блоком в нотации CIDR

Выбор видео:

--playlist-start NUMBER              Начальное видео плейлиста (по умолчанию 1)
--playlist-end NUMBER                Конечное видео плейлиста (по умолчанию последнее)
--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 REGEX                  Загружать только совпадающие заголовки (регулярное выражение или регистронезависимая подстрока)
--reject-title REGEX                 Пропускать загрузку для совпадающих заголовков
                                     (регулярное выражение или регистронезависимая подстрока)
--max-downloads NUMBER               Прекратить после загрузки NUMBER файлов
--min-filesize SIZE                  Не загружать видео меньше SIZE (например, 50k или 44.6m)
--max-filesize SIZE                  Не загружать видео больше SIZE (например, 50k или 44.6m)
--date DATE                          Загружать только видео, загруженные в эту дату
--datebefore DATE                    Загружать только видео, загруженные на или до этой даты (то есть включительно)
--dateafter DATE                     Загружать только видео, загруженные на или после этой даты (то есть включительно)
--min-views COUNT                    Не загружать видео с менее чем COUNT просмотрами
--max-views COUNT                    Не загружать видео с более чем COUNT просмотрами
--match-filter FILTER                Общий фильтр видео. Укажите любой ключ (см. "ШАБЛОН ВЫВОДА" для списка доступных ключей),
                                     чтобы совпадение происходило при наличии ключа, !key для проверки отсутствия ключа,
                                     key > NUMBER (например, "comment_count > 12", также работает с >=, <, <=, !=, =) для сравнения с числом,
                                     key = 'LITERAL' (например, "uploader = 'Mike Smith'", также работает с !=) для совпадения со строковым литералом,
                                     и & для требования нескольких совпадений. Значения, которые неизвестны, исключаются,
                                     если вы не поставите вопросительный знак (?) после оператора. Например,
                                     чтобы совпадали только видео с более чем 100 лайками и менее 50 дизлайками (или функционал дизлайков недоступен на данном сервисе),
                                     но также имеющие описание, используйте --match-filter "like_count > 100 &
                                     dislike_count <? 50 & description" .
--no-playlist                        Загружать только видео, если URL относится к видео и плейлисту.
--yes-playlist                       Загружать плейлист, если URL относится к видео и плейлисту.
--age-limit YEARS                    Загружать только видео подходящие по возрасту
--download-archive FILE              Загружать только видео не перечисленные в архивном файле. Записывать ID всех
                                     загруженных видео в него.
--include-ads                        Загружать рекламу вместе с видео (экспериментально)

Параметры загрузки:

-r, --limit-rate RATE                Максимальная скорость загрузки в байтах в секунду (например, 50K или 4.2M)
-R, --retries RETRIES                Количество попыток (по умолчанию 10), или "infinite".
--fragment-retries RETRIES           Количество попыток для фрагмента (по умолчанию 10), или "infinite" (DASH,
                                     hlsnative и ISM)
--skip-unavailable-fragments         Пропускать недоступные фрагменты (DASH,
                                     hlsnative и ISM)
--abort-on-unavailable-fragment      Прекратить загрузку при недоступности фрагмента
--keep-fragments                     Сохранять скачанные фрагменты на диске после завершения загрузки; фрагменты удаляются по умолчанию
--buffer-size SIZE                   Размер буфера загрузки (например, 1024 или 16K) (по умолчанию 1024)
--no-resize-buffer                   Не автоматически изменять размер буфера. По умолчанию размер буфера автоматически изменяется от начального значения SIZE.
--http-chunk-size 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 для загрузки ('-' для stdin), один URL на строку. Строки,
                                     начинающиеся с '#', ';' или ']', считаются комментариями и игнорируются.
--id                                 Использовать только ID видео в имени файла
-o, --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                       Файл для чтения кук и сохранения куковой базы данных
--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, --quiet                          Активировать тихий режим
--no-warnings                        Игнорировать предупреждения
-s, --simulate                       Не скачивать видео и не записывать ничего на диск
--skip-download                      Не скачивать видео
-g, --get-url                        Симулировать, тихий режим но выводить URL
-e, --get-title                      Симулировать, тихий режим но выводить название
--get-id                             Симулировать, тихий режим но выводить ID
--get-thumbnail                      Симулировать, тихий режим но выводить URL миниатюры
--get-description                    Симулировать, тихий режим но выводить описание видео
--get-duration                       Симулировать, тихой режим но выводить продолжительность видео
--get-filename                       Симулировать, тихий режим но выводить имя выходного файла
--get-format                         Симулировать, тихий режим но выводить выходной формат
-j, --dump-json                      Симулировать, тихий режим но выводить информацию JSON. См. "ШАБЛОН ВЫВОДА"
                                     для описания доступных ключей.
-J, --dump-single-json               Симулировать, тихий режим но выводить информацию JSON для каждого аргумента командной строки.
                                     Если URL относится к плейлисту, выводится вся информация плейлиста в одной строке.
--print-json                         Быть тихим и выводить информацию о видео как JSON (видео все равно будет скачиваться).
--newline                            Выводить строку прогресса как новые строки
--no-progress                        Не выводить строку прогресса
--console-title                      Отображать прогресс в заголовке консоли
-v, --verbose                        Выводить различные отладочные сообщения
--dump-pages                         Выводить закачанные страницы закодированные с использованием base64 для отладки проблем (очень многословно)
--write-pages                        Записывать промежуточные страницы в файлы в текущей директории для отладки проблем
--print-traffic                      Отображать отправляемый и получаемый HTTP трафик
-C, --call-home                      Обращаться к серверу youtube-dl для отладки
--no-call-home                       НЕ обращаться к серверу youtube-dl для отладки

Обходные пути:

--encoding ENCODING                  Принудительно использовать указанную кодировку (экспериментально)
--no-check-certificate               Подавлять проверку сертификата HTTPS
--prefer-insecure                    Использовать незашифрованное соединение для получения информации о видео.
                                     (В настоящее время поддерживается только для YouTube)
--user-agent UA                      Указать пользовательский агент
--referer URL                        Указать пользовательский реферер, использовать если доступ к видео ограничен одним доменом
--add-header FIELD:VALUE             Указать пользовательский HTTP заголовок и его значение,
                                     разделенные двоеточием ':'. Вы можете использовать этот параметр несколько раз.
--bidi-workaround                    Обходить проблемы терминалов без поддержки двунаправленного текста. Требует наличия исполняемых файлов bidiv или fribidi в PATH.
--sleep-interval SECONDS             Количество секунд для ожидания перед каждой загрузкой при использовании отдельно или нижняя граница диапазона случайного ожидания перед каждой загрузкой (минимальное возможное количество секунд ожидания) при использовании вместе с параметром `--max-sleep-interval`.
--max-sleep-interval SECONDS         Верхняя граница диапазона случайного ожидания перед каждой загрузкой (максимальное возможное количество секунд ожидания).
                                     Должен использоваться только вместе с параметром `--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              Войти с этим аккаунтом ID.
-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` для получения списка доступных 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>.+)"`.

КОНФИГУРАЦИЯ

Вы можете настроить 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 всегда будет извлекать аудио, не копировать метку времени, использовать прокси и сохранять все видео в директории Movies в вашем домашнем каталоге:

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

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

# Не копировать метку времени
--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 для каждого экстрактора. Для этого вам нужно создать файл .netrc в вашем $HOME и ограничить права доступа на чтение/запись только для вас:

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

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

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 или поместить его в файл конфигурации.

На Windows вам также может потребоваться настроить переменную окружения %HOME% вручную. Например:

set HOME=%USERPROFILE%

ШАБЛОН ВЫВОДА

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

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

Основное использование заключается в том, чтобы не указывать никаких аргументов шаблона при загрузке одного файла, как в youtube-dl -o funny_video.flv "https://some/video". Однако он может содержать специальные последовательности, которые будут заменены при загрузке каждого видео. Специальные последовательности могут быть форматированы согласно операциям форматирования строк Python. Например, %(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 (строка): Никнейм или идентификатор загрузчика плейлиста

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

  • 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 -.

Текущий шаблон по умолчанию — это %\(title\)s-%\(id\)s.%\(ext\)s.

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

Шаблон вывода и файлы пакетных команд Windows

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

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

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

$ youtube-dl --get-filename -o '%(title)s.%(ext)s' BaW_jenozKc
youtube-dl test video ''_ä↭𝕐.mp4    # Различные странные символы

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

# Загружать видео из плейлиста YouTube в отдельную директорию, индексированную порядковым номером видео в плейлисте
$ youtube-dl -o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)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

# Передавать загружаемое видео на стандартный вывод
$ youtube-dl -o - BaW_jenozKc

ВЫБОР ФОРМАТА

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

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

Общий синтаксис выбора формата — это --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 "[height <=? 720][tbr>500]" выбирает видеозаписи до 720p разрешения (или видеозаписи где высота неизвестна) со скоростью передачи данных не менее 500 KBit/s.

Вы можете объединить видеозапись и аудиозапись двух форматов в один файл с помощью -f <video-format>+<audio-format> (требуется установленный ffmpeg или avconv). Например -f bestvideo+bestaudio загрузит лучший формат только с видеозаписью и лучший формат только с аудиозаписью и объединит их вместе с помощью ffmpeg/avconv.

Селекторы форматов также можно группировать с помощью скобок. Например если вы хотите загрузить лучшие mp4 и webm форматы с высотой менее 480p вы можете использовать -f '(mp4,webm)[height<480]'.

С апреля 2015 года и версии 2015.04.26 youtube-dl использует -f bestvideo+bestaudio/best как шаблон выбора формата по умолчанию (#5447, #5456). Если установлен ffmpeg или avconv это приводит к отдельной загрузке bestvideo и bestaudio и их объединению вместе в один файл для достижения лучшего общего качества доступного. В противном случае используется best и загружается лучшее доступное качество как единый файл. Best также требуется для видеозаписей не из YouTube так как они не предоставляют аудио и видеозапись в двух разных файлах. Если вы хотите загружать только некоторые DASH-форматы (например если вас не интересуют видеозаписи с разрешением выше 1080p), вы можете добавить -f bestvideo[height<=?1080]+bestaudio/best в ваш файл конфигурации. Обратите внимание что если вы используете youtube-dl для потоковой передачи на stdout и вероятно перенаправляете его в ваш медиаплеер, то есть явно указываете шаблон вывода как '-o-', youtube-dl все равно использует '-f best' выбор формата чтобы немедленно начать передачу контента вашему плееру и не ждать пока bestvideo и bestaudio будут загружены и объединены.

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

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

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

# Загрузить лучший доступный 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)?

Примеры:

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

# Загружать только видеозаписи загруженные 1 января 1970 года.
$ youtube-dl --date 19700101

# Загружать только видеозаписи загруженные в десятилетие 200x.
$ youtube-dl --dateafter 20000101 --datebefore 20091231

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

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

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

Если вы использовали 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' на плейлистах YouTube

YouTube изменил свой формат плейлистов в марте 2014 года и позже поэтому вам потребуется хотя бы версия youtube-dl 2014.07.25 чтобы скачивать все видеозаписи YouTube.

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

Я получаю ошибку при попытке использовать шаблон вывода: 'error: using output template conflicts with using title video ID or auto number'

Убедитесь что вы не используете '-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 или [mp### Выполняется ошибка из-за отсутствия MSVCR100.dll

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

Как настроить ffmpeg и youtube-dl в Windows? Куда следует поместить exe-файлы?

Если вы поместите youtube-dl и ffmpeg в ту же директорию, откуда запускаете команду, это сработает, но это довольно неудобно.

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

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

Как загружать файлы в определенную папку?

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

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

Либо добавьте https://www.youtube.com/watch?v= перед идентификатором, либо разделите идентификатор от опций с помощью --:

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

Как передать cookies в youtube-dl?

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

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

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

Передача cookies в 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 /path/to/download/archive/file.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) не может указывать один конкретный загрузчик.

Если вы добавите либо --hls-prefer-native, либо --hls-prefer-ffmpeg в свой конфиг, подмножество видео будет некорректно загружаться. Вместо этого гораздо лучше создать заявку или pull request, который подробно объяснит, почему встроенный или ffmpeg HLS-загрузчик является лучшим выбором для вашего случая использования.

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

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

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

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

Как можно ускорить работу над моей заявкой?

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

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

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

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

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

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

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

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

Почему мне нужно проходить так много формальностей при подаче багов?

Прежде чем у нас был шаблон заявки, несмотря на наши обширные инструкции по сообщению о багах, около 80% всех заявок были бесполезны. Например, люди использовали древние версии программы с сотнями выпусков назад, из-за простых синтаксических ошибок (не в youtube-dl, а в общем использовании оболочки), потому что проблема уже была сообщена несколько раз ранее, потому что люди не читали сообщения об ошибках даже тогда, когда они говорили "пожалуйста установите ffmpeg", потому что люди не указывали URL-адреса видеороликов и многие другие простые проблемы, которые легко избежать и которые часто были совершенно не связаны с youtube-dl.

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

ИНСТРУКЦИИ ДЛЯ РАЗРАБОТЧИКОВ

Большинству пользователей не нужно собирать youtube-dl; они могут скачать сборки или получить их из своей дистрибутивной системы.

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

python -m youtube_dl

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

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

Для версий Python 3.6 и выше вы можете использовать pynose для реализации nosetests. Оригинальный nose не был обновлен для версий 3.10 и выше.

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

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

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

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

Если вы хотите добавить поддержку нового сайта, сначала убедитесь, что этот сайт не специализируется на нарушении авторских прав. youtube-dl не поддерживает такие сайты; следовательно pull requests с добавлением поддержки таких сайтов будут отклонены.

После того как вы убедитесь, что сайт распространяет свой контент легально, вы можете следовать этому быстрому списку (предполагая, что ваш сервис называется yourextractor):

  1. Создайте форк этого репозитория

  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:

    # coding: 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': video_id,
                'title': title,
                'description': self._og_search_description(webpage),
                'uploader': self._search_regex(r'<div[^>]+id="uploader"[^>]*>([^<]+)<', webpage, 'uploader', fatal=False),
                # TODO дополнительные свойства (см. youtube_dl/extractor/common.py)
            }
  5. Добавьте импорт в 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 в словаре теста не учитываются.
  7. Ознакомьтесь с youtube_dl/extractor/common.py для возможных методов помощи и детального описания того, что должен и может возвращать ваш экстрактор. Добавьте тесты и код для тех свойств, которые хотите.

  8. Убедитесь, что ваш код соответствует правилам кодирования youtube-dl и проверьте код с помощью flake8:

     $ flake8 youtube_dl/extractor/yourextractor.py
  9. Убедитесь, что ваш код работает под всеми версиями Python, поддерживаемыми youtube-dl: 2.6, 2.7 и 3.2+.

  10. Когда тесты пройдут успешно, добавьте новые файлы и закоммитируйте их и отправьте результаты:

    $ git add youtube_dl/extractor/extractors.py
    $ git add youtube_dl/extractor/yourextractor.py
    $ git commit -m '[yourextractor] Add new extractor'
    $ git push origin yourextractor
  11. Наконец создайте pull request. Мы рассмотрим его и объединим.

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

Правила кодирования youtube-dl

Этот раздел представляет собой руководство по написанию кода экстракторов на языке программирования Python.

Экстракторы по своей природе очень хрупкие объекты поскольку зависят от структуры данных источника предоставленного сторонними хостерами медиаконтента вне вашего контроля и эта структура склонна к изменениям. Ваша задача как разработчика экстрактора заключается не только в написании кода который корректно извлекает ссылки на медиаконтент и метаданные но также минимизировать зависимость от структуры источника и даже предвидеть потенциальные будущие изменения быть готовым к ним. Это важно потому что это позволит экстрактору не ломаться при незначительных изменениях структуры источника таким образом сохраняя работоспособность старых версий youtube-dl. Даже если эта проблема легко решается выпуском новой версии youtube-dl со встроенным исправлением все предыдущие версии становятся сломанными во всех репозиториях и пакетах дистрибутивов которые могут не так быстро получить обновление от нас. Ненужно говорить что некоторые дистрибутивы с непрерывными выпусками могут никогда не получить обновление вообще.

Обязательные и опциональные метаполя

Для работы youtube-dl зависит от метаданных которые ваш экстрактор извлекает и предоставляет youtube-dl выраженных через словарь информации или просто info dict. Только следующие метаполя в info dict считаются обязательными для успешного процесса извлечения:

  • id (идентификатор медиаконтента)
  • title (название медиаконтента)
  • url (URL для скачивания медиаконтента) или formats

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

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

Пример

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

meta = self._download_json(url, video_id)

Предположим на этом этапе структура meta такова:

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

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

description = meta.get('summary')  # правильно

А не так:

description = meta['summary']  # неправильно

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

Аналогично при извлечении опциональных данных со страницы HTML методами _search_regex, _html_search_regex или аналогичными следует передавать параметр fatal=False, например:

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 присутствует в нескольких местах попробуйте извлечь его хотя бы из некоторых из них. Это делает процесс более будущедоказательным на случай если некоторые источники станут недоступными.

Пример

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

title = meta['title']

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

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

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

Этот код попробует извлечь значение из словаря 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](https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl # сортировка, вызов исключения, если форматы отсутствуют self._sort_formats(fmts)

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

# ИНТЕГРАЦИЯ YOUTUBE-DL

youtube-dl стремится быть хорошей командной строкой, и поэтому его можно вызывать из любой языковой среды программирования. Если у вас возникают проблемы с парсингом его вывода, не стесняйтесь [создать отчет](https://github.com/ytdl-org/youtube-dl/issues/new).

Из программы на Python вы можете интегрировать youtube-dl более мощным образом, как показано ниже:

```python
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 (веб-чат).

Открытие отчета об ошибке или предложения

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

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

$ youtube-dl -v <ваша командная строка>
[debug] System config: []
[debug] User config: []
[debug] Command-line args: [u'-v', u'https://www.youtube.com/watch?v=BaW_jenozKcj']
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
[debug] youtube-dl version 2015.12.06
[debug] Git HEAD: 135392e
[debug] Python version 2.6.6 - Windows-2003Server-5.2.3790-SP2
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
[debug] Proxy map: {}
...

Не публикуйте скриншоты подробных логов; допустим только простой текст.

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

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

Достаточно ли описание самой задачи?

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

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

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

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

Для отчетов об ошибках это означает, что ваш отчет должен содержать полный вывод 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% отчетов, которые мы получаем, уже исправлены, но люди используют устаревшие версии. Это относится и к запросам на новые функции.

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

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

Достаточно ли контекста в вашем отчете об ошибке?

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

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

Содержит ли задача одну и только одну проблему?

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

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

Кому потребуется эта функция?

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

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

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

АВТОРСКИЕ ПРАВА

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

Этот файл README был написан Daniel Bolton и также выпущен в общественное достояние.

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

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

Введение

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