В этой статье рассмотрим один из вариантов, как можно изменить теги в mp3 файле с помощью php.
Для изменения тегов, будем пользоваться библиотекой getID3. Переходим по ссылке, и копируем себе на сайт папку getID3 Эта библиотека обширная, почитать сможете на странице разработчика. Мы же будем использовать всего два файла, которые подключим в наш код: write.php – для изменения полей тегов, getid3.php – для чтения тегов.
Пример записи тега
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$filename="music.mp3"; require_once(__DIR__.'/getid3/write.php'); $tagwriter = new getid3_writetags; $tagwriter->filename = $filename; $tagwriter->tagformats = array('id3v1', 'id3v2.3'); $tagwriter->overwrite_tags = true; $tagwriter->remove_other_tags = false; $TextEncoding = 'UTF-8'; $tagwriter->tag_encoding = $TextEncoding; $TagData['title'][] = "Название песни"; $TagData['artist'][] ="Исполнитель"; $TagData['year'][] = 2020; $TagData['comment'][] = 'Супер_песня'; $TagData['genre'][] = 'Pop'; $tagwriter->tag_data = $TagData; $tagwriter->WriteTags(); |
В этом примере мы заполняем сразу два формата метаданных. При этом есть одна особенность, кириллица в id3v1 будет отображаться некорректно, в виде знаков вопроса, а id3v2.3 отобразится корректно. На id3v1 можно не обращать внимания, все современные проигрыватели будут брать метаданные из id3v2.3.
Некорректное отображение кириллицы в id3v1 связано с функцией FormatDataForID3v1(), которая находится в файле write.php. В FormatDataForID3v1() все поля конвертируются в кодировку ISO-8859-1. Поэтому, чтобы исправить баг с кодировкой, можно в функции FormatDataForID3v1() заменить ISO-8859-1 на cp1251.
Теперь прочитаем метаданные
1 2 3 4 5 6 7 8 |
$filename="music.mp3"; require_once(__DIR__."/getid3/getid3.php"); $getID3 = new getID3; $file = $getID3->analyze($filename); $tag = $file['tags']; print_r($tag); |
Ответ будет такой
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
[id3v2] => Array ( [title] => Array ( [0] => Название песни ) [artist] => Array ( [0] => Исполнитель ) [year] => Array ( [0] => 2020 ) [comment] => Array ( [0] => Супер_песня ) [genre] => Array ( [0] => Pop ) ) |
Всю информацию по файлу можно получить следующим образом: print_r ($file); В ответ получите массив со всеми значениями.