วิธีอ่านแท็ก mp3 ในเชลล์?


53

มีวิธีอ่านแท็ก mp3 ของไฟล์จากเปลือกหรือไม่? อย่างเช่น: mp3tags MyFile.mp3 authorควรเอาท์พุทของผู้แต่งแท็กของไฟล์ mp3

คำตอบ:


47

นอกจากนี้คุณยังสามารถใช้ซึ่งเป็นส่วนหนึ่งของffprobeffmpeg

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


1
ว้าว. ฉันเป็นผู้ใช้พลังงาน exiftool มาหลายปีแล้วและฉันก็ไม่รู้เหมือนกันว่ามันสามารถอ่านข้อมูลเมตาของไฟล์เสียงได้! การแก้ปัญหา ffprobe (หรือ avprobe ในกรณีของฉัน) ก็ยอดเยี่ยมเช่นกันขอบคุณ นี่คือคำตอบที่ดีที่สุด!
2559

1
ขอบคุณสำหรับการทำงานมโหฬาร! เครื่องมือเหล่านี้บางอย่างไม่สามารถใช้งานได้จากผู้จัดการแพ็คเกจของฉันใน Fedora คุณช่วยรวมid3infoไว้ในการเปรียบเทียบของคุณได้ไหม
Vytenis Bivainis

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.

@JonathanY คุณพูดถูก AAC เข้ารหัสเสียงที่จัดเก็บในไฟล์ M4A-containter มีข้อมูลเมตาที่ไม่ใช่ ID3 ดังนั้นจึงสามารถอ่านได้โดย ffmpeg และ exiftool นอกจากนี้จากคำตอบของฉัน
mxmlnkn

FLACs มีรูปแบบเมตาดาต้าอื่นที่แตกต่างจาก 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 หมายถึงว่าต้องการได้ศิลปินและมีคีย์อื่น ๆ สำหรับแท็กอื่น ๆ


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 (ดูสิ่งที่ต้องทำ) แท็ก v2 mp3infoยังไม่ได้รับการสนับสนุนโดย คุณอาจต้องการดูid3v2- มันสามารถแก้ไข / เพิ่ม v2 และแสดง v1 และ v2 หากคุณไม่ชอบวิธีแสดงแท็กคุณสามารถเขียนสคริปต์ที่ทำงานid3v2และประมวลผลเอาต์พุตได้อย่างเหมาะสม
S Prasanth

@SPrasanth วิธีทำให้แท็กเฉพาะแสดงขึ้น ตัวอย่างเช่นเฉพาะศิลปินของไฟล์ MP3 เท่านั้น
Gowtham Gopalakrishnan

@SPrasanth ฉันเข้าใจแล้ว ขอบคุณฉันใช้-Rflag กับgrepเพื่อรับผลลัพธ์ที่ระบุ
Gowtham Gopalakrishnan

เมื่อคุณพิมพ์ชื่อเพลงด้วย% t ภาพจะถูกพิมพ์ออกมา
Tulains Córdova

1
Only ID3 versions 1.0 and 1.1 are supportedแต่น่าเสียดายที่:
simlev

11

คุณสามารถใช้eyed3 ก่อนอื่นจากเทอร์มินัลให้ติดตั้ง:

sudo apt-get install eyed3

จากนั้นเรียกใช้:

eyeD3 song.mp3

รวมเข้ากับgrepเพื่อรับแท็กเฉพาะในหนึ่งบรรทัด

eyeD3 song.mp3 | grep artist

(เพื่อตัดแท็ก mp3 ทั้งหมดดูที่นี่ )


1
ฉันลองสิ่งนี้และคำสั่งที่ใช้คือ eyeD3 พร้อมตัวพิมพ์ใหญ่ D) แต่ฉันพบเครื่องมืออื่นที่ตรงกับความต้องการของฉันดีกว่าชื่อ mp3info มันสามารถเอาท์พุทแท็ก mp3 ได้โดยไม่จำเป็นต้องใช้ grep
red_trumpet

eyeD3 ทำงานที่ดีสำหรับฉันเพราะมันทำงานร่วมกับ ID3v2 แต่ @red_trumpet ที่ถูกต้องคำสั่งที่ควรจะเป็นeyeD3ไม่ได้eyed3
bmaupin

eyeD3 --plugin display -p "%t% by %a%" *ใช้ปลั๊กอินการแสดงผลไปยังแท็กเอาท์พุทในรูปแบบที่ต้องการ:
simlev

สิ่งนี้จะไม่แสดงแท็กทั้งหมดเช่นไม่มี ISRC โปรแกรมที่กล่าวถึงด้านล่าง id3v2 นั้นจะส่งคืน ISRC เช่นกัน แต่ไม่มีช่วงเวลา ...
minyves

8

ฉันชอบที่จะใช้ ID3v2 id3v2 -l somefile.mp3เพียงพิมพ์ คุณยังสามารถดูหน้า man id3v2 สำหรับการใช้งานที่เฉพาะเจาะจงมากขึ้น


นี่ยอดเยี่ยมและใช้งานได้ดีมาก
jpo38

ควรเป็นคำตอบที่ดีที่สุดแน่นอนว่าเครื่องมืออื่น ๆ ทั้งหมดมีปัญหาการพึ่งพาในการแจกแจงบางอย่าง
Sergio

ขอแนะนำที่นี่mid3v2แทนเนื่องจากไม่มีการสนับสนุน Unicode นอกจากนี้ยัง ID3v2 การปรับปรุงครั้งล่าสุดคือเมื่อ 2013
Pablo

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, ใบไม้, 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

ตรวจสอบlltagว่าคุณกำลังมองหาโซลูชันที่รองรับมากกว่า mp3 / ID3 หรือไม่

ติดตั้งด้วย:

sudo apt-get install lltag

เพื่อดูแท็กทั้งหมดที่มี: ( -Sสำหรับการแสดง)

lltag -S somefile.mp3

เพื่อดูแท็กบางอย่างกับมัน:

lltag --show-tags artist,album,title,number somefile.mp3

0

หัวผักกาด

คุณสามารถเริ่มต้นด้วยscreencast นี้และการเริ่มต้นใช้คู่มือ

ติดตั้งอย่างใดอย่างหนึ่ง:

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

นอกจากนี้:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.