Как появилась на свет программа youtube-dl

Original author: Ricardo García
  • Translation
Как известно, в данный момент репозиторий youtube-dl на GitHub заблокирован по DMCA-запросу от RIAA. Хотя я не могу комментировать текущие планы мейнтейнеров или текущие дискуссии, но после сделанных обвинений RIAA я подумал, что мне как создателю программы и первому мейнтейнеру будет полезно рассказать о первых годах youtube-dl.

Сборщики меди


В любой хорошей истории должен быть злодей, и в качестве такого персонажа я решил выбрать сборщиков меди — воришек, которые собирали цветные металлы в округе. Именно они подтолкнули к созданию youtube-dl. В далёком 2006 году мой посёлок находился в 5-10 километрах от небольшого города Авилес на севере Испании. Жители Авилеса наслаждались хорошей инфраструктурой и услугами, включая кабельное телевидение и ADSL-доступ в интернет. В моём районе ничего такого не было: слишком далеко от телефонной станции с ADSL, а сборщики меди годами воровали медные провода по пути к ней, время от времени вызывая перебои в телефонной связи и заставляя телефонную компанию заменять эти провода более слабыми и тонкими, потому что их тоже, скорее всего, украдут. Это продолжалось несколько лет.

Единственным вариантом выхода в интернет из дома был модем 56k V.90. На самом деле качество связи было настолько плохим, что приходилось для стабильности снижать скорость до 33,6 Кбит/с. Фактическая скорость загрузки редко превышала 4 КБ/с. В то же время в интернете появился интересный видеосервис YouTube, он быстро набирал популярность, а в конце того же года его купила компания Google.

Не спать всю ночь, чтобы посмотреть кусочек


Просмотр любого видео на YouTube по соединению 33,6 Кбит/с был мучительным опытом. Практически любое видео загружалось целую вечность. Например, загрузка короткого 10-мегабайтного видео, если посчитать, занимает 40 минут, что делает потоковую передачу невозможной. Более длинное и качественное видео требует несколько часов и полностью занимает канал, не говоря уже о том, что соединение может в любой момент прерваться — и загрузку придётся начинать заново! А представьте, что вам очень понравилось конкретное видео и вы хотите посмотреть его во второй или третий раз. Повторение этого процесса становилось практически актом мазохизма.

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

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

Запуск Ethereal


Первая версия работала только на YouTube. У программы практически не было никакой нормальной архитектуры, потому что она была не нужна. Написанная как простой скрипт, она шла прямо к сути. Размер программы 223 строки, причём только 143 фактически кода, 44 строки комментариев и 36 пустые. Название выбрано из чистого удобства: youtube-dl очевидно, понятно, трудно забыть и можно интуитивно ввести как “Y-O-U-TAB” в консоли.

Поскольку я уже несколько лет пользовался Linux, то решил опубликовать программу под свободной лицензией (MIT в первых версиях) на случай, если кто-то найдёт её полезной. Тогда GitHub ещё не появился и нам приходилось обходиться SourceForge. Но там при создании нового проекта следовало заполнять утомительную форму. Поэтому вместо SourceForge я по-быстрому выложил код на личной страничке, которую давал интернет-провайдер. Хотя сегодня это кажется необычным, но в то время провайдеры обычно выдавали пользователям адрес электронной почты и немного хостинга, куда можно было загрузить файлы по FTP. Таким образом, вы могли поднять собственный личный сайт в сети. Первая версия программы опубликована 08.08.2006, хотя к тому времени я уже несколько недель использовал её.

В процессе разработки нужно было понять операции браузера Firefox при просмотре видео на YouTube. Если я правильно помню, в Firefox ещё не встроили инструменты разработки для анализа сетевой активности. Соединения шли в основном по HTTP, так что неоценимым инструментом для анализа сетевого трафика стала программа Wireshark, известная в то время как Ethereal. Я написал youtube-dl с конкретной целью сделать то же самое, что делал веб-браузер при извлечении видео. Программа даже отправляла такую же строку user-agent, дословно скопированную из Firefox для Linux, чтобы убедиться, что сайт отправит программе те же веб-страницы, что и браузеру.

