Последнее время я довольно часто слушаю музыку на YouTube. Когда-то уже делал детальный разбор качества звука для этого сервиса и выяснил, что для многих видео присутствуют весьма качественные звуковые дорожки Opus 128+ kbps.
Сперва я слушал музыку прямо на сайте, затем качал Opus дорожку с помощью SaveFrom.net и загружал её в foobar2000, но в конце концов вспомнил о замечательном плагине YouTube Source. А забыл я о нём по той причине, что когда писал инструкцию, не предполагал, что YouTube всерьёз может выступать как сервис для распространения чисто музыкального материала. Сейчас же я понял, что фактически на YouTube огромное количество музыки, главным образом выкладываемой современными развивающимися коллективами, музыкантами и диджеями. Похоже, в этом YouTube практически не уступает SoundCloud, но при этом значительно превосходит его по качеству звучания.
Слушаю я по большей части разные компиляции и миксы, где присутствуют треки разных исполнителей. Выглядит это примерно так:
Да, плагин подгружает имя исполнителя (для всего видео), название микса и даже обложку — за это разработчику спасибо. Но нет самого главного — списка треков. Непонятно, что играет в данный момент, нельзя заскробблить трек на Last.fm; чтобы найти название текущего трека, нужно открывать страницу видео, искать таймкод, вычислять... В общем, крайне неудобно.
И я решил, что нужно что-то с этим делать. Ведь по сути вся информация, как правило, в наличии. Например, вот такой плейлист из описания видео:
0:00 - Archive Mind - Vivid Dreamer 03:42 -and nobody cared - Lost Highway Theme 04:42 - Philanthrope & Devaloop - Bomdigi 06:49 - My Neighbor is - Guru 09:10 - Vintage Beats - Organic Material 12:23 - 9 Lazy 9 - Electric Lazyland 15:42 - Nyctophiliac - The Cursed Gospel 17:26 - ep7a - Disbelieve 20:10 - Enigmatical - Thinkerman 21:41 - Dr. Quandary - No Flower 23:23 - DJ Cam - Dieu reconnaitra les siens 26:10 - deeB - The Grand Illusion 28:26 - Gramatik - Stairway to Hip Hop Heaven 31:33 - DJ Cam Quartet - Boss Guitar 35:23 - Vintage Beats - Had to do it 37:54 - Soupbox - Playin Beats 39:16 - Oliver Lowe - Autumn 40:09 - Mr. Moods - No Record Deal with DJ Hotwings 42:27 - Nyctophiliac - Blunted Session 44:26 - Red Snapper - The Sleepless 49:07 - Port Electric - Pollution 54:20 - Coldcut - Autumn Leaves
Отлично, у нас есть время начала, имя исполнителя и название трека. Осталось как-то передать эту информацию в плейлист плеера. Но как? Первым (и, как оказалось, верным) решением, которое мне пришло в голову, было создание файла Cue sheet. Некоторое время у меня ушло на то чтобы вспомнить структуру Cue, еще некоторое время на копипастинг значений в Блокноте, и — вуаля — файл Cue готов:
FILE videoplayback.webm WAVE TRACK 01 AUDIO PERFORMER "Archive Mind" TITLE "Vivid Dreamer" INDEX 01 00:00:00 TRACK 02 AUDIO PERFORMER "-and nobody cared" TITLE "Lost Highway Theme" INDEX 01 03:42:00 TRACK 03 AUDIO PERFORMER "Philanthrope & Devaloop" TITLE Bomdigi INDEX 01 04:42:00 TRACK 04 AUDIO PERFORMER "My Neighbor is" TITLE Guru INDEX 01 06:49:00 TRACK 05 AUDIO PERFORMER "Vintage Beats" TITLE "Organic Material" INDEX 01 09:10:00 TRACK 06 AUDIO PERFORMER "9 Lazy 9" TITLE "Electric Lazyland" INDEX 01 12:23:00 TRACK 07 AUDIO PERFORMER Nyctophiliac TITLE "The Cursed Gospel" INDEX 01 15:42:00 TRACK 08 AUDIO PERFORMER ep7a TITLE Disbelieve INDEX 01 17:26:00 TRACK 09 AUDIO PERFORMER Enigmatical TITLE Thinkerman INDEX 01 20:10:00 TRACK 10 AUDIO PERFORMER "Dr. Quandary" TITLE "No Flower" INDEX 01 21:41:00 TRACK 11 AUDIO PERFORMER "DJ Cam" TITLE "Dieu reconnaitra les siens" INDEX 01 23:23:00 TRACK 12 AUDIO PERFORMER deeB TITLE "The Grand Illusion" INDEX 01 26:10:00 TRACK 13 AUDIO PERFORMER Gramatik TITLE "Stairway to Hip Hop Heaven" INDEX 01 28:26:00 TRACK 14 AUDIO PERFORMER "DJ Cam Quartet" TITLE "Boss Guitar" INDEX 01 31:33:00 TRACK 15 AUDIO PERFORMER "Vintage Beats" TITLE "Had to do it" INDEX 01 35:23:00 TRACK 16 AUDIO PERFORMER Soupbox TITLE "Playin Beats" INDEX 01 37:54:00 TRACK 17 AUDIO PERFORMER "Oliver Lowe" TITLE Autumn INDEX 01 39:16:00 TRACK 18 AUDIO PERFORMER "Mr. Moods" TITLE "No Record Deal with DJ Hotwings" INDEX 01 40:09:00 TRACK 19 AUDIO PERFORMER Nyctophiliac TITLE "Blunted Session" INDEX 01 42:27:00 TRACK 20 AUDIO PERFORMER "Red Snapper" TITLE "The Sleepless" INDEX 01 44:26:00 TRACK 21 AUDIO PERFORMER "Port Electric" TITLE Pollution INDEX 01 49:07:00 TRACK 22 AUDIO PERFORMER Coldcut TITLE "Autumn Leaves" INDEX 01 54:20:00
Я прописал в этом файле скачанный с YouTube videoplayback.weba (предварительно сменив расширение на webm) и открыл его через foobar2000 — всё работает! Сразу же я попробовал добавить микс через File->Add location, после чего прикрепил к треку Cue через Utils->Edit cuesheet в контекстном меню. Плейлист загрузился, однако имя артиста оставалось одинаковым для всех треков (тем, которое определил плагин). Эта проблема решилась предварительным удалением из треков имени исполнителя и повторным прикреплением Cue (потом я просто отключил автозаполнение этих тегов в настройках Youtube Source).
Всё бы хорошо, но я потратил на все эти манипуляции более получаса времени. Да, конечно, создавать cue вручную — долгая, однообразная работа. Так почему бы не поручить её программе?
Воспользовавшись знаниями веб-программирования и своим сервером audiophilesoft.com, я написал программный модуль, который выполняет автоматический парсинг YouTube плейлиста с помощью регулярных выражений, вытаскивает оттуда нужные значения и записывает их в cue-файл. Форма для автоматического преобразования находится по адресу audiophilesoft.com/generate_cue:
Просто скопируйте в поле ввода плейлист с YouTube, нажмите Get cue sheet, и сервер отдаст вам готовый файл cue. Затем этот файл можно положить рядом со скачанным с YouTube аудиофайлом (если вы указали в форме его имя) или же прикрепить к треку YouTube source через Utilities->Edit cuesheet.
Прошу заметить, что пока что скрипт работает в тестовом режиме, и в нём могут быть ошибки. На данный момент скрипт понимает плейлисты с треками вида ((0)1:)(0)2:(0)3( -) (Artist -) Title
, где в скобках указаны фрагменты, которые можно опустить. То есть наличие количества часов и имени исполнителя опционально, единицы времени можно указывать без нуля впереди; между таймкодом и именем артиста/названием трека может быть отбитая пробелами черта. Роль черты может играть длинное тире, короткое тире или символ дефисоминуса с клавиатуры.
Кстати, уже начав писать модуль, я вдруг вспомнил, что по спецификации cue не поддерживает таймкоды больше 99 мин 59 с. Приятным сюрпризом оказалось то, что в foobar2000 это ограничение не действует — значение минут может быть и трёхзначным, так что можно генерировать cue для миксов продолжительностью более полутора часов.
В общем, я надеюсь, что этот скрипт пригодится кому-то кроме меня. Пишите ваши отзывы, багрепорты и предложения по улучшению.
P. S. В ближайшее время хочу пообщаться с разработчиком Youtube Source — возможно, он включит автопарсинг описания и генерацию плейлиста foobar2000 в свой плагин. Это было бы логичнее и проще.
Добавлено: я написал разработчику и получил ответ. Он действительно планирует добавить в скором времени парсинг описания видео для автоматического формирования треклиста.
Информация от спонсора
ХАСЛОГ: каталог файлов. Здесь можно выбрать и скачать бесплатные программы для Windows. Для каждой программы имеются подробное описание и скриншоты.
Есть аналог генератора cue: http://cuegenerator.net/ , там есть ссылочка на проект на Гитхабе.
Слегка глюкавый. Но при аккуратной подготовке плейлиста пользоваться можно.
Расширение "opus" FOOBAR2000 не воспринимает. Его надо перименовать, как указано в статье, в "webm".