Freyr-js: находка меломана

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

Сегодня в меню невероятно полезная утилита Freyr‑js, которая должна понравиться меломанам. Freyr‑js умеет скачивать музыкальные файлы из Spotify, Apple Music и Deezer по веб‑ссылкам и позволяет вам по старинке поддерживать локальную музыкальную коллекцию. Без подписок, с сохранением полного контроля над своей фонотекой и, как правило, с высоким битрейтом. Круто? Ещё бы! Забегая вперёд: да, есть некоторые ограничения и нюансы, но они не портят общую картину.

А это вообще законно?

Как бы, нет, но да. Честно говоря, меня (приятно) удивило беспроблемное легальное существование Frey‑js на Github в течение уже нескольких лет при том, что мир копирайта оккупирован крупными корпорациями, которые старательно прячут от вас исходные файлы фильмов и музыки — да‑да, именно для того чтобы вы не смогли их копировать как вам хочется. Но, судя по всему, Freyr‑js ничего формально не нарушает, так как, в отличие от тех же торрентов, даёт вам возможность только скачивать музыку, не раздавая её другим. А значит, речь идёт о таких понятиях как добросовестное использование (fair use) и личное использование (personal use). В ряде стран вам могут сказать, что формально вы нарушаете закон, но до тех пор пока вы используете контент в личных целях, реально вам ничего не грозит. Короче говоря, всё нормально!

Установка

Под капотом Freyr‑js использует набор Nodejs‑модулей, которые последовательно получают метаданные из предоставленной вами ссылки на трек/альбом/исполнителя, затем ищут соответствующие треки на Youtube Music, скачивают их посредством youtube-dl, конвертируют в контейнер M4A, аккуратно раскладывают по папочкам, добавляют обложки и т. п.

Установить Freyr-js просто. Вам понадобится одна из свежих версий Nodejs и пакетный менеджер к нему: npm или yarn. Для npm команда установки выглядит так:

npm install -g freyr

Кому-то будет удобно использовать Docker-контейнер:

alias freyr='docker run -it --rm -v $PWD:/data freyrcli/freyrjs'

Дальше надо просто дать команду вида freyr , где вместо указать ссылку на то, что именно вы хотите скачать. Давайте попробуем сделать это без регистрации на музыкальных сервисах. Обратите внимание, что нам понадобится зайти именно на веб-версии соответствующих плееров. Это может быть не очевидно, т.к. стандартно гугл будет вас выкидывать на страницы подписки. Используйте поисковые запросы вида apple music web player, spotify web player и deezer web player.

Время тестов! Давайте посмотрим, как именно работает программа прямо сейчас.

Apple Music

c73a70ef9f0a131fe47bf8fa684e1a7d.png

С данным сервисом меня ждал облом: если пару месяцев назад он у меня работал (поверьте на слово), то на момент написания этих строк попытка что-либо скачать возвращает ошибку 401. Причина: у Freyr-js устарел временный токен, который даёт доступ к API сервиса. Да, можно получить его самому и добавить в conf.json, но факт остаётся фактом: из коробки Apple Music теперь не скачивается (надеюсь, временно).

При наличии же токена всё должно работать: Freyr-js умеет скачивать всё, для чего Apple Music предлагает кнопку Share. Ссылки будут работать для треков, альбомов, исполнителей.

Spotify

2d883a3240014bfaed095e7df4212e08.png

Spotify заблокирован в РФ, поэтому для доступа к веб-плееру понадобится VPN. Дальше всё просто: ищём опцию Поделиться > Копировать ссылку… и вставляем её в качестве аргумента freyr. Всё работает корректно, остаётся лишь подождать скачивания и конвертации.

Deezer

02959ec0274133777cee82bd84aa89d1.png

Опять же, в РФ данный сервис заблокирован, поэтому для доступа к его веб-странице понадобится VPN. Далее нужно иметь в виду, что ссылки, которые генерирует сам Deezer по кнопке Share (https://deezer.page.link/…), не годятся: нужны именно URL (https://www.deezer.com/en/…). По этой причине вы не сможете скачать отдельную песню, так как Deezer не выдает на них ссылки (по крайней мере, я не нашёл, как это сделать). Ну, это меньшее из зол.

Напоследок

Подведём итог: из 3-х поддерживаемых музыкальных сервисов Freyr‑js корректно работает с 2,5. Неплохой результат!:)

Преимущества данной штуки вы и сами видите, поэтому отмечу некоторые ограничения/недостатки:

  • скорость работы довольно низкая: готовьтесь к долгой загрузке и конвертации из‑за довольно неуклюжей схемы, в центре которой находится Youtube Music. Скачивание одного альбома занимает томительные минуты, всего исполнителя — бесконечность.

  • Freyr‑js страдает от той же болячки, что и сами музыкальные/стриминговые сервисы: иногда на месте одной записи оказывается похожая, но другая. У одной и той же композиции может быть несколько версий, студийный/живой варианты и т. д. Метаданные треков при этом часто совпадают.

  • приготовьтесь к тому, что работающий прямо сейчас Freyr‑js может сломаться через неделю или месяц. Причин может быть масса: от протухшего developertoken от Apple, до очередного обновления API Youtube, за которым не успел youtube‑dl. Всё течёт, всё изменяется!

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

© Habrahabr.ru