Инструмент командной строки для определения спецификаций аудиофайлов


12

Я ищу аудиофайл, эквивалентный команде идентификации ImageMagick .

Например, с помощью identifyя могу получить краткую информацию о группе изображений:

% identify b*
banner1.jpg JPEG 134x614 134x614+0+0 8-bit DirectClass 38.4kb 
banner.jpg[1] JPEG 772x307 772x307+0+0 8-bit DirectClass 37.5kb 
bg2.jpg[2] JPEG 103x1500 103x1500+0+0 8-bit DirectClass 43kb 
bg_control_nav.png[3] PNG 13x39 13x39+0+0 8-bit DirectClass 1.73kb 
bg_direction_nav.png[4] PNG 104x52 104x52+0+0 8-bit DirectClass 3.3kb 

Я хотел бы получить аналогичную информацию о моих аудиофайлах.

Моя конечная цель состоит в том, чтобы создать сценарий для просмотра всей моей mp3-библиотеки и идентификации тех, которые были скопированы на более низких битрейтах, а затем использовать эти данные для повторного копирования моих компакт-дисков (или для покупки более качественных версий в Amazon или iTunes).

Решения для OS X / Linux предпочтительнее решений Windows


И еще один: MediaInfo
slhck

Mediainfo великолепен и имеет интерфейс командной строки.
23

Интересно, но приложение GUI не работает для этой необходимости.
Даг Харрис

Ответы:


10

На OS X вы можете просто использовать mdlsили mdfind.