Кроме того, тогда YouTube использовал плеер Adobe Flash. Видео подавались в виде флэш-видеофайлов (FLV), поэтому для просмотра в браузере требовался проприетарный плагин (многие вспомнят страшную библиотеку libflashplayer.so), поэтому любые инструменты разработки в браузере были бесполезными. Этот проприетарный плагин являлся постоянным источником уязвимостей безопасности и проблем. У меня стояло расширение Firefox под названием Flashblock, которое не позволяло контенту загружаться по умолчанию и заменяло его элементами-заполнителями с кликабельным значком, поэтому контент загружался только по запросу, а библиотека плагинов не использовалась, если пользователь её не запрашивал.

Кроме повышения безопасности, у Flashblock было ещё два преимущества. Во-первых, он удалял много шумных и неприятных баннеров, которые тоже могли стать источником проблем безопасности. Во-вторых, облегчал анализ процесса загрузки видео в плеер. Я ждал, пока страница полностью загрузится, а затем уже запускал Wireshark непосредственно перед тем, как нажать на значок Flashblock, запуская загрузку видео. Таким образом, единственный трафик для анализа был связан с плагином, загружающим приложение видеоплеера, и самим приложением, загружающим видео.

Стоит также отметить, что плагин Flash Player в то время уже загружал копию видео на жёсткий диск (под Linux они хранились в /tmp), и многие пользователи полагались на эту функциональность, чтобы сделать копию без дополнительных инструментов. Так что youtube-dl был удобнее только потому, что извлекал название видео и присваивал его файлу в автоматическом режиме, например.

О, свежее мясо!


В конечном итоге Flash Player изменили, так что видео стало труднее извлекать. Одной из первых мер было разорвать связь с видеофайлом после его создания, чтобы i-node всё ещё существовал и был доступен использующему его процессу (до тех пор, пока не будет закрыт), сохраняя файл невидимым с точки зрения файловой системы. По-прежнему можно было захватить файл с помощью файловой системы /proc для изучения файловых дескрипторов, используемых процессом браузера, но с каждым из этих небольших шагов youtube-dl становился всё более и более удобным.

Как и многие энтузиасты опенсорса в то время, я использовал Freshmeat для подписки на новые выпуски проектов, которые меня интересовали. Когда я создавал youtube-dl, я также создал запись проекта на этом веб-сайте, чтобы пользователи могли получать уведомления о новых выпусках и журнал изменений с перечислением новых функций, исправлений и улучшений. В каталоге Freshmeat можно было искать новые и интересные проекты, на первой странице публиковались последние обновления, обычно несколько десятков в день. Предполагаю, что именно таким способом Джо Барр (покойся с миром), редактор linux.com, узнал о программе и решил написать о ней статью ещё в 2006 году. В то время Linux.com был одним из самых популярных ресурсов для энтузиастов Linux вместе с другими классическими сайтами, такими как Slashdot или Linux Weekly News. По крайней мере, для меня.

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

Подсчёт трафика


Перенесёмся в 2008 год. Популярность youtube-dl продолжала медленно расти, и пользователи часто просили сделать подобные программы для загрузки с других сайтов, и я несколько раз уступал этой просьбе. Именно в этот момент я решил переписать программу с нуля, чтобы внедрить изначальную поддержку нескольких видеосайтов. У меня имелось несколько простых идей, как разделить внутренности программы на несколько частей, чтобы упростить наиболее важные части: отдельно загрузчик файлов, общий для всех веб-сайтов, а отдельно — экстракторы информации: объекты (классы), которые содержат код, специфичный для конкретного видеосайта. Когда задаётся URL или псевдо-URL, запрашиваются экстракторы, чтобы узнать, какой из них может обработать этот тип URL, а затем запрашивается извлечение информации об этом видео или списке видео, с основной целью получения URL видео или списка URL-адресов с доступными форматами, а также некоторых других метаданных, таких как заголовки, например.

Я также воспользовался возможностью сменить систему контроля версий и перенести проект на другой хостинг. В тот момент Git выигрывал войну распределённых систем управления версиями, но у Mercurial тоже было много пользователей. Я протестировал оба и решил, что Mercurial нравится немного больше, чем Git. Я начал использовать его для youtube-dl и разместил проект на Bitbucket, что было естественным выбором. В то время на Bitbucket размещались только репозитории Mercurial, а на GitHub — только Git. Оба запустились в 2008 году и стали глотком свежего воздуха по сравнению с SourceForge. Разные пространства имён проектов для каждого пользователя (то есть имя вашего проекта не обязательно должно быть глобально уникальным, а уникальным только для ваших проектов) с распределёнными системами управления версиями означало, что вы можете публиковать свои личные проекты в течение нескольких минут на любом из двух сайтов. В любом случае, перенос истории проекта в Git и перенос проекта на GitHub последовали через пару лет.

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

Технологический контекст также немного изменился в тот год. Начали набирать обороты мобильные планы с передачей данных, и в конце того же года я купил себе 3G-модем и тарифный план, который впервые позволил мне просматривать веб-страницы на приличной скорости. В любом случае, это не заставило меня прекратить использовать youtube-dl. Я платил 45 евро в месяц, но ежемесячный лимит данных был ограничен 5 ГБ, то есть я мог использовать в среднем только около 150 МБ в день. А скорость позволяла скачать гораздо больше, так что приходилось следить за трафиком и избирательно выбирать контент, избегая больших загрузок, если это возможно. Поэтому youtube-dl очень помог предотвратить многократную загрузку больших видеофайлов и не выйти за пределы тарифного плана.

Эпизод: новый дом


Некоторое время спустя, в конце 2009 года, я переехал и, наконец, начал жить со своей девушкой (теперь моей женой и матерью двоих детей) в Авилесе. Впервые у меня появился высокоскоростной интернет, который был стандартом для многих моих друзей и семьи в течение многих лет. Помню, что это было кабельное соединение 100/10 Мбит/с (скачивание/отдача) без ограничения трафика. Это определённо знаменовало поворотный момент в том, как часто я использовал youtube-dl и сколько внимания уделял проекту.

Чуть позже я, наконец, перенёс код в Git и GitHub. В то время YouTube начал экспериментировать с видео HTML5, которое станет вариантом по умолчанию примерно в 2015 году. В 2011 году я уже несколько лет как работал полный рабочий день в качестве инженера-программиста, и в целом по возвращении с работы мне не очень хотелось программировать и настраивать youtube-dl или реализовывать по просьбе пользователей функции, который я сам не собирался использовать лично.

Во второй половине 2011 года в разгаре другого важного проекта я решил уйти с поста мейнтейнера youtube-dl, поскольку уже несколько месяцев не справлялся с задачей. Филипп Хагемейстер показал себя как отличный программист, и он прислал несколько пул-реквестов на GitHub с исправлениями, которые интересовали многих людей. Я дал ему доступ на коммиты к моему репозиторию youtube-dl, и по сути это был конец истории с моей стороны. Логи основной ветки показывают у меня непрерывный поток коммитов до марта 2011 года, а затем скачок на август 2011 года с мерджем от Филиппа. С тех пор я сделал единственный коммит в 2013 году для изменения в исходном коде rg3.github.com на rg3.github.io, когда GitHub перемещал пользовательские страницы с USERNAME.github.com на USERNAME.github.io, чтобы избежать проблем безопасности с вредоносным кодом на собственном домене, если я правильно помню.

Хотя я не участвовал в разработке youtube-dl, в течение многих лет официальная страница проекта по-прежнему лежала под моим аккаунтом на https://github.com/rg3/youtube-dl и https://rg3.github.io/youtube-dl/. Мне нужно было появляться, когда Филипп или другие мейнтейнеры просили дать доступ на коммиты дополнительным разработчикам, таким как Филиппо Вальсорда или Сергей М., один из нынешних мейнтейнеров. К сожалению, в 2019 году случилась небольшая проблема с троллями в трекере, а блокировать пользователей разрешено только владельцам проектов. Это заставило нас наконец перенести проект в организацию GitHub, куда были приглашены все, кто имел доступ на коммиты (хотя и не все присоединились). Организация GitHub позволила мейнтейнерам действовать более свободно, не дёргая меня по малейшему поводу.

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

Офлайн и бесплатно


Хотел бы ещё раз отметить, что назначение youtube-dl как инструмента практически не изменилось за 14 лет его существования. До и после получения письма DMCA от RIAA многие рассказывали, как они используют youtube-dl для разных целей.

Для меня это всегда был офлайн-доступ к видео, которые уже доступны широкой публике в интернете. В мире мобильных сетей и постоянного подключения вы можете спросить, действительно ли это необходимо. Я думаю, что да, если Netflix, Amazon, Disney и HBO реализовали подобную функциональность в своих чрезвычайно популярных стриминговых приложениях. Для длительных автомобильных поездок или поездок за границу, особенно с детьми, или под землёй, или в самолёте, или в месте с плохой связью или ограниченными соединениями — невероятно удобно иметь автономный доступ к подкасту, лекции, обзору, новости или произведению искусства.

Дополнительным побочным эффектом youtube-dl является доступ к контенту, когда онлайн-интерфейс не справляется с задачей. Старый проприетарный флэш-плагин работал не для каждой платформы и архитектуры. В настоящее время браузеры могут воспроизводить видео, но иногда не способны воспользоваться преимуществами эффективного декодирования GPU, тратя при этом большой заряд батареи. Youtube-dl можно использовать с собственным плеером, чтобы сделать воспроизведение некоторых видео возможным и/или эффективным. Например, плеер mpv включает встроенную поддержку youtube-dl. Вам нужно только передать ему URL, и он использует youtube-dl для доступа к видеопотоку и воспроизведения, ничего не сохраняя на вашем жёстком диске.

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

И последнее, но не менее важное: такие инструменты, как youtube-dl, позволяют получать доступ к онлайн-видео, используя только свободное программное обеспечение. Я понимаю, что в мире не так уж много сторонников строго свободного и открытого ПО. Я даже себя не считаю таковым, по большому счёту. Проприетарный софт постоянно присутствует в нашей современной жизни и поставляется нам каждый день в виде огромного количества строк Javascript в браузере, с множеством различных целей и не всегда в лучших интересах пользователей. Доказательством является появление GDPR, со всеми его недостатками и проблемами. Доступ к онлайн-видео с помощью youtube-dl гарантирует вам полное душевное спокойствие в режиме инкогнито там, где uBlock Origin или Privacy Badger только едва успокаивают.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 29

    +19
    Интересно было почитать. Спасибо.
    Не знал, что софтинка такая древняя.
    Сам открыл для себя связку mpv + youtube-dl буквально месяц-два назад. Помогают смотреть 1080p@60fps на стареньком ноуте, который не вытягивает такой поток в браузерах.
      0
      Стоит добавить, что видео можно смотреть до того, как оно закончило скачиваться. Только иногда нужно вручную указывать формат, чтобы youtube-dl не пытался по очереди скачивать аудио и видео из разных форматов.
        0
        Однако обычно -f bestvideo+bestaudio разве не лучший вариант? Хоть и мержится потом в mkv
        0
        Знаю, что mpv зачастую на Linux дистрах используют, поэтому предположу, что именно там используете. На Windows из коробки youtube (и почти из коробки twitch) умеет PotPlayer — однозначно рекомендую.
        +5
        И где теперь брать его?
          +7
          На сайте разработчика.
            +3
            В репозитории дистрибутива
              +1
              pip install youtube_dl (если в системе у вас стоит python)
                0
                sudo -H pip3 install --upgrade youtube-dl
                лучше так, кмк
                +1
                Например в шоколаде лежит спокойно. Актуальная версия 2020.09.14.
                Если Вы под операционной системой Windows:

                Запускаем PowerShell под админом и далее:
                PS C:\windows\system32>  choco install youtube-dl
                
                  0
                  Или scoop заместо choco :)
                  +1
                  Ещё одно применение подобного ПО — борьба с прокрастинацией. Когда заходишь на ютуб, в рекомендациях очень часто подсовывают десятки видео, которые могут заинтересовать. Пока очнёшься, потратишь час, а то и полтора. К сожалению, полная блокировка всего ютуба через hosts блокирует в т.ч. и видео вроде туториалов, презентаций с Cpp-Con и т.д. Но если убрать hosts, скачать всё нужное, а потом вернуть, то уже нормально.
                    +2
                    Я уже туда не захожу. У меня с открытием расширения для сохранения вкладок (выгрузка из памяти) такой беклог этих видео скопился что мне уже стыдно открывать новые видосы понимая что я нахожу новое быстрее чем смотрю. Но я не шибко много трачу на ютуб, так что пофиг.
                      +2

                      Я вот себе просто план на прокрастинацию составляю и ему следую. Иногда это полезно — просто позалипать

                        +8

                        Где вы эти десятки видео берёте? Мне в рекомендациях ролики, которое хотелось бы посмотреть, попадаются раз в неделю. Ну, если исключить те каналы, на которые я подписан (и которые посмотрю без всяких рекомендаций).

                          –1

                          Не знаю насчет видео, а вот список литературы у меня скопился довольно большой


                          Заголовок спойлера

                          img


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

                            0
                            Я тоже сохраняю в закладки полезные статьи и книги. А потом каждый месяц полностью очищаю их(штук по 200-500).
                        +1
                        Совсем недавно в небольшом мануале по ffmpeg писал как с помощью youtube-dl вырезать видео с ютуб. Еще у меня были проблемы с установкой этой штуки на старую ubuntu, но я справился. Если кому-нибудь нужно, могу подсказать.
                          +1
                          По моему опыту использования, проприетарный IDM работает в некоторых случаях, когда youtube-dl не работает.
                          А вообще софт полезный. Жалко что распространители видео всячески борются со свободным скачиванием видеофайлов, ведь по сути видео это то же что и картинки. Мы можем сохранить любую картинку из браузера (увы, сейчас некоторые сайтовладельцы и с этим пытаются бороться, но далеко не все). Почему мы не можем так же просто сохранить и видео?
                          А сколько видео с ютуба удаляют… хорошо что их удается сохранить.
                            0
                            Недавно нашел на dev.to статью(в двух частях) об внутреннем устройстве youtube-dl:
                            Diary of youtube-dl internals, part 1
                            Diary of youtube-dl internals, part 2
                            Может у кого будет желание перевести?
                              0
                              Активно использую youtube-dl несколько лет по работе. И иногда в личных целях, чтобы забэкапить «избранное» YouTube. Спасибо, интересно было читать.
                                +3

                                Незаменимый инструмент! А в связке с ffmpeg вообще без альтернативный. Уже давно на смартфон накатил Termux а в него youtube-dl и ffmpeg, прямо со смартфона качаю. Наиболее частый сценарий использования — выкачать аудиодорожку, выровнять ей громкость и сжать до очень малого размера, чтобы иметь возможность в дороге слушать различный разговорный контент. Второе, что безценно — возможность качать целый плейлист и целый канал, иногда это необходимо.

                                  0

                                  А как выравниваете звук, если не секрет? Какой командой ffmpeg?

                                    +1
                                    Вот мой пример скрипта, которым я качаю звук с ютюба в Termux:

                                    audio only
                                    youtube-dl -f worstaudio youtu.be/fTe0_bdDnCE -o /storage/emulated/0/Download/1.opus && ffmpeg -i /storage/emulated/0/Download/1.opus -acodec libopus -af compand -ac 1 -b:a 8k /storage/emulated/0/Download/audio.opus && rm /storage/emulated/0/Download/1.opus
                                  –3
                                  Каждый раз когда какие-нибудь Linux Foundation вам расскажут что Microsoft теперь друг open source'а. Не верьте.
                                    +3

                                    Действительно не друг, но удаление youtube-dl тут ни причём. Это американский законодатель с его DMCA постарался, он тоже не друг свободного ПО.

                                      –5
                                      Почему же тогда до Microsoft этого не произошло и почему сейчас Microsoft которая так любит демонстрировать дружбу в пресс-релизах не продемонстрировала её наглядно на деле защитив проект своим юридическим отделом? Понятно почему.

                                      Дальше будет только хуже.
                                        +6
                                        Почему же тогда до Microsoft этого не произошло

                                        После не значит вследствие.


                                        DMCA — это очень большая дубина, подставляться под неё просто заради пиара не очень-то умно. Думаю, что юридический отдел любой компании, от гугла и МС, до хабра и винрара постарается избежать контакта с DMCA любой ценой. Думаю, что, владей мозилла гитхабом — и у неё не хватило бы яиц дать бой.

                                  Only users with full accounts can post comments. Log in, please.