Запись метаданных ID3v2 с использованием TagLib - PullRequest
0 голосов
/ 12 июня 2011

Я пишу музыкальный риппер и занимаюсь этим уже несколько дней.Все работает как надо, кроме установки метаданных.Я загружаю необработанные данные PCM, кодирую в MP3 с помощью ffmpeg.exe и затем устанавливаю метаданные в файл.Я знаю, что ffmpeg.exe может записывать метаданные, но это не соответствует моим потребностям, поскольку я не могу написать символ (") при указании метаданных в командной строке. Кроме того, ffmpeg.exe обрезает мои данные максимум до 30 символов, что такжемоя проблема при использовании TagLib:

TagLib::FileRef f("some_mp3.mp3");

f.tag()->setArtist("Loooooooooooooooooooooooooooooooooooong Artist");
f.tag()->setAlbum("Loooooooooooooooooooooooooooooooooooong Album");
f.tag()->setTitle("Loooooooooooooooooooooooooooooooooooong Title");
f.tag()->setTrack(37);

f.save();

Кажется, этот код использует ID3v1, поскольку он обрезает длинные строки до 30 символов, да, я читал википедию об этом: PI нужно, чтобы он использовал ID3v2дать длинные данные. Есть мысли?

Ответы [ 2 ]

1 голос
/ 12 июня 2011

Как я понял из документации ffmpeg, ffmpeg.exe использует кодек lame.Таким образом, вы можете проверить, как настроить lame вместо ffmpeg.У Lame есть опции для тегов ID3, посмотрите их домашнюю страницу здесь: http://lame.cvs.sourceforge.net/viewvc/lame/lame/USAGE

0 голосов
/ 12 июня 2011

Вы можете использовать класс TagLib :: MPEG :: File, чтобы открыть файл, и ID3v2Tag, чтобы получить тег ID3v2.Ваш код станет таким:

  TagLib::MPEG::File f("some_mp3.mp3");
  f.ID3v2Tag()->setArtist("Loooooooooooooooooooooooooooooooooooong Artist");
  f.ID3v2Tag()->setAlbum("Loooooooooooooooooooooooooooooooooooong Album");
  f.ID3v2Tag()->setTitle("Loooooooooooooooooooooooooooooooooooong Title");
  f.ID3v2Tag()->setTrack(37);
  f.save();

Надеюсь, это поможет

...