$ mdls 01\ Kindred.mp3 
kMDItemAlbum                   = "Kindred EP"
kMDItemAudioBitRate            = 320000
kMDItemAudioChannelCount       = 2
kMDItemAudioSampleRate         = 44100
kMDItemAudioTrackNumber        = 1
kMDItemAuthors                 = (
    Burial
)
kMDItemComment                 = "HDB059"
kMDItemContentCreationDate     = 2012-03-19 21:20:59 +0000
kMDItemContentModificationDate = 2012-06-04 16:07:09 +0000
kMDItemContentType             = "public.mp3"
kMDItemContentTypeTree         = (
    "public.mp3",
    "public.audio",
    "public.audiovisual-content",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemDateAdded               = 2012-04-02 19:49:07 +0000
kMDItemDisplayName             = "01 Kindred.mp3"
kMDItemDurationSeconds         = 686.08
kMDItemFSContentChangeDate     = 2012-06-04 16:07:09 +0000
kMDItemFSCreationDate          = 2012-03-19 21:20:59 +0000
kMDItemFSCreatorCode           = ""
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = 0
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "01 Kindred.mp3"
kMDItemFSNodeCount             = 27457838
kMDItemFSOwnerGroupID          = 20
kMDItemFSOwnerUserID           = 501
kMDItemFSSize                  = 27457838
kMDItemFSTypeCode              = ""
kMDItemKind                    = "MP3 audio"
kMDItemLogicalSize             = 27457838
kMDItemMediaTypes              = (
    Sound
)
kMDItemMusicalGenre            = "Dubstep"
kMDItemPhysicalSize            = 27459584
kMDItemRecordingYear           = 2012
kMDItemTitle                   = "Kindred"
kMDItemTotalBitRate            = 320000

mdfind -onlyin ~/Music 'kMDItemFSName==*.mp3&&kMDItemAudioBitRate<=192000'


2
До сих пор голосовали за все ответы, но этот получает галочку, потому что (а) он является родным для OS X и (б) использует существующую информацию метаданных центра внимания, и эта команда mdfind быстро работает безумно.
Даг Харрис

Объединение обоих и создание списка названий альбомов с некачественными битрейтами:mdfind -0 -onlyin ~/Music 'kMDItemFSName==*.mp3&&kMDItemAudioBitRate<=192000'| xargs -0 mdls -name kMDItemAlbum | sort | uniq
Даг Харрис

8

Для простоты разбора вывода попробуйте ffprobe -show_format 2>/dev/nullиз FFmpeg.

На OS X вы можете установить его через Homebrew через brew install ffmpeg.

$ ffprobe * .mp3 -show_format 2> / dev / null
[ФОРМАТ]
имя файла = 02. Сальвадор Дали.mp3
nb_streams = 2
format_name = mp3
format_long_name = MPEG Audio Layer 2/3
start_time = 0.000000
Продолжительность = 300.254667
Размер = 7206112
bit_rate = сто девяносто одна тысяча девятьсот девяносто девять
TAG: title = Сальвадор Дали
TAG: художник = Siela
TAG: дорожки = 2/10
TAG: альбом = Дали
TAG: дата = 2005
TAG: жанр = готик рок
TAG: replaygain_album_peak = 1.188815
TAG: replaygain_track_peak = 1.178607
TAG: replaygain_track_gain = -9,00 дБ
TAG: replaygain_album_gain = -9,12 дБ
TAG: album_artist = Siela
[/ФОРМАТ]

В скрипте:

find -iname '*.mp3' | while read -r file; do
    bitrate=$(ffprobe "$file" -show_format 2>/dev/null |
              awk -F"=" '$1 == "bit_rate" {print $2}')
    if (( bitrate <= 128000 )); then
        echo "[$bitrate] $file"
    fi
done

5

РЕДАКТИРОВАТЬ: только что нашел программу для Linux

Под Linux, mp3info :

mp3info -p "%Q %L %v %o %r" test.mp3
output:
48000 III 1.000000 joint stereo

Я знаю, что вы хотите решение Linux; однако, по тому, как вы сформулировали свой вопрос, похоже, что решение для Windows не полностью ...

Под Windows, tag.exe сделает эту работу.

Пример:

C:\mp3>tag.exe "test.mp3"
Tag - Automatic Tag from filename
Copyright (c) 2002-2003 Case.  Minor additions by Neil Popham, 2004-2007
Version 2.0.52, Compiled 2007-05-04

C:\dl\test.mp3
Format:  MPEG 1 Layer 3, Joint Stereo
Details: 44100 Hz Stereo, 128 kbps, playtime 05:24
Tag:     ID3v2

Чтобы просто получить битрейт:

C:\mp3>tag.exe "test.mp3" 2>&1 | findstr /i "Details:"
Details: 44100 Hz Stereo, 128 kbps, playtime 05:24

4

Очень простая утилита sox
Mine была предварительно установлена ​​в системе linux.

 soxi auidofile.wav 

Вывод :

 Input File     : 'Yvette_Audin_F_70_7e.wav154.wav'
 Channels       : 2
 Sample Rate    : 44100
 Precision      : 24-bit
 Duration       : 00:00:10.01 = 441254 samples = 750.432 CDDA sectors
 File Size      : 2.65M
 Bit Rate       : 2.12M
 Sample Encoding: 24-bit Signed Integer PCM

что-то очень полезное в том, что это позволило мне конвертировать стерео 2-канальный в моноканал. Мне нужно было обучить модели машинного обучения для аудио файлов.

РЕДАКТИРОВАТЬ: более простой метод преобразования 2-канального звука в моносигнал :

 from pydub import AudioSegment  
 song = AudioSegment.from_wav("01.wav")
 song = song.set_channels(1)
 song.export("01.wav", format='wav')

Обрабатывает все виды файлов, но не mp3 !
not2qubit

.mp3 можно легко конвертировать в .wav, используя онлайн-конвертеры. Может быть, у Matlab есть несколько библиотек для этого. Или ваши окна имеют конвертер звука для того же. возможно заводской формат ...
Приянк Патхак

Да, но это не то, что попросил ОП.
not2qubit

Можно будет оставить здесь для будущей помощи.
Приянк Патхак

1

mp3info был разработан под Linux, но должен работать на большинстве вариантов UN * X. ... MP3Info также может отображать различные технические аспекты файла MP3, включая время воспроизведения, битрейт, частоту дискретизации и другие атрибуты в предварительно определенном или определяемом пользователем формате вывода.

или

MP3 :: Info - Управляет / извлекает информацию из аудиофайлов MP3

возможно

  perl -MMP3::Info \
       -e 'print ($_, ": ",MP3::Info->new($_)->bitrate, "\n") for (@ARGV)' *.mp3

(Непроверенные)


1

ffprobe - ваш друг (вы также можете использовать avconv, mplayer; все они возвращают информацию о мультимедиа, но ffprobe просто возвращает необходимую вам информацию)

С потоком:

ffprobe http://96.127.183.74:8604/live

Возвращает

...
Stream #0:0: Audio: aac (HE-AACv2), 44100 Hz, stereo, fltp, 31 kb/s

С локальным файлом:

ffprobe some_file.mp3 

Возвращает

...
encoder         : LAME 64bits version 3.99.5
...
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.