การตั้งค่าแท็กชื่อ ID3 ให้เท่ากับชื่อไฟล์ MP3


14

มีใครมีสคริปต์ทุบตีที่จะผ่านไลบรารีสื่อและตั้งค่าแท็กชื่อ id3 ของไฟล์ MP3 แต่ละไฟล์ให้เท่ากับชื่อไฟล์หรือไม่

ฉันเปิดให้วิธีการอัตโนมัติอื่น ๆ ด้วย อาจเป็นแอปพลิเคชัน GUI หรือสิ่งใดก็ตามที่จะทำงานโดยอัตโนมัติ

มีการบันทึกเมธอด EasyTag ไว้ที่นี่: วิธีเปลี่ยนชื่อแท็กชื่อจำนวนมากในไฟล์ mp3 ID3 - แต่น่าเสียดายที่ฉันไม่เข้าใจขั้นตอน


คุณอาจตอบคำถามของคุณเอง ทำรายการขั้นตอนที่คุณพบubuntuforums.orgและอ้างอิงแหล่งที่มาของคุณ :) สิ่งนี้จะช่วยให้ผู้เยี่ยมชมในอนาคตใช้ Superuser ในกรณีที่ubuntuforums.orgลิงก์ไม่สามารถใช้งานได้
iglvzx

3
นี่คือเคล็ดลับ: 1) อย่ายุ่งเหยิงคำถามของคุณด้วย "แก้ไข 1", "แก้ไข 2" ฯลฯ แก้ไขปัญหาโดยใช้ความคิดเห็น 2) หากคุณพบวิธีแก้ไขให้โพสต์เป็นคำตอบราวกับว่าคุณกำลังพยายามตอบคำถามของคนอื่น อย่าใส่คำตอบเป็นคำถาม นั่นไม่ใช่สิ่งที่ผู้คนมองหา :) นอกจากนี้ให้ใช้ blockquotesสำหรับสิ่งที่คุณอ้างจากที่อื่น (ดูความช่วยเหลือในการจัดรูปแบบ)
slhck

ฉันสร้างสคริปต์ให้แท็กไฟล์ MP3 ในรูปแบบ "Artist - Track.mp3" อย่างถูกต้องแล้วเปลี่ยนชื่อไฟล์เป็น "Track.mp3": gist.github.com/ZachSaucier/f51e608ac75e8ed6e96cd54a9ec103b0โดยใช้eyed3
Zach Saucier

คำตอบ:


17

EasyTAG เป็นเครื่องมือที่ยอดเยี่ยมสำหรับปัญหานี้ ผมพบว่าคำตอบของฉันที่นี่ ในแง่ของวิธีการใช้งาน, การอ้างอิงที่ดีที่สุดจะออกมาเป็นเอกสารของตัวเอง EasyTAG ของ

เปิด EasyTag นำทางไปยังโฟลเดอร์ที่มีไฟล์เพลงอยู่ในนั้นเลือกไฟล์ทั้งหมดในโฟลเดอร์หรือไฟล์ทั้งหมดที่คุณต้องการติดแท็กคลิกที่ปุ่ม "สแกนไฟล์" (คุณจะต้องวางเมาส์เหนือพวกเขาเพื่อคิดออก อันไหนมัน)

จากนั้นตรวจสอบให้แน่ใจว่าตั้งค่าดรอปดาวน์ของสแกนเนอร์เป็น "เติมแท็ก" จากนั้นในฟิลด์เติมแท็กทำการแก้ไขที่เหมาะสมจนกว่าตัวอย่างด้านล่างของฟิลด์จะดูเหมือนสิ่งที่คุณกำลังมองหา หากคุณต้องการความช่วยเหลือเพิ่มเติมเกี่ยวกับสิ่งที่จะใส่ในฟิลด์ Fill Tag ให้คลิกที่ "?" ปุ่มสำหรับคำอธิบาย (รายการของรหัสที่เป็นไปได้ที่แตกต่างกันคือการแปลด้วย) และกดปุ่มหน้ากากเพื่อแสดงรายการจุดเริ่มต้นบางอย่าง

เมื่อคุณพอใจกับผลลัพธ์ให้คลิกปุ่ม "สแกนไฟล์" (ในกล่องโต้ตอบสแกนไฟล์ไม่ใช่ที่คุณคลิกครั้งแรกเพื่อไปยังตำแหน่งที่คุณอยู่ ... ไอคอนจะเหมือนกัน) และการเปลี่ยนแปลงของคุณจะถูกนำไปใช้ . หากคุณไม่ได้รับชื่อศิลปินหรืออัลบั้มเพียงเลือกทั้งหมดที่คุณต้องการเปลี่ยนป้อนข้อมูลและคลิกปุ่มเล็ก ๆ ถัดจากฟิลด์นั้นและไฟล์ทั้งหมดที่เลือกจะถูกเติมหรือเปลี่ยนเป็นศิลปินหรืออัลบั้มนั้น สามารถใช้ได้กับทุกสาขา

เมื่อเสร็จแล้วให้คลิกปุ่มบันทึกแล้วเสร็จ

PS: สแกนเนอร์ CDDB ทำงานได้ค่อนข้างดีหากคุณมีอัลบั้มเต็มที่คุณพยายามติดแท็กหรืออย่างน้อยไฟล์เพลงที่มีวางจำหน่ายทั่วไป

PPS: เห็นได้ชัดว่าฉันยังตื่นอยู่ครึ่งหนึ่ง ตามที่คุณเขียนในโพสต์ต้นฉบับของคุณลองในช่องกรอกแท็ก:

%n. %a - %t

นี่คือส่วนที่เกี่ยวข้องกับคำถามนี้:


1.2.2 โดยอัตโนมัติด้วยสแกนเนอร์ "เติมแท็ก":

เงื่อนไขบางประการที่จะใช้โหมดนี้:

  • ไฟล์ที่เรียงลำดับตามอัลบั้ม
  • ชื่อไฟล์หรือไดเรกทอรีหลักมีข้อมูลแท็ก (ศิลปิน, อัลบั้ม, ชื่อ, ... )
  • แท็กที่ว่างเปล่าหรือไม่ถูกต้อง

สแกนเนอร์“ เติมแท็ก” ใช้รูปแบบในการเชื่อมโยงคำต่าง ๆ ในชื่อไฟล์และไดเรกทอรีกับรายการแท็ก ด้วยวิธีนี้ฟิลด์แท็กสามารถทำให้สมบูรณ์โดยอัตโนมัติโดยกดปุ่ม "สีเขียว" ในหน้าต่างเครื่องสแกนหรือแถบเครื่องมือ หากแท็กเสร็จสมบูรณ์บางส่วนให้ใช้ตัวเลือก“ เขียนทับฟิลด์เมื่อสแกนแท็ก” ในแท็บ“ สแกนเนอร์” ของหน้าต่าง“ การตั้งค่า” เพื่อแทนที่ฟิลด์ทั้งหมดด้วยค่าใหม่

แต่ละรหัสสอดคล้องกับเขตข้อมูลตามกฎเหล่านี้:

Strings associated with code    Will fill the field
%a
  Artist
%b
  Album
%c
  Comment
%p
  Composer
%r
  Copyright
%e
  Encoded by
%g
  Genre
%i
  None! (used to ignore a string)
%l
  Number of tracks
%o
  Original artist
%n
  Track
%t
  Title
%u
  URL
%y
  Year

หมายเหตุ: เพื่อหลีกเลี่ยงข้อผิดพลาดขอแนะนำให้ใช้รหัสในรูปแบบครั้งเดียวเท่านั้น แน่นอนเช่นเมื่อติดแท็กด้วยตนเองเฉพาะไฟล์ที่เลือกเท่านั้นที่จะถูกประมวลผลโดยสแกนเนอร์ คุณสามารถใช้รูปแบบที่กำหนดในรายการหรือเขียนรูปแบบของคุณเองเพื่อให้สอดคล้องกับรูปแบบของชื่อไฟล์และไดเรกทอรีของคุณ เพื่อหลีกเลี่ยงข้อผิดพลาดเมื่อเลือกรูปแบบที่เหมาะสมหรือเขียนตัวอย่างจะแสดงผลทันทีก่อนที่จะใช้รูปแบบ หากคุณต้องการความช่วยเหลือเกี่ยวกับรหัสต่าง ๆ ให้กดปุ่ม "ช่วยเหลือ" (ห่วงชูชีพ) เพื่อแสดงคำอธิบายของแต่ละรหัส นอกจากนี้หากคุณต้องการบันทึกรูปแบบของคุณเองแก้ไขหรือจัดเรียงจากนั้นกดปุ่ม "หน้ากาก" ตัวแก้ไขเล็กน้อยจะปรากฏบนหน้าต่างสแกนเนอร์

ด้านล่างตัวอย่างของการใช้รูปแบบ:

ก) ชื่อไฟล์ต่อไปนี้:

“/mnt/MP3/EVANESCENCE  Fallen (2003)  Rock/01. Going Under.mp3

b) with the pattern :

“%a - %b (%y) - %g/%n. %t

c) you will fill the tag with theses strings :

    Artist (%a) => EVANESCENCE
    Album (%b) => Fallen
    Year (%y) => 2003
    Genre (%g) => Rock
    Track (%n) => 01
    Title (%t) => Going Under


3

ฉันพบเครื่องมือบรรทัดคำสั่งที่หลากหลายมีประโยชน์:

ID3v2

id3v2 เป็นตัวแก้ไขแท็กบรรทัดคำสั่ง id3v2 คุณสามารถเพิ่ม / แก้ไข / ลบแท็ก id3v2 และแปลงแท็ก id3v1 เป็นแท็ก id3v2 มันใช้ id3lib ฉันกำลังมองหาผู้ดูแลร่วม โปรดส่งอีเมล myers_carpenter หากคุณสนใจ

eyeD3

eyeD3 เป็นโมดูล Python และโปรแกรมสำหรับประมวลผลแท็ก ID3 ข้อมูลเกี่ยวกับไฟล์ mp3 (เช่นอัตราบิตความถี่ตัวอย่างเวลาเล่นเป็นต้น) รูปแบบที่รองรับคือ ID3 v1.0 / v1.1 และ v2.3 / v2.4

สิ่งเหล่านี้เหมาะสมที่สุดเมื่อทำการสคริปต์เพื่อสแกนไดเรกทอรี


2

มันไม่ได้สมบูรณ์แบบเสมอไป แต่ฉันใช้มันเพื่อรับชื่อไฟล์ mp3 โดยใช้เครื่องมือ unix ทั่วไปเท่านั้น (รวมถึงเวอร์ชัน busybox) บางทีผู้ที่มี mp3 Tom Tom Petty มากกว่า 6 คนสามารถให้การทดสอบเพิ่มเติมได้

for x in *.mp3; do
  TITLE=$(strings "$x" |grep TAG |grep -v TAGL |sed "s/^.*TAG//g ; /^L$/d ; /^@$/d ; /^$/d ; /^Ac$/d")
  #mv "$x" "$TITLE.mp3"
  echo $x" "$TITLE.mp3" #just echo for now, until further tested
done

แก้ไข: ฉันอ่านคำถามผิด แต่การรู้สิ่งข้างต้นเราสามารถใช้ sed เพื่อแทนที่ $ TITLE ด้วยชื่อไฟล์ "$ x" โดยใช้ sed เพื่อแทนที่สตริงแทน

sed -i "s/$TITLE/$x/" "$x"

ฉันเกือบ 100% แน่ใจว่าสิ่งนี้ไม่ตรงตามข้อมูลจำเพาะของ ID3 ทั้งหมด แต่อาจพอเพียงสำหรับการใช้งานส่วนตัวขั้นพื้นฐานตราบใดที่คุณทำการสำรองข้อมูลก่อน


ขอบคุณ ฉันพบวิธีที่จะบรรลุเป้าหมายของฉันโดยใช้ EasyTAG แต่คำตอบของคุณตอบคำถามดั้งเดิมของฉันได้ดีที่สุด สตริงเป็นสาธารณูปโภคที่ดีที่ควรทราบ (ฉันไม่เคยใช้มาก่อน) คุณช่วยโพสต์โซลูชันที่สมบูรณ์โดยใช้การแก้ไขของคุณเพื่อให้แน่ใจว่าฉันเข้าใจการเปลี่ยนแปลงที่แนะนำหรือไม่
MountainX

2

สำหรับ Ubuntu 18.04 LTS (ฉันถือว่าเดเบียนทั้งหมดจะใช้งานได้):

  • ติดตั้ง eyeD3 ด้วย sudo apt install eyeD3

  • สร้างไฟล์สำหรับสคริปต์ทุบตี (ฉันใช้ "สัมผัส" คุณสามารถใช้โปรแกรมแก้ไขข้อความอะไรก็ได้ที่คุณต้องการ)

  • คัดลอกและวางลงในไฟล์:

    คัดลอกชื่อไฟล์และเขียนลงในแท็กชื่อ

    for x in *; do
        eyeD3 --title="${x%.*}" "$x"
        echo $a
    done
    

    หากคุณไม่สนใจที่จะดูความคืบหน้าให้เว้นบรรทัดecho $a ด้านบนคำว่า "เสร็จสิ้น"

  • ทำให้ไฟล์ปฏิบัติการ:

    chmod +x filename
  • คัดลอกสคริปต์ไปยังไดเรกทอรีที่คุณต้องการให้เรียกใช้ - ไฟล์ที่มีไฟล์สื่อของคุณ ตัวอย่างเช่น:

    cp filename /music/directory
  • นำทางไปยังไดเรกทอรีที่คุณคัดลอกสคริปต์ไปที่:

    cd /music/directory
  • เรียกใช้สคริปต์:

    ./filename

    DONE

มันใช้งานได้สำหรับฉันบน Ubuntu 18.04 LTS - ภรรยาของฉันเขียนถึงฉันในเวลาประมาณ 3 นาทีดังนั้นฉันจึงไม่สามารถตอบคำถามใด ๆ หากมันไม่ได้ผลสำหรับคุณ ฉันไม่ได้โปรแกรมเมอร์เข้าใจผมตั้งค่าเว็บนี้, DNS, SSH, SFTP, FTP, AD / โดเมน, ไฟล์, ไฟร์วอลล์, เราเตอร์ / เซิร์ฟเวอร์คนที่แต่งตัวประหลาด :-) ฉันเกลียดการทำสคริปต์การเขียนโปรแกรมและอะไรเช่นนั้น ฉันชอบการใช้ประโยชน์จากการเขียนสคริปต์การเขียนโปรแกรมและอะไรที่มันชอบ :-)


1

ฉันประหลาดใจที่ไม่มีใครแนะนำวิธีแก้ปัญหาที่ง่ายที่สุดโดยใช้ffmpegหรือavconv:

for i in *.mp3; do avconv -y -i "$i" -c copy -metadata title="$i" new_"$i"; done;

0

ฉันจะติดตั้ง eyeD3 ใน virtualenv ของ python pip install eyeD3เพื่อให้คุณได้รับเวอร์ชั่นล่าสุด หลังจากรันแล้ว:

for i in *.mp3; do /your/venv/bin/eyeD3 --title "$i" "$i"; done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.