Member 13337539 Ответов: 2

Может ли этот код найти изображение с секретным именем и применить это изображение к каждому музыкальному файлу в той же папке?


У меня есть огромная музыкальная библиотека с обложками альбомов под названием either folder.jpg например, так. Многие плееры привыкли рассматривать это как обложку альбома, но я бы хотел, чтобы каждый музыкальный файл в папке, содержащей изображение с одним из 2 имен, имел это имя файла изображения, помеченное изображением, которое находится в этой папке. Делает ли это программное обеспечение или может?

Что я уже пробовал:

Я почти ничего не пробовал, только грубую силу.

Graeme_Grant

Ммм... какой код?

2 Ответов

Рейтинг:
0

Mehdi Gholam

Google-ваш друг, попробуйте поискать :

tagging mp3 files


Рейтинг:
0

Graeme_Grant

Это очень популярный читатель метаданных и писатель, а не только для MP3-файлов: GitHub - mono/taglib-sharp: библиотека для чтения и записи метаданных в медиафайлы[^]

Просто дал lib попробовать. Вот мой тестовый код, используемый:

private static void Main(string[] args)
{
    var path = @"E:\Music";
    foreach (var file in System.IO.Directory.GetFiles(path))
    {
        ProcessFile(file);
    }
    Console.ReadKey();
}

static void ProcessFile(string Filename)
{
    Console.WriteLine("Filename: ", Filename);

    TagLib.File file = TagLib.File.Create(Filename);
    Console.WriteLine("Name: ", file.Name);
    Console.WriteLine("Current picture count: " + file.Tag.Pictures.Length);
    for (int i = 0; i < file.Tag.Pictures.Length; i++)
    {
        var pic = file.Tag.Pictures[i];
        Console.WriteLine("{0} Description: {1} / {2}", i + 1, pic.Description, pic.Type);
    }
}

Обновление:
Вот рекурсивный каталог добавлен:
internal static class Program
{
    private static void Main(string[] args)
    {
        var path = @"E:\music";
        ProcessDirectories(path);

        Console.ReadKey();
    }

    private static void ProcessDirectories(string startPath)
    {
        foreach (string dir in System.IO.Directory.GetDirectories(startPath))
        {
            Console.WriteLine("Dir: {0}", dir);
            ProcessFiles(dir);
            ProcessDirectories(dir);
        }
    }

    private static void ProcessFiles(string dir)
    {
        foreach (var file in System.IO.Directory.GetFiles(dir))
        {
            if (System.IO.Path.GetExtension(file).Equals(".mp3", StringComparison.InvariantCultureIgnoreCase))
            {
                ProcessFile(file);
            }
        }
    }

    private static void ProcessFile(string Filename)
    {
        // do processing here...
        Console.WriteLine(" - File: {0}", Filename);

        TagLib.File file = TagLib.File.Create(Filename);
        Console.WriteLine("   Name: ", file.Name);
        Console.WriteLine("   Picture count: " + file.Tag.Pictures.Length);
        for (int i = 0; i < file.Tag.Pictures.Length; i++)
        {
            var pic = file.Tag.Pictures[i];
            Console.WriteLine("   {0} Description: {1} / {2}", i + 1, pic.Description, pic.Type);
        }
    }
}


Member 13337539

извиняюсь. он еще недостаточно проснулся. Я думал, что комментирую какой-то код, который только что видел. У меня есть, скажем, 100 папок mp3-файлов, уже помеченных хорошо. Но не помеченный w image art. Однако в каждой папке есть изображение с именем "folder.jpg" таким образом, мне нужно рекурсивно искать через ^0GB или около того папок и применять folder.jpg изображение для всех аудиофайлов в этой папке в качестве тега, а затем двигаться дальше. Спасибо за совет до сих пор ... длинные выходные, длинный день. Посмотрю на это ж свежими глазами завтра, кодировал весь день.

Graeme_Grant

Добавлена поддержка рекурсивных каталогов... Я оставлю обработку оставшихся файлов вам ;)