Запись метаданных 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 Мне нужно, чтобы он использовал ID3v2 для получения длинных данных. Есть предположения?


person Alex    schedule 12.06.2011    source источник


Ответы (2)


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

person Darokthar    schedule 12.06.2011
comment
Кодировка идет нормально, мне просто нужно установить метаданные. Это может быть и есть в моем случае отдельный пропуск. В настоящее время я смотрю на ID3lib, где я могу установить длинные текстовые значения, но у меня проблемы с настройкой текстов UTF-8. - person Alex; 12.06.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();

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

person LoSciamano    schedule 12.06.2011
comment
Все еще сокращает строки до 30 символов. Любая другая библиотека, способная устанавливать эти четыре типа метаданных с длинными строками, также может работать для меня, если не найдется другого решения :) - person Alex; 12.06.2011
comment
Я только что обнаружил, что оба кода, похоже, хранят всю строку, но Windows Explorer и мой MP3-плеер отображают только первые 30 символов. Если я устанавливаю метаданные с помощью проводника Windows, они отображаются в полном объеме на моем MP3-плеере и, конечно же, в Windows. Так что я думаю, я хочу сделать то же самое в коде. - person Alex; 12.06.2011
comment
Ах, Windows Explorer и Windows Media Player не могут обрабатывать теги ID3v2 версии 2.4 в любой версии, включая Windows 7/Windows Media Player 12.[5] Windows может понимать ID3v2 до версии 2.3 включительно. Кажется, мне нужен именно ID3v2.3, верно.. - person Alex; 12.06.2011