Как читать mp3 теги в оболочке?

53

Есть ли способ прочитать теги mp3 файла из оболочки? Что-то вроде: mp3tags MyFile.mp3 authorдолжен выводить автор-тег mp3-файла.

red_trumpet
источник

Ответы:

47

Вы также можете использовать ffprobeкоторый является частью ffmpeg.

sudo apt-get install ffmpeg
ffprobe file.mp3

Если вам не нужна другая информация, такая как длина дорожки и т. Д., Вы можете объединить вывод с помощью grep:

ffprobe file.mp3 2>&1 | grep -A90 'Metadata:'

Или для того, чтобы получить только автора:

ffprobe -loglevel error -show_entries format_tags=artist -of default=noprint_wrappers=1:nokey=1 file.mp3

Вы можете выбрать другие теги, разделяя их запятой, например format_tags=title,album.


Я хотел найти ключевое слово во всех mp3-файлах в папке. В папке было 486 файлов, поэтому стало интересно узнать, какое из упомянутых здесь решений является самым быстрым. Вот цикл, который я использовал:

# sudo apt-get install ffmpeg lltag eyed3 mp3info id3v2 libimage-exiftool-perl libid3-tools id3tool

keyword='fill_me_in'

getTitleFF()   { ffprobe "$1" 2>&1 | sed -E -n 's/^ *title *: (.*)/\1/p'; }
getTitleLL()   { lltag --show-tags title "$1" | sed -nE 's/^  TITLE=(.*)/\1/p'; }
getTitleEyed() { eyeD3 2>&1 "$1" | sed -n 's|\x1b\[[0-9;]*mtitle[^:]*: ||p'; }
getTitleInfo() { mp3info -p %t "$1"; }
getTitleId3()  { id3v2 -l "$1" | sed -nE 's/^(TIT2 \([^)]*\)|Title *): (.*)/\2/p'; }
getTitleExif() { exiftool -title -b "$1"; }
getTitleId3i() { id3info "$1" | sed -nE 's/^=== TIT2 \([^)]*\): //p'; }
getTitleTool() { id3tool "$1" | sed -n 's|^Song Title:\t||p'; }

for prog in FF LL Eyed Info Id3 Exif Id3i Tool; do
    echo "=== getTitle${prog} ==="
    time \
    for file in *.mp3; do 
        if "getTitle${prog}" "$file" | grep -q "$keyword"; then 
            echo "$file"
        fi
    done
done

Примечания:

  • lltagи mp3infoне могу найти заголовок, потому что файлы, которые я использовал, имели теги ID3v2, см. комментарий @ s-prasanth: Как читать теги mp3 в оболочке?
  • eyeD3 проблематично использовать программно, потому что в нем используются цветовые коды (жирность).
  • eyeD3а также id3v2(но только для тегов ID3 ​​v1) возвращает заголовок и исполнителя в одной строке, что еще более усложняет ситуацию; поэтому getTitleEyedи иногда getTitleId3возвращайте и название, и исполнителя, поэтому, пожалуйста, не копируйте и не вставляйте эти функции.
  • getTitleId3 будет работать только для тегов ID3 ​​v2, поскольку id3v2имеет разные форматы для тегов ID3v1 и ID3v2, т.е.

    Title  :                                 Artist:    
    

    против ID3v2:

    TIT2 (Title/songname/content description): 
    
  • Поскольку единственная программа из этих 5 eyeD3выводит красное предупреждение для двух файлов:

    Invalid mode/bitrate combination for layer II
    No ID3 v1.x/v2.x tag found!
    

    Кажется, что эти два файла имеют теги ID3v1, потому что эти два файла являются единственными, где lltagи mp3infoмогут получить заголовок. Мне интересно, если это ошибка, eyeD3поскольку ни у одной другой программы, упомянутой здесь, нет проблем с этими файлами ...

Результаты (в режиме реального времени):

 Program  | Version    | Time / s
----------+------------+-----------
 exiftool | 10.25      | 49.5 ± 0.5
 lltag    | 0.14.5     | 41   ± 1.0
 ffprobe  | 3.1.3-1+b3 | 33   ± 0.5
 eyeD3    | 0.6.18     | 24   ± 0.5
 id3info  | 3.8.3      | 4.2  ± 0.1
 id3v2    | 0.1.12     | 2.9  ± 0.1
 id3tool  | 1.2a       | 1.7  ± 0.1
 mp3info  | 0.8.5a     | 1.4  ± 0.1

Победителем здесь является время id3tool(mp3info быстрее, но не работает с ID3 v2). id3v2Это также довольно быстро, но getTitleId3функция должна быть настроена на работу с ID3v1-тегами, что может в худшем случае замедлить ее в 2 раза.

mxmlnkn
источник
1
Ух ты. Я был опытным пользователем exiftool в течение многих лет, и я понятия не имел, что он также может читать метаданные для звуковых файлов! Решение ffprobe (или avprobe в моем случае) также отлично, спасибо. Это лучший ответ!
марлар
1
Спасибо за вашу гигантскую работу! Некоторые из этих инструментов недоступны у моего менеджера пакетов в Fedora. Не могли бы вы включить id3infoв ваше сравнение?
Витенис Бивайнис
ffmpegимеет еще одно преимущество: он работает с aac/ m4afiles. Другие инструменты, кажется, не (или вы знаете иначе?). Я также предлагаю поискать его FORMATраздел, чтобы избежать случаев, когда поток также имеет и titleт.д .: ffprobe -loglevel error -show_entries format -i "$1" 2>&1 | sed -E -n 's|^TAG:title=(.*)$|\1|p'.
Джонатан Я.
@JonathanY. Вы правы, аудио в кодировке AAC, хранящееся в файле M4A-контейнера, содержит метаданные не-ID3 и, следовательно, может быть прочитано только ffmpeg и дополнительно exiftool из выбора в моем ответе.
mxmlnkn
FLAC имеет другой формат метаданных, отличный от MP4 / M4A, а именно метаданные комментариев vorbis, но теги также можно читать с помощью exiftoolили ffprobe. Более специализированный инструмент для этой работы будет metaflac --listиз flacпакета. Для ogg exiftoolтоже работает, но есть и vorbiscomment -lиз vorbis-toolsпакета. Странно vorbiscommentи metaflacне может быть взаимозаменяемо, хотя FLAC и OGG имеют метаданные vorbis coment?
mxmlnkn
26

Хорошо, я нашел программу самостоятельно. Это называется mp3info и устанавливается

sudo apt-get install mp3info

Чтобы получить отдельные mp3-теги из файла, нужно позвонить

mp3info -p %a file.mp3

который дает исполнителю файл. % A означает, что один хочет получить исполнителя, и есть другие ключи для других тегов.

red_trumpet
источник
20
Дополнительная информация: Существует 4 различных стандарта mp3-тегов: id3v1, id3v2.2 (устарел), id3v2.3, id3v2.4 en.wikipedia.org/wiki/ID3 . Файл может иметь теги v1 и / или v2 (да, v1 и v2 могут сосуществовать, но v2.x и v2.y не могут сосуществовать). Я считаю v2.3 наиболее широко используемым. Согласно ibiblio.org/mp3info (см. Todo) теги v2 не поддерживаются mp3info. Возможно, вы захотите посмотреть id3v2- он может редактировать / добавлять v2 и отображать v1 и v2. Если вам не нравится, как отображаются теги, вы можете написать скрипт, который будет запускать id3v2и обрабатывать вывод соответствующим образом.
S Prasanth
@SPrasanth как сделать так, чтобы отображался определенный тег. Например: только исполнитель mp3-файла?
Гаутам Гопалакришнан,
@ SPrasanth я понял. Спасибо, я использую -Rфлаг с, grepчтобы получить указанный вывод.
Гаутам Гопалакришнан,
Когда вы печатаете заголовок дорожки с% t, он печатает его обрезанным.
Тулаинс Кордова
1
К сожалению: Only ID3 versions 1.0 and 1.1 are supported.
Симлев
11

Вы можете использовать eyed3 . Сначала из терминала установите:

sudo apt-get install eyed3

Затем запустите:

eyeD3 song.mp3

Объедините это с, grepчтобы получить определенные теги в одной строке.

eyeD3 song.mp3 | grep artist

(чтобы удалить все mp3-теги, смотрите ЗДЕСЬ )

philshem
источник
1
Я попробовал это, и команда для использования является eyeD3, с заглавной буквы D;). Но я нашел другой инструмент, который лучше соответствует моим потребностям, называется mp3info. Это может выводить mp3-теги без необходимости использовать grep, который я предпочитаю.
red_trumpet
eyeD3 работает лучше для меня, потому что он работает с id3v2, но @red_trumpet верен, команда должна быть eyeD3неeyed3
bmaupin
Использование дисплея плагин для вывода тегов в нужном формате: eyeD3 --plugin display -p "%t% by %a%" *.
Симлев
Это не отображает ВСЕ теги, например, нет ISRC. Приведенная ниже программа id3v2 также возвращает ISRC, но без продолжительности ...
мин.
8

Я предпочитаю использовать id3v2, просто введите id3v2 -l somefile.mp3. Вы также можете увидеть справочную страницу id3v2 для более конкретного использования.

Psddp
источник
Это здорово и работает очень хорошо
jpo38
Определенно должен быть лучший ответ, все другие инструменты имеют проблемы с зависимостями в некоторых дистрибутивах.
Серхио
Здесь рекомендуется mid3v2вместо этого из-за отсутствия поддержки Unicode. Также id3v2 последнее обновление было в 2013 году .
Пабло А
2

Вы можете попробовать exiftool (чтение и запись метаинформации в файлах).

«ExifTool - это независимая от платформы библиотека Perl плюс приложение командной строки для чтения, записи и редактирования метаинформации в самых разных файлах. ExifTool поддерживает множество различных форматов метаданных, включая EXIF, GPS, IPTC, XMP, JFIF, GeoTIFF, ICC Профиль, Photoshop IRB, FlashPix, AFCP и ID3, а также заметки изготовителя многих цифровых камер Canon, Casio, FLIR, FujiFilm, GE, HP, JVC / Victor, Kodak, Leaf, Minolta / Konica-Minolta, Motorola, Nikon, Nintendo, Olympus / Epson, Panasonic / Leica, Pentax / Asahi, Phase One, Reconyx, Ricoh, Samsung, Sanyo, Sigma / Foveon и Sony ». - ExifTool от Фила Харви

Вот пример команды:

exiftool test.mp3 
ExifTool Version Number         : 10.00
File Name                       : test.mp3
Directory                       : .
File Size                       : 8.2 MB
File Modification Date/Time     : 2016:03:02 21:44:58+01:00
File Access Date/Time           : 2016:04:06 21:34:01+02:00
File Inode Change Date/Time     : 2016:03:02 21:45:36+01:00
File Permissions                : rw-rw-r--
File Type                       : MP3
File Type Extension             : mp3
MIME Type                       : audio/mpeg
MPEG Audio Version              : 1
Audio Layer                     : 3
Sample Rate                     : 44100
Channel Mode                    : Stereo
MS Stereo                       : Off
Intensity Stereo                : Off
Copyright Flag                  : False
Original Media                  : False
Emphasis                        : None
VBR Frames                      : 9544
VBR Bytes                       : 8467680
ID3 Size                        : 115419
Band                            : Tech N9ne Collabos
Album                           : Strangeulation (Deluxe Edition)
Composer                        : Tech N9ne Collabos
Genre                           : Rap & Hip-Hop
Copyright                       : 2014 Strange Music, Inc
Title                           : American Horror Story (feat. Ces Cru)
Artist                          : Tech N9ne Collabos
Track                           : 10
Year                            : 2014
Comment                         : 
Lyrics                          : 
Private                         : (Binary data 8192 bytes, use -b option to extract)
Picture MIME Type               : image/jpeg
Picture Type                    : Front Cover
Picture Description             : 
Picture                         : (Binary data 104371 bytes, use -b option to extract)
Audio Bitrate                   : 272 kbps
Date/Time Original              : 2014
Duration                        : 0:04:09 (approx)
blade19899
источник
1

Проверьте, lltagесли вы ищете решение, которое поддерживает больше, чем просто mp3 / ID3.

Установите его с помощью:

sudo apt-get install lltag

просмотреть все теги с ним: ( -Sдля галочки)

lltag -S somefile.mp3

для просмотра определенных тегов:

lltag --show-tags artist,album,title,number somefile.mp3
0xcaff
источник
0

Свеклу

Вы можете начать с этим скринкастом и в Начале работы руководства

Установите либо:

pip install beets  # latest version
apt install beets  # repo version

Также:

Пабло А
источник