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

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

1
задан 8 December 2012 в 19:04

5 ответов

Вы также можете использовать 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. [ ! d4]

Я хотел найти ключевое слово во всех 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" | grep 'title'; }
getTitleInfo() { mp3info -p %t "$1"; }
getTitleId3()  { id3v2 -l "$1" | sed -nE 's/^TIT2 \([^)]*\): (.*)/\1/p'; }
getTitleExif() { exiftool -title -b "$1"; }
getTitleId3i() { id3info "$1" | sed -n '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, поскольку никакая другая программа, упомянутая здесь, не имеет проблемы с этими файлами ...

Примечания:

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

29
ответ дан 25 May 2018 в 03:34
  • 1
    Вау. Я уже много лет работаю с пользователем exiftool, и я даже не подозревал, что он может читать метаданные для звуковых файлов! Спасибо, ffprobe (или avprobe в моем случае). Это лучший ответ! – marlar 30 May 2016 в 22:34
  • 2
    Спасибо вам за гигантскую работу! Некоторые из этих инструментов недоступны в моем диспетчере пакетов в Fedora. Не могли бы вы включить id3info в ваше сравнение? – Vytenis Bivainis 1 October 2016 в 14:46
  • 3
    ffmpeg имеет другое преимущество: он работает с файлами aac / m4a. Другие инструменты не кажутся (или вы знаете иначе?). Я также предлагаю выполнить поиск в разделе FORMAT, чтобы избежать случаев, когда поток также имеет title и т. Д .: ffprobe -loglevel error -show_entries format -i "$1" 2>&1 | sed -E -n 's|^TAG:title=(.*)$|\1|p'. – Jonathan Y. 14 July 2017 в 18:33
  • 4
    @JonathanY. Вы правы, аудио, закодированное в AAC, хранящееся в файле контейнера M4A, имеет метаданные без ID3 и поэтому может быть прочитано только ffmpeg и дополнительно exiftool из выделения в моем ответе. – mxmlnkn 27 September 2017 в 05:22
  • 5
    FLACs имеет другой формат метаданных, отличный от MP4 / M4A, а именно метаданные комментариев vorbis, но теги также можно читать с помощью exiftool или ffprobe. Более специализированным инструментом для этого задания будет metaflac --list из пакета flac. Для ogg exiftool также работает, но также есть vorbiscomment -l из пакета vorbis-tools. Странно vorbiscomment и metaflac не могут быть взаимозаменяемы, хотя FLAC и OGG имеют метаданные com-in-vorbis? – mxmlnkn 20 February 2018 в 19:32

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

sudo apt-get install eyed3

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

eyeD3 song.mp3

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

eyeD3 song.mp3 | grep artist

(снять все теги mp3, см. eyed3 )

8
ответ дан 25 May 2018 в 03:34
  • 1
    Я попробовал это, и команда для использования - eyeD3, с заглавной буквы D;). Но я нашел еще один инструмент, который лучше соответствует моим потребностям, называется mp3info. Это может выводить mp3-теги без использования grep, что я предпочитаю. – red_trumpet 8 December 2012 в 19:29
  • 2
    eyeD3 работает лучше для меня, потому что он работает с id3v2, но @red_trumpet прав, команда должна быть eyeD3 not eyed3 – bmaupin 29 May 2013 в 09:03

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

6
ответ дан 25 May 2018 в 03:34
  • 1
    Это здорово и отлично работает – jpo38 20 June 2016 в 00:05
  • 2
    Если определенно лучший ответ, все другие инструменты имеют проблемы с зависимостями в некоторых дистрибутивах. – Sergio 9 June 2017 в 01:31

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

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

sudo apt-get install lltag

, чтобы просмотреть все теги с помощью it: (-S для показа)

lltag -S somefile.mp3

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

lltag --show-tags artist,album,title,number somefile.mp3
1
ответ дан 25 May 2018 в 03:34

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

«ExifTool - это независимая от платформы библиотека Perl плюс приложение командной строки для чтения, записи и редактирования метаинформации в широком разнообразные файлы ExifTool поддерживает множество различных форматов метаданных, включая EXIF, GPS, IPTC, XMP, JFIF, GeoTIFF, ICC Profile, 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 от Phil Harvey

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

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)
1
ответ дан 25 May 2018 в 03:34

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

Похожие вопросы: