Вывод тегов ID3 ​​из группы файлов MP3 в виде файла CSV

Я хотел бы экспортировать все теги ID3 (как ID3v1, так и ID3v2) в группу файлов MP3 в виде файла CSV или чего-то подобного. В настоящее время я использую Mp3tag для тегов, но его функция экспорта требует, чтобы я указал, какие теги я хочу экспортировать; Я просто хотел бы экспортировать все существующие теги (а в идеале только те, которые существуют) в любом из файлов MP3 (включая определенные пользователем теги «TXXX»). Для тегов «APIC», хранящих встроенные изображения, было бы достаточно вывести, что тег существует (или, что еще лучше, количество встроенных изображений).

Я использую Microsoft Windows и ищу бесплатное решение. Я с удовольствием использую инструменты командной строки (на самом деле, я часто предпочитаю их).

Спасибо

Ответы (3)

Я бы посоветовал взглянуть на EyeD3 , который является одновременно инструментом командной строки и библиотекой Python для выполнения именно того, что вы ищете. Сам по себе он будет делать многое из того, что вам нужно - с помощью тривиального скрипта Python он сможет делать именно то, что вы ищете, используя python, встроенный в библиотеку csv.

И EyeD3, и python бесплатны, кроссплатформенны и работают из командной строки.

Сначала установите python в свою систему, а затем используйте pip install eyeD3для получения EyeD3.

Для справки в будущем (снято из комментариев) :

ОП, более опытный в Perl, чем Python, использовал библиотеку perl MP3::Tag для выполнения задачи, есть также аналогичные библиотеки для ряда других языков, например taglib-ruby

Просто чтобы продолжить - я не смог заставить работать EyeD3 - у меня нет опыта работы с Python. Но вы подали мне идею попробовать это с Perl, с которым у меня больше опыта. Я использовал Perl-модуль MP3::Tag и написал свой собственный скрипт, который теперь работает и выводит нужную мне информацию.
@osullic, Учитывая, что perl MP3::Tag решил вашу проблему, и этот ответ подтолкнул вас в правильном направлении, я бы предложил принять его в качестве вашего ответа. В качестве альтернативы вы можете ответить себе и принять это.

Инструменты командной строки для пакетного вывода тегов ID3

Вот моя коллекция средств просмотра тегов ID3. Я собирал их за последние пару месяцев для другого проекта, над которым сейчас работаю. Вы можете манипулировать сценарием PowerShell для обработки любого количества файлов. Но для облегчения понимания я продемонстрировал это с одним входным файлом на первом этапе.

  1. taglib » Пример вывода

    • Pro: показывает все теги, включая нестандартные
    • Недостатки: нет размеров крышки
  2. Exiftool » Пример вывода

    • Pro: показывает все теги, включая нестандартные
    • Недостатки: нет размеров крышки
  3. FFProbe » Пример вывода

    • Pro: показывает все теги, включая нестандартные, показывает размеры обложки
    • Против: не удается прочитать тег комментария
  4. FFMpeg » Пример вывода

    • Pro: показывает все теги, включая нестандартные, показывает размеры обложки
    • Против: не удается прочитать тег комментария
  5. Ручной тормоз » Пример вывода

    • Pro: показывает все теги, включая нестандартные, показывает размеры обложки
    • Против: не удается прочитать тег комментария
  6. Медиаинфо » Пример вывода

    • Pro: показывает все теги, включая нестандартные
    • Недостатки: нет размеров крышки
  7. MetaMP3 » Пример вывода

    • Pro: показывает все теги, включая нестандартные
    • Недостатки: нет размеров крышки
  8. gettags » Пример вывода

    • Pro: показывает все теги, включая нестандартные
    • Против: показывает теги TXXX без содержимого
  9. Теггер » Пример вывода

    • Pro: Может читать тег комментариев, в отличие от некоторых других
    • Против: нет тегов TXXX
  10. mpgtx » Пример вывода

    • Pro: показывает теги TXXX и replay_gain
    • Contra: нет альбомов, жанров, тегов комментариев
  11. тег » Пример вывода

  12. sox » Пример вывода

  13. MP3info » Пример вывода

    • Против: теги ID3V2 вообще отсутствуют.

Следующие сценарии Powershell демонстрируют наиболее полезный синтаксис для каждого инструмента для просмотра только тегов ID3. Вы должны загрузить все инструменты и изменить все пути в сценарии или курсе.

Синтаксис

# Choose mp3 file to view ID3 tags from
$input     = "D:\_input\musicfile.mp3"
$outDir    = "D:\_output"

# Set correct paths to downloaded ID3 tools
$taglib    = "D:\tag-lib\taglib-sharp.dll"
$exiftool  = "D:\exiftool\exiftool.exe"
$ffprobe   = "D:\ffmpeg\ffprobe.exe"comment)
$ffmpeg    = "D:\ffmpeg\ffmpeg.exe"
$handbrake = "D:\handbrake\handbrakeCLI.exe"
$mediainfo = "D:\MediaInfo\MediaInfo.exe"
$metamp3   = "D:\metamp3\metamp3.exe"
$gettags   = "D:\gettags\gettags_mingw.exe"
$tagger    = "D:\Tagger\TaggerSharp.exe"
$mpgtx     = "D:\mpgtx\mpgtx.exe"
$tag       = "D:\Tag\Tag.exe"
$sox       = "D:\sox\sox.exe"
$mp3info   = "D:\mp3info\mp3info.exe"    

# Load taglib library, read ID3 tags and save output to specified folder
[void][system.reflection.assembly]::loadfile($taglib)     
$media = [taglib.MPEG.file]::create($input)    
[TagLib.Id3v2.Tag] $Id3v2 = $media.GetTag([TagLib.TagTypes]::Id3v2)
$Id3v2.GetFrames()                                                 | Out-File "$outDir\taglib.txt"

# Run all external CMD utilities and save their output to specified folder
& $exiftool -ee -e -a -f -g1 -s  $input 2>&1                       | Out-File "$outDir\exiftool.txt"
& $ffprobe -loglevel quiet -show_streams -show_format -print_format flat=h=1 $input 2>&1 | Out-File "$outDir\ffprobe.txt"
[string](& $ffmpeg -hide_banner -i $input -f NULL nul 2>&1 )       | Out-File "$outDir\ffmpeg.txt" 
[string](& $handbrake -v0 --scan --input $input 2>&1)              | Out-File "$outDir\handbrake.txt"
& $mediainfo --full $input 2>&1                                    | Out-File "$outDir\mediainfo.txt"
& $metamp3 --info $input 2>&1                                      | Out-File "$outDir\metamp3.txt"
& $gettags $input 2>&1                                             | Out-File "$outDir\gettags.txt"
& $tagger $input 2>&1                                              | Out-File "$outDir\tagger.txt"
(& $mpgtx -i $input 2>&1 ) -replace "`0"                           | Out-File "$outDir\mpgtx.txt" 
& $tag --test $input 2>&1                                          | Out-File "$outDir\tag.txt"
& $sox --info $input 2>&1                                          | Out-File "$outDir\sox.txt"
& $mp3info $input 2>&1                                             | Out-File "$outDir\mp3info.txt"

Мой личный фаворит, taglib-sharpтак как он выводит больше всего информации. После того, как наступит ExifToolиffprobe

Я думаю, что этот ответ лучше, чем выбранный. Единственное, чего мне здесь не хватает, так это какого-либо примера, чтобы фактически ответить на вопрос, т.е. синтаксиса командной строки для фактического помещения ID3-тегов многих файлов в файл .csv. В то время как вы демонстрируете большое разнообразие инструментов, которые можно использовать для решения данной проблемы, вы, похоже, сосредоточены на выводе тегов ID3 ​​в виде вывода командной строки. ИМХО, ваш ответ был бы действительно ценным, если бы в нем был хотя бы один пример сброса данных тега ID3 в .csvфайл. Но все равно спасибо за все старания. Жаль, что я могу проголосовать за этот ответ только один раз.

Я немного опоздал в игру, но мой ответ может помочь кому-то еще.

Я думаю, что вы продаете Mp3tag маловато для этой задачи. Его функция экспорта достаточно надежна и позволит вам создать практически любой текстовый формат по вашему выбору: html, xml, csv, tsv и json, и это лишь некоторые из них.

Например, я использую следующее для вывода всех полей из всех файлов для каждого альбома. Перейдите в меню «Файл» > «Экспорт» > «Создать» (кнопка) > введите осмысленное имя > замените стандартное на следующее:

$filename(%_folderpath%__Tags, All.txt,utf-8)$loop(%_path%)^%_parent_directory%|%_directory%|$regexp($list(,:'',''|),\r \n,U+000DU+000A)$$$char(13)$char(10)$loopend() Создано: %_datetime%

Установите флажок «один файл в каталоге» и запустите. Вы получите CSV с трубой "|" как разделитель в каждом обрабатываемом каталоге. И можно обрабатывать тысячи каталогов за один раз.

На форуме есть и другие примеры (поиск вам в помощь), и люди там готовы помочь вам помочь себе.