Skip to content

Linda-chan/youtube-dl-scripts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

youtube-dl Scripts

Эти скрипты предназначены для запуска youtube-dl с некоторыми полезными параметрами. Разделение идёт по качеству запрашиваемого видео и использованию прокси.

Так же доступны варианты скриптов для форков программы yt-dlp и ytdl-patched. По большей части они идентичны оригинальным скриптам и добавляют разве что новый функционал, которого не было в youtube-dl. Поэтому дальше все версии программы будут называться одним словом – «youtube-dl».

Отличия платформ

Все скрипты представлены в двух версиях: BAT файлы для Windows и скрипты для Bash (Linux и тому подобное). В основном они идентичны, но Windows версия больше ориентирована на портабельность.

Windows

  • Рабочим каталогом считается каталог, в котором расположен запускаемый BAT файл. Текущий каталог может совпадать с рабочим, но это не одно и то же.

  • Ищет исполняемый файл youtube-dl в рабочем каталоге.

  • Ищет ffmpeg в подкаталоге «ffmpeg\bin» рабочего каталога.

  • Ищет AtomicParsley в подкаталоге «AtomicParsley» рабочего каталога.

Если ffmpeg и/или AtomicParsley уже установлены в системе, и их каталоги присутствуют в PATH, то это тоже должно работать.

Bash

  • Рабочим каталогом считается текущий каталог. Этот каталог может не совпадать с с каталогом, в котором лежат sh файлы.

  • Считает, что исполняемый файл youtube-dl установлен где-то в системе (например, в «/usr/local/bin» или куда его запихнёт пакетный менеджер).

  • Считает, что ffmpeg установлен в системе.

  • Считает, что AtomicParsley установлен где-то в системе.

Каталоги и файлы

При запуске скрипта (и на время его выполнения) переменная HOME переписывается рабочим каталогом. Таким образом все дополнительные файлы и каталоги будут искаться в нём.

.cache

Этот каталог создаётся автоматически в рабочем каталоге для хранения неких данных, обычно прилетаемых с YouTube. Для этого на время работы скриптов переписывается переменная XDG_CACHE_HOME.

Пользовательский конфиг

При запуске скрипт ищет файл «youtube-dl.cfg» в рабочем каталоге. Если такой файл обнаруживается, он назначается конфигом для youtube-dl. Из него программа берёт дополнительные параметры как если бы они были переданы через командную строку.

Например, его содержимое может быть таким:

--write-description
--write-info-json
--write-annotations

Ещё больше примеров.

.netrc

Данный файл содержит логины и пароли для сервисов и используется youtube-dl для аутентификации при скачивании. Ищется он тоже в рабочем каталоге.

Документация по данному файлу.

cookies.txt

Альтернативный метод аутентификации – использование файла «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, качающий видео худшего качества через прокси.

Качество видео

c0

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

c1

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

Этот вариант может уступать варианту c0, поскольку выбирает готовый формат, а не собирает результат по кускам. Например, на YouTube часто бывает ситуация, когда HD видео присутствует отдельным форматом без звука (а HD звук – без видео), зато формат со звуком и видео имеет более низкое разрешение и качество звука похуже.

В предыдущих версиях скрипта этот режим назывался «c0».

c5

Этот вариант основывается на предположении, что видео среднего качества имеет разрешение 360 пикселей по вертикали. Таким образом скрипт запрашивает не определённое качество (лучшее/худшее), а формат 360p или меньше, если такого нет.

В предыдущих версиях скрипта в этом варианте запрашивался формат Webm, который, как правило, содержал видео в 360p. Так же этот вариант работал только на YouTube. Но из-за каких-то изменений на самом YouTube, формат Webm теперь может содержать лучшее качество для некоторых видеороликов. Поэтому теперь скрипт ориентируется не на формат, а на максимальное разрешение. Возможно, теперь он будет полезен и на других видеосервисах.

c9

youtube-dl автоматически выбирает худшее качество из того, что предложит сервер. На YouTube обычно это – 3gp (для старых мобильных телефонов). На других серверах может быть по-разному.

Внимание! На серверах, отличных от YouTube, худшего качества может не быть (ролик может быть в одном варианте вообще), и youtube-dl скачает то, что есть. Тем, что есть может оказаться то же видео в HD качестве.

Так же на серверах отличных от YouTube худшее качество может быть в том же формате, что и лучшее, например, в MP4. Поэтому файлы обоих вариантов будут иметь одинаковое имя.

Будьте бдительны!

cZ

В этом варианте формат видео выбирает сам пользователь. Его нужно передать первым аргументом скрипта в виде кода формата, который можно подсмотреть в первой колонке («Format code») таблички, которую показывает formats версия скриптов.

Так же можно указать общие значения, такие как «best», «worst», «mp4», «bestaudio/best» и так далее. Подробности смотрите в документации к youtube-dl, параметр «--format».

Указанный пользователем формат применяется ко всем URL в командной строке или файле списка. Если такого формата для очередного видео не окажется, youtube-dl пропустит его и перейдёт к следующему URL.

Обновление описаний в Descript.ion

Данные скрипты настроены на сохранение предпросмотров к видео в 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, но привносят некоторые нововведения, из которых данные скрипты используют пока только сохранение разбивки видео на главы.

yt-dlp

В Windows используется x64 екзешник программы – «yt-dlp.exe». При необходимости использования других вариантов (например, «yt-dlp_x86.exe») придётся править BAT файлы ручками. Или переименовывать екзешник, что может вызвать проблемы при обновлении и не рекомендуется.

Пользовательский конфиг этой версии называется «yt-dlp.cfg». Файл информации – «yt-dlp-info.txt».

ytdl-patched

В 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

Twitter

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

Чтобы бороться с этим, можно указать вот такой нехитрый формат для выходных файлов прямо в командной строке скрипта перед URL:

-o "@%(uploader_id)s - [%(id)s].%(ext)s"

Беды с Bash

Изменения с 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 сто лет не использовался, и я просто выкинула соответствующие скрипты.
    • [+] Обновила документацию.

Маленький копирайт

  1. Программа и исходный код распространяются бесплатно.

  2. Вы имеете право распространять их на тех же условиях.

  3. Вы не имеете права использовать имя автора после модификации исходного кода.

  4. При этом желательно указывать ссылку на автора оригинальной версии исходного кода.

  5. Вы не имеете права на платное распространение исходного кода, а также программных модулей, содержащих данный исходнй код.

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

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

  8. По любым вопросам, связанным с данной программой, обращайтесь по адресу [email protected]

About

Windows and Linux scripts for youtube-dl

Resources

License

Stars

Watchers

Forks

Packages

No packages published