Удобная библиотека для работы с тегами медиафайлов

в 7:33, , рубрики: .net, id3, говнокодинг для личных нужд, Песочница, тэги, метки: , , , ,

Приветствую всех хабравчан. Одним прекрасным вечером, в мою голову пришла идея отсортировать свои гигабайты музыки. А если точнее, то захотелось просто-напросто удалить все треки с низким битрейтом, дабы не раздражали слух и место почем зря не занимали. Можно было бы, конечно, сделать все вручную, но, во-первых, лень, во-вторых, на это ушло бы несколько недель, если не месяцев. Да и вообще, программист я или где? С такими вот незатейливыми рассуждениями я и пришел к мысли, что стоило бы автоматизировать процесс. Вопрос языка на котором будет производиться автоматизация особо не стоял: на работе пишу на C#, дома тоже есть экспресс версия Visual Studio, значит так тому и быть. Осталось только узнать как с помощью этих самых шарпа да студии узнать битрейт файлов, чтобы не удалить чего лишнего. Недолгий, но продуктивный гуглеж привел меня к одной замечательной библиотеке.

Краткое описание

Итак, зовется наша библиотека Taglib-sharp и, как видно из названия, предназначена для работы с тэгами медиафайлов(видео, аудио и фото). Проект является open source и распространяется бесплатно по лицензии LGPL. Скачиваем библиотеку (например, отсюда или отсюда), добавляем ссылку на нее в нашем проекте, прописываем TagLib в using и вот мы уже готовы приступить.
Ниже приведу небольшой пример получения информации из тегов. Пример не полный, остальное можно легко узнать из справки к библиотеке.

//Создаем переменную с информацией о файле. В качестве параметра указываем полный путь.
var audioFile = TagLib.File.Create(@"C:UsersEthiopianMusicFeindbild.mp3");
//Выводим нужную нам информацию на экран
Console.WriteLine("Альбом: {0}nИсполнитель: {1}nНазвание: {2}nГод: {3}nДлительность: {4}"
        , audioFile.Tag.Album
        , String.Join(", ", audioFile.Tag.Performers)
        , audioFile.Tag.Title
        , audioFile.Tag.Year
        , audioFile.Properties.Duration.ToString("mm\:ss"));

В результате выполнения кода выше, в консоли получится что-то вроде:

Альбом: Gotterdammerung
Исполнитель: Megaherz
Название: Feindbild
Год: 2002
Длительность: 04:41

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

Практическое применение

После того как мы наигрались с библиотекой, пора бы вернуться к первоначальной задаче. Что там мы хотели сделать? Ага! Удалить все записи с низким битрейтом. И вот тут на сцену выходит идеально подходящее для нас свойство .Properties.AudioBitrate. По нему-то мы и будем отсеивать негодные файлы.
Для наших скромных целей вполне достаточно будет обычной консольной утилитки, которой в качестве параметра мы будем передавать путь до папки с файлами, а она уже будет разгребать файлы по тегам и удалять ненужные. Сам метод удаления у меня получился такой:

private static void RemoveBadAudio(string foldPath)
{
    //Создаем объект для доступа в директорию, путь которой написали в консоль.
    DirectoryInfo dir = new DirectoryInfo(foldPath);
    //Создаем две переменные для подсчетов удаленных и оставленных файлов
    int deletedCounter = 0;
    int savedCounter = 0;
    //Проверяем каждый mp3 файл в директории
    foreach (FileInfo file in dir.GetFiles("*.mp3"))
    {
        //Проверяем битрейт
        if (TagLib.File.Create(file.FullName).Properties.AudioBitrate < 320)
        {
            file.Delete();
            deletedCounter++;
        }
        else
        {
            savedCounter++;
        }
    }
    Console.WriteLine("nУдалено файлов: {0} nСохранено файлов: {1}", deletedCounter, savedCounter);
}

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

В заключение

Мы рассмотрели одно из возможных применений библиотеки Taglib-sharp и попутно избавили свои уши от некачественных mp3 записей. Разумеется, это не единственное применение данной библиотеки. К примеру, можно автоматизировать переименование файлов по тегам или сортировку файлов по папкам исполнителей. Да много чего, главное начать и не бояться. А мне за сим позвольте откланяться. Надеюсь, до новых встреч.

Автор: Ethiopian

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js