Каталогизация музыки и долгий путь к собственному потоковому сервису

Эта статья описывает методы и средства создания каталога оцифрованной музыки и предназначена для коллекционеров и меломанов, кто ее самостоятельно собирает. Иные формы прослушивания, такие как радио, публичные потоковые сервисы и даже социальные сети я не рассматриваю, т.к. считаю неудобными, это просто другой уровень с точки зрения качества. Данное руководство предназначено для того, чтобы с минимальными затратами привести аудиоколлекцию к максимально упорядоченному виду и получить реальную пользу от наведенного порядка.

Каталогизация музыки и долгий путь к собственному потоковому сервису Музыка, Коллекционирование, Каталог, Plex, Перфекционизм, Musicbrainz, Длиннопост

Я во многих вопросах перфекционист. Свою аудиоколлекцию я всегда хотел видеть идеальной. Но какие-то редкости мне достались в несортированном виде, что-то приходилось оцифровывать с дисков, чем-то менялся. Затем началась эра безлимитного интернета и приток свежей музыки стал больше, а времени больше не становилось. Со временем при пополнении стало накапливаться много мелких неприятностей, например:

- разные шаблоны для имен файлов: 4 — Звезда | 04 — Звезда | 04. Звезда

- разные имена исполнителей в тегах: Чиж & Co | Чиж и Ко. | Mylene Farmer | Mylène Farmer

- не указаны исполнители альбома (что приводит к полному бардаку в альбомах-сборниках)

- некорректная информация об альбомах, состоящих из нескольких дисков

- путаница в годах изданий и переизданий (ремастеринг, и т.д.)

Часто у пользователей коллекции составляют десятки тысяч записей, так что перелопачивать все вручную долго и неэффективно.


1. Чистка


Это всего лишь рекомендация для тех, кто начинает с уровня “файлопомойки” и нужна только в том случае, если вы хотите переделать все с нуля и упорядочить по-максимуму. Для начала нам нужно пройтись по всем каталогам и бегло их почистить, выбросить все лишнее, что вы не слушаете и вряд ли будете. Я выкинул полностью или частично:

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

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

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

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

В общем по возможности оставляйте только полные и официальные альбомы. Это не критичный, но довольно важный этап.


Обязательно разделите все на треки и унифицируйте форматы. Большинство плееров не понимают flac+cue, ape+cue, wv+cue. Из lossy форматов оставить только mp3, из lossless желательно flac, можно alac (если у вас преимущественно техника от Apple), а вот ape и wv не советую.

Для нарезки и перекодирования есть масса программ, например Medieval CUE Splitter. Я использую свой скрипт на bash.


2. Распознавание и сопоставление


Это самое важное. Выполняем распознавание и сортировку композиций. Для этого нам нужна будет программа MusicBrainz Picard. Она доступна на всех основных ОС. Программа выполняет 3 основных роли: переименовывает файлы, заполняет теги и добавляет обложку. Правда обложки берутся с Archive.org, который сейчас заблокирован в РФ, поэтому без дополнительных телодвижений их придется добавлять вручную или другими программами.

Каталогизация музыки и долгий путь к собственному потоковому сервису Музыка, Коллекционирование, Каталог, Plex, Перфекционизм, Musicbrainz, Длиннопост

Рекомендую начать все переделывать с чистого листа. Для этого в настройках Picard включаем перенос файлов и указываем папку назначения. Также я бы рекомендовал очистить всю старую информацию в тегах. По поводу тегов ID3, версия 2.4 является более продвинутой, но не все программы умеют корректно с ней работать. В частности, Windows Explorer и Windows Media Player (до 12-й версии включительно) не понимают кодировку. Если нужна совместимость - включайте 2.3. Если хотите более прогрессивного формата с плюшками типа UTF-8 и расширенным набором тегов — ставьте 2.4.


Программа распознает два типа альбомов: обычные и составные (сборники). Сборники — это когда в альбоме больше одного исполнителя. У меня для сборников отдельный каталог (обычно называется Various Artists), а требования к каталогизации не такие строгие.

Обратите внимание на пункт настроек «Перенос файлов», в нем настраивается переименование и сортировка по папкам. Там используется небольшой скриптовой язык (такой же, как в Foobar2000), с его помощью вы сможете настроить шаблоны, как вам захочется. Установки по умолчанию довольно универсальные, но для себя я их немного подправил:


$if2(%albumartist%,%artist%)/$if2($left(%originaldate%,4),$left(%date%,4)) - %album%/$if($gt(%totaldiscs%,1),%discnumber%-,)$num(%tracknumber%,2) - %title%


$if2(%albumartist%,%artist%)/$if2($left(%originaldate%,4),$left(%date%,4)) - %album%/$if($gt(%totaldiscs%,1),%discnumber%-,)$num(%tracknumber%,2) - %artist% - %title%


Первая строка — для альбомов, вторая — для сборников. Обратите внимание, что здесь переменная %date% обозначает дату издания (или переиздания), а не дату выхода альбома. Но тут есть нюанс. Большинство программ не умеют читать тег “originaldate”, поэтому в итоговом каталоге будут сортировать альбомы по “date”, что может нарушить хронологию выхода альбомов, которые позднее переиздавались. Указанные шаблоны генерируют имена, подобные этим:

Music\Сплин\2002 - Акустика\2-05 - Моё сердце.mp3

Music\Various Artists\2001 - Fellini Tour\14 - Сплин - Моё сердце.mp3


MusicBrainz содержит достаточно подробные данные о музыке, но к сожалению, данные о жанрах у него или отсутствует или неадекватны. На этом поприще лидером является Last.fm, который как самостоятельный сервис давно стал неинтересен, но накопил много данных об исполнителях, жанрах, стилях и связях на их основе. После смены API многие скрипты перестали работать, а для MusicBrainz Picard остался только Last.fm.ng Для него главное проверить разделитель мульти-тега жанра, у меня так:

[category-grouping]

separator = "; "

Дело в том, что единичных жанров для музыки практически не бывает, всегда есть некоторое смешение жанров и стилей даже в одном произведении. Разные проигрыватели умеют распознавать мульти-теги и осуществлять с ними разные операции. Результатом заполнения тега будет строка типа “Gothic; Darkwave; Industrial; Electronic”, где вместо точки с запятой можно использовать любой другой символ (например запятую или вертикальную черту) в зависимости от ваших предпочтений или используемого ПО. Еще советую добавить нужные вам жанры в список в конфиге, из которого будет осуществляться поиск, т.к. там не все редкие жанры прописаны.

После того, как мы убедились, что все настройки выставлены правильно, можно скармливать всю свою коллекцию и идти пить чай

Каталогизация музыки и долгий путь к собственному потоковому сервису Музыка, Коллекционирование, Каталог, Plex, Перфекционизм, Musicbrainz, Длиннопост

Справа отображаются опознанные треки, сгруппированные в альбомы. Но иногда нужно помогать программе распознавать треки. Файл может не опознаться, или в «кандидаты» на трек альбома может попасть несколько файлов. В этом случае придется выбирать вручную. Уровень совпадения обозначается цветом, от зеленого до красного. При проверке сравниваются некоторые теги и «fingerprint» трека.

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


Пару слов о теге “albumartist”. Иногда встречаются совместные альбомы, в которых два и более исполнителя, либо включены авторы исходного произведения, как в классической музыке. При переименовании каталоги заполняются с этого тега, а еще его используют для группировки плееры. Если он не заполнен, то используется тег “artist”. А вот в названиях треков всегда будет указан “artist”. Поэтому для таких альбомов (если это не сборники) лучше указать в теге “albumartist” одного из исполнителей по какому-либо признаку: автор оригинала, автор большинства произведений альбома и т.п.


Увы, MusicBrainz может сделать довольно большую часть работы, но не всю. В его базе могут отсутствовать некоторые редкие артисты или последние альбомы. В этом случае у вас в исходной папке останется часть неотсортированной музыки. У меня такой музыки остается около 10%, так что для нее запускаем другой инструмент - Foobar2000 с плагином Discogs Tagger. Он не настолько удобен, но в качестве вспомогательного инструмента более чем подходит. Все это позволяет обойтись без ручной правки тегов, но если уж до этого дойдет, вам помогут эти же программы плюс Mp3tag.


Если по каким-то причинам не удается или не хочется использовать Picard+Last.fm.ng, то есть еще MediaMonkey. Для поиска жанров к нему есть скрипт Genre Finder, он тоже использует Last.fm API, поэтому нужно очень внимательно отнестись к настройкам: их немного, но от них очень сильно зависит конечный результат. Вполне вероятно, что вы захотите сделать несколько пробных проходов с различными вариантами настроек. Рекомендую сначала определить 2-3 жанра в режиме поиска альбомов. Можете после этого добавить еще пару жанров, но уже в режиме поиска по отдельным трекам. Здесь же, в MediaMonkey можно параллельно смотреть и шлифовать получившийся список жанров.


Ну и наконец добавляем обложки. Есть много программ, умеющих искать обложки. Некоторые из них позволяют заливать миниатюры обложек напрямую в теги файла (правда, я довольно прохладно отношусь к этой «фиче»). Но, по моему скромному мнению, самые широкие возможности у Album Art Downloader. В настройках я бы порекомендовал поднять минимальный размер обложки (хотя бы до 50 px), и включить опцию «Automatically close after saving». Нам нужно будет сделать два прохода (установлено экспериментальным путем; никакие другие источники, включая iTunes, не дают лучшего результата). Сначала отключаем все источники (область справа), кроме Last.fm, и сканируем всю нашу музыку. После процесса поиска и анализа у нас появится окно Queue Manager, где будет список всех найденных альбомов. На этом этапе можно спокойно запустить автоматический режим (ссылка в нижней части окна Queue Manager) и ждать завершения.

Если у вас после первого прохода остались нераспознанные альбомы, меняем источник с Last.fm на Google Images, и запускаем обработку оставшихся альбомов. Здесь я бы порекомендовал быть осторожнее и проверять каждый альбом вручную. Лично мне хватило этих двух проходов; остальные источники были для меня совсем неадекватными, но вы можете попробовать — у каждого из них своя специфика.


3. Пожинаем плоды


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


Зато, в итоге мы получили:

- Единую упорядоченную структуру на уровне файловой системы

- ID3-теги, полностью заполненные (вплоть до композитора) по единым правилам

- Возможность сортировки по жанрам и другим тегам

- Обложки ко всем альбомам

- Эстетическое удовольствие от осознания факта, что у вас практически идеальный порядок :)

Каталогизация музыки и долгий путь к собственному потоковому сервису Музыка, Коллекционирование, Каталог, Plex, Перфекционизм, Musicbrainz, Длиннопост

Теперь в таком виде коллекцию с радостью скушает любой медиаплеер. И в зависимости от его функциональности можно вытворять разные хитрые штуки. Ну сортировка это банально. Поиск по тегам очень удобен. А вот что мне всегда нравилось в iTunes или Clementine, это “умные” плейлисты. Это плейлисты, составленные на основе нескольких критериев фильтрации с использованием логических И/ИЛИ. Например я могу сделать плейлист, в котором будут треки с тегами “folk” и “instrumental” или я могу отобрать всю “Electronic” до 1980 года. Вот тут нам и пригодился мульти-тег жанра с несколькими значениями.


Но в последние годы обычные плееры стали неактуальны для меня по нескольким причинам:

- Коллекция увеличилась в объеме, на смену mp3 пришел flac

- У меня появилась достойная домашняя техника для прослушивания музыки

- У меня появились мобильные устройства, с которых я тоже хочу слушать музыку

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


Закономерным ответом на вызов времени стала клиент-серверная реализация аудиотеки. Я как раз собрал сервер с RAID массивами, где разместил аудиотеку и в числе прочего открыл доступ к ней по SMB и NFS. Этого хватило, чтобы музыка в полном объеме добралась до домашнего кинотеатра и компьютеров, но другие потребности остались актуальными. В конечном итоге я пришел к идее аудиосервера или в общем случае медиасервера, который одновременно является и каталогизатором и проигрывателем с централизованной базой. На эту роль рассматривались:


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

b) Subsonic - заявлен как специализированный музыкальный медиасервер и сервис потокового вещания, умеет делать радио, имеет API и как следствие много разных клиентов под веб и мобильные устройства, но не разделяет мульти-тэги, нет поиска по тегам, нет мульти-поиска и умных плейлистов, нет прозрачного переключения потоков между клиентами... особую пикантность придает то, что он написан на java и под linux для работы требует JDK вместо JRE, а по умолчанию сервер запускается от root.

c) Plex

d) Emby


На двух последних я и остановился. В силу большей функциональности и исторической зрелости в настоящий момент я использую Plex, написанный на python. Более молодой Emby не сильно отличается от него по функциям, имеет открытый код, но написан на C#, что означает использование Mono на nix-серверах.

Каталогизация музыки и долгий путь к собственному потоковому сервису Музыка, Коллекционирование, Каталог, Plex, Перфекционизм, Musicbrainz, Длиннопост
Каталогизация музыки и долгий путь к собственному потоковому сервису Музыка, Коллекционирование, Каталог, Plex, Перфекционизм, Musicbrainz, Длиннопост

Перечислю преимущества, которые я получил и стал постоянно использовать:

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

- Шикарная кроссплатформенность: windows, macos, linux, android, ios, web, tv, ps4 и т.д. и оптимизированный интерфейс для каждой платформы.

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

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

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

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

- Перекодирование на лету, если клиент не поддерживает проигрываемый формат, это по сути решает вечный спор в каком формате хранить lossless - flac или alac, а также это позволяет всю аудиотеку перевести в lossless, т.к. мобильные клиенты при перекодировании или синхронизации автоматически получают mp3 с заданным битрейтом, что не перегружает интернет канал или внутреннюю память

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

- Можно запоминать позицию внутри трека, что важно для аудиокниг (хотя это уже немного другая тема)


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