Эти скрипты предназначены для запуска youtube-dl с некоторыми полезными параметрами. Разделение идёт по качеству запрашиваемого видео и использованию прокси.
Так же доступны варианты скриптов для форков программы yt-dlp и ytdl-patched. По большей части они идентичны оригинальным скриптам и добавляют разве что новый функционал, которого не было в youtube-dl. Поэтому дальше все версии программы будут называться одним словом – «youtube-dl».
Все скрипты представлены в двух версиях: BAT файлы для Windows и скрипты для Bash (Linux и тому подобное). В основном они идентичны, но Windows версия больше ориентирована на портабельность.
-
Рабочим каталогом считается каталог, в котором расположен запускаемый BAT файл. Текущий каталог может совпадать с рабочим, но это не одно и то же.
-
Ищет исполняемый файл youtube-dl в рабочем каталоге.
-
Ищет ffmpeg в подкаталоге «ffmpeg\bin» рабочего каталога.
-
Ищет AtomicParsley в подкаталоге «AtomicParsley» рабочего каталога.
Если ffmpeg и/или AtomicParsley уже установлены в системе, и их каталоги присутствуют в PATH, то это тоже должно работать.
-
Рабочим каталогом считается текущий каталог. Этот каталог может не совпадать с с каталогом, в котором лежат sh файлы.
-
Считает, что исполняемый файл youtube-dl установлен где-то в системе (например, в «/usr/local/bin» или куда его запихнёт пакетный менеджер).
-
Считает, что ffmpeg установлен в системе.
-
Считает, что AtomicParsley установлен где-то в системе.
При запуске скрипта (и на время его выполнения) переменная HOME переписывается рабочим каталогом. Таким образом все дополнительные файлы и каталоги будут искаться в нём.
Этот каталог создаётся автоматически в рабочем каталоге для хранения неких данных, обычно прилетаемых с YouTube. Для этого на время работы скриптов переписывается переменная XDG_CACHE_HOME.
При запуске скрипт ищет файл «youtube-dl.cfg» в рабочем каталоге. Если такой файл обнаруживается, он назначается конфигом для youtube-dl. Из него программа берёт дополнительные параметры как если бы они были переданы через командную строку.
Например, его содержимое может быть таким:
--write-description
--write-info-json
--write-annotations
Данный файл содержит логины и пароли для сервисов и используется youtube-dl для аутентификации при скачивании. Ищется он тоже в рабочем каталоге.
Документация по данному файлу.
Альтернативный метод аутентификации – использование файла «cookies.txt», расположенного в рабочем каталоге. Содержимое – экспортированные куки из броузера, в котором уже выполнен вход на интересующие сервисы.
Документация по данному файлу, а так же по тому, как получить этот файл. Обратите внимание на описание формата файла, особенно – символы переноса строк.
Настройки прокси берутся из системы. В Windows это – настройки Internet Explorer («Свойства обозревателя» или что-то такое в Панели управления), в Linux – переменная HTTP_PROXY (и сопутствующие). Если в системе прокси не определён, то соединение производится напрямую.
Так же прокси можно указать в пользовательском конфиге, используя ключ «--proxy».
Так же каждый скрипт имеет версию, которая принудительно отключает использование прокси.
Имя файла скрипта выглядит примерно так:
youtube-dl-XX-YY.ZZ
Где:
-
XX – вариант прокси:
- np – прямое соединение.
- prx – системный прокси.
-
YY – качество видео, можно воспринимать как «степень сжатия» (подробности – ниже):
- c0 – лучшее.
- c1 – похуже.
- c5 – среднее.
- c9 – худшее.
- cZ – определяется пользователем.
- audio – извлечение аудио. Программа попытается скачать аудиофайл лучшего качества, а если это не получится, то видеофайл со звуковой дорожкой лучшего качества. В итоговый файл данные конвертируются при помощи ffmpeg. Если он отсутствует, программа оставит то, что прислал сервер.
- formats – такой вариант скрипта просто показывает список доступных для скачки форматов, ничего не качая.
- update – особый случай. Этот файл ничего не качает, а просто пытается обновить youtube-dl до последней версии и создаёт файл youtube-dl.txt со справкой по параметрам программы.
- save-info – ещё один особый случай. Этот файл тоже ничего не качает, а сохраняет информацию о текущей версии в файл «youtube-dl-info.txt». Туда попадают юзерагент, который уходит на сервер, и все реализованные экстракторы.
-
ZZ – расширение:
- bat – Windows BAT файл.
- sh – Bash скрипт.
Например:
youtube-dl-prx-c9.bat
Это – BAT файл для Windows, качающий видео худшего качества через прокси.
В этом режиме качество не указывается совсем, и youtube-dl собирает видео из лучших форматов (например, HD видео без звука и HD аудио без изображения), а не выбирает уже готовый формат. Для его работы скорее всего понадобится ffmpeg.
youtube-dl автоматически выбирает лучшее качество из того, что предложит сервер.
Этот вариант может уступать варианту c0, поскольку выбирает готовый формат, а не собирает результат по кускам. Например, на YouTube часто бывает ситуация, когда HD видео присутствует отдельным форматом без звука (а HD звук – без видео), зато формат со звуком и видео имеет более низкое разрешение и качество звука похуже.
В предыдущих версиях скрипта этот режим назывался «c0».
Этот вариант основывается на предположении, что видео среднего качества имеет разрешение 360 пикселей по вертикали. Таким образом скрипт запрашивает не определённое качество (лучшее/худшее), а формат 360p или меньше, если такого нет.
В предыдущих версиях скрипта в этом варианте запрашивался формат Webm, который, как правило, содержал видео в 360p. Так же этот вариант работал только на YouTube. Но из-за каких-то изменений на самом YouTube, формат Webm теперь может содержать лучшее качество для некоторых видеороликов. Поэтому теперь скрипт ориентируется не на формат, а на максимальное разрешение. Возможно, теперь он будет полезен и на других видеосервисах.
youtube-dl автоматически выбирает худшее качество из того, что предложит сервер. На YouTube обычно это – 3gp (для старых мобильных телефонов). На других серверах может быть по-разному.
Внимание! На серверах, отличных от YouTube, худшего качества может не быть (ролик может быть в одном варианте вообще), и youtube-dl скачает то, что есть. Тем, что есть может оказаться то же видео в HD качестве.
Так же на серверах отличных от YouTube худшее качество может быть в том же формате, что и лучшее, например, в MP4. Поэтому файлы обоих вариантов будут иметь одинаковое имя.
Будьте бдительны!
В этом варианте формат видео выбирает сам пользователь. Его нужно передать первым аргументом скрипта в виде кода формата, который можно подсмотреть в первой колонке («Format code») таблички, которую показывает formats версия скриптов.
Так же можно указать общие значения, такие как «best», «worst», «mp4», «bestaudio/best» и так далее. Подробности смотрите в документации к youtube-dl, параметр «--format».
Указанный пользователем формат применяется ко всем URL в командной строке или файле списка. Если такого формата для очередного видео не окажется, youtube-dl пропустит его и перейдёт к следующему URL.
Данные скрипты настроены на сохранение предпросмотров к видео в JPG файлах, а так же некоторых свойств видео в альтернативных потоках NTFS в Windows и расширенных атрибутах (xattr) в Linux. Одно из таких свойств имеет имя user.xdg.referrer.url и содержит URL исходного видео.
Я написала скрипт для Windows, который красиво извлекает эти адреса и записывает их в Descript.ion.
Проще всего его использовать через локальный конфиг (см. выше). Для этого в файл youtube-dl.cfg следует записать что-то вроде такого:
--exec 'CScript.EXE //NoLogo "C:\Scripts\XdgReferrer To Description\XdgReferrerToDescription.WSF" /jpg {}'
Ключ «/jpg» сохранит описание и для файла предпросмотра, если такой будет.
Как было сказано выше, имеются варианты скриптов для yt-dlp и ytdl-patched. Это форки оригинальной программы, которые появились из-за заморозки разработки оригинальной версии программы. Похоже, они обратно совместимы с youtube-dl, но привносят некоторые нововведения, из которых данные скрипты используют пока только сохранение разбивки видео на главы.
В Windows используется x64 екзешник программы – «yt-dlp.exe». При необходимости использования других вариантов (например, «yt-dlp_x86.exe») придётся править BAT файлы ручками. Или переименовывать екзешник, что может вызвать проблемы при обновлении и не рекомендуется.
Пользовательский конфиг этой версии называется «yt-dlp.cfg». Файл информации – «yt-dlp-info.txt».
В Windows используется екзешник программы с красной иконкой – «ytdl-patched-red.exe». При необходимости использования варианта с белой иконкой («ytdl-patched-white.exe») или любыми другими иконками, которые нарисует разработчик, придётся править BAT файлы ручками. Либо так же переименовывать екзешник с теми же проблемами.
Пользовательский конфиг этой версии называется «ytdl-patched.cfg». Файл информации – «ytdl-patched-info.txt».
Скрипты работают вот по такому принципу:
-
Конструируется командная строка, содержащая нужные нам опции, например, «--force-ipv4» и «--netrc».
-
К ней добавляется командная строка, переданная скрипту. Обычно там URL.
-
Екзешник или бинарник youtube-dl запускается с этой объединённой командной строкой.
Из вышесказанного вытекает то, что запускаемой программе можно передать не только URL, но и любые другие параметры, просто указав их в командной строке скрипта наряду с (или вместо) URL. Например:
youtube-dl-prx-c0.bat --xattr-set-filesize URL
И это даже не требует модифицировать сами скрипты! Если же параметр приходится использовать слишком часто, всегда можно внести его в пользовательский конфиг.
Кстати, именно так работает передача скрипту файла списка адресов вместо самих адресов (что указано в подсказке по использованию). Параметр «-a» (а так же «--batch-file») – это параметр самого youtube-dl.
youtube-dl-prx-c0.sh -a ~/todo.txt
При скачке видео из Твиттера, youtube-dl использует текст поста в качестве имени файла. В последнее время в эти самые посты в невероятных количествах набивают всякий мусор вроде эмодзи, в результате чего файлы либо не сохраняются, либо потом не открываются.
Чтобы бороться с этим, можно указать вот такой нехитрый формат для выходных файлов прямо в командной строке скрипта перед URL:
-o "@%(uploader_id)s - [%(id)s].%(ext)s"
Изменения с Bash версией скрипта были связаны с тем, что я не смогла в имеющемся способе работы скриптов побороть одну мерзкую особенность.
Допустим, в командной строке мне нужно указать имя файла пользовательского конфига. Это я делаю, собирая специальную переменную, ещё до вызова бинарника youtube-dl. Например, так:
PARAMS="$PARAMS --config-location $MY_DP/youtube-dl.cfg"
MY_DP – это переменная с каталогом, в котором лежит выполняющийся скрипт.
Далее я запускаю бинарник youtube-dl как-то так:
youtube-dl --proxy "" --format worst $PARAMS "$@"
Здесь сначала идут параметры, вписанные прямо в этой строке, потом разворачивается переменная, которую мы конструировали ранее, а затем – параметры, которые получил скрипт при запуске.
И вот, если полный путь к каталогу, в котором лежит скрипт, будет пробел или что-то ещё такое, то youtube-dl получит неправильные аргументы и сломается.
Разумеется, имена файлов нужно передавать в кавычках, но... Но это не работает. По какой-то причине бинарник получает не то, что должно, и, соответственно, такие варианты не работают:
PARAMS="$PARAMS --config-location '$MY_DP/youtube-dl.cfg'"
PARAMS="$PARAMS --config-location \"$MY_DP/youtube-dl.cfg\""
PARAMS='$PARAMS --config-location "$MY_DP/youtube-dl.cfg"'
Более того, я пыталась экранировать имя файла через find (с параметром «--printf»), но и там ничего не сработало.
Казалось бы, нужно просто указать имя файла при запуске бинарника, а не при конструировании переменной, и всё. Однако файл должен существовать, иначе случится ошибка при работе самого youtube-dl.
До данных изменений я делала это как-то так:
if [[ -e "$MY_DP/youtube-dl.cfg" ]] ; then
youtube-dl $PARAMS --config-location "$MY_DP/youtube-dl.cfg" "$@"
else
youtube-dl $PARAMS "$@"
fi
Но с появлением «cookies.txt», который тоже должен существовать, мне пришлось бы сделать лесенку. А если бы появился ещё какой-то файл в будущем, лесенка сильно усложнилась бы.
Поэтому я сдалась и сделала так, чтобы рабочим каталогом был текущий каталог, что на самом деле очень плохо, но позволяет делать так:
PARAMS="$PARAMS --config-location ./youtube-dl.cfg"
Живите теперь с этим.
-
23.07.2017
- [+] В подсказку по использованию добавлен пример с ключами «-a» и «--batch-file». Сама поддержка уже была в скриптах по причине передачи всех параметров BAT и sh файлов программе.
- [+] Теперь появился нормальный ченджлог. Предыдущие изменения можно выяснить разве что только из истории коммитов.
-
27.08.2017
- [+] Появилась поддержка пользовательского конфига в Windows.
-
24.06.2018
- [-] Пофиксила уйму кавычек в sh файлах.
- [+] Появилась поддержка пользовательского конфига в Linux.
- [-] При отсутствии файла .netrc, больше не ругаются ни Bash, ни youtube-dl.
-
23.08.2018
- [+] с5 версия скриптов теперь запрашивает не Webm, а 360p.
-
26.02.2023
- [+] Появились варианты скриптов для yt-dlp и ytdl-patched.
- [+] Изменился смысл с0 версии скриптов.
- [+] Старые с0 версии скриптов переименованы в c1.
-
13.05.2023
- [+] Добавлена поддержка файлов cookies.txt.
- [+] Подсказка по использованию теперь чуть компактнее.
- [+] Подсказка по использованию в Bash версии теперь выводит имя файла скрипта без каталога.
- [+] В BAT версии немного оптимизированы переменные типа «%~dp0». Раньше использовалась запись вида «%~d0%~p0».
- [+] Bash скрипты теперь не пытаются получить свой каталог, а считают рабочим каталогом текущий. Попутно былые проблемы с симлинками должны исчезнуть.
- [+] Метод combo сто лет не использовался, и я просто выкинула соответствующие скрипты.
- [+] Обновила документацию.
-
Программа и исходный код распространяются бесплатно.
-
Вы имеете право распространять их на тех же условиях.
-
Вы не имеете права использовать имя автора после модификации исходного кода.
-
При этом желательно указывать ссылку на автора оригинальной версии исходного кода.
-
Вы не имеете права на платное распространение исходного кода, а также программных модулей, содержащих данный исходнй код.
-
Программа и исходный код распространяются как есть. Автор не несёт ответственности за любые трагедии или несчастные случаи, вызванные использованием программы и исходного кода.
-
Для любого пункта данного соглашения может быть сделано исключение с разрешения автора программы.
-
По любым вопросам, связанным с данной программой, обращайтесь по адресу [email protected]