Запись метаданных ID3v2 с использованием TagLib

Я пишу музыкальный риппер и занимаюсь этим уже несколько дней. Все работает как надо, кроме установки метаданных. Я загружаю необработанные данные 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 символов, да, я читал википедию об этом:P I нужно, чтобы он использовал ID3v2 для длинных данных. Какие-нибудь мысли?

2 ответа

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

Вы можете использовать класс 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();

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

Другие вопросы по тегам