นี่คือคำสั่ง mp3info2p ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้เวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
mp3info2 - รับ/ตั้งค่าแท็ก MP3; ใช้ MP3::Tag เพื่อรับค่าเริ่มต้น
เรื่องย่อ
# พิมพ์ข้อมูลในแท็กและข้อมูลอัตโนมัติ
mp3info2 *.mp3
# นอกจากนี้ ตั้งค่าฟิลด์ปีเป็น 1981
mp3info2 -y 1981 *.mp3
# เหมือนเดิมโดยไม่ต้องพิมพ์ข้อมูลซ้ำในไดเร็กทอรีปัจจุบัน
mp3info2 -R -p "" -y 1981 .
#ห้ามอนุมานช่องใดๆ ให้พิมพ์ข้อมูล(นอร์มัลไลซ์)จากแท็กเท่านั้น
mp3info2 -C autoinfo=ID3v2,ID3v1 *.mp3
# ตามที่กล่าวไว้ข้างต้น แต่ไม่มีการทำให้เป็นมาตรฐาน/ป้อนอัตโนมัติ ข้อมูลดิบในแท็ก
mp3info2 -N *.mp3
#เหมือนข้างบนแต่มีเฉพาะแท็ก ID2v1 read
mp3info2 -NC ข้อมูลอัตโนมัติ=ID3v1 *.mp3
# รับศิลปินจาก CDDB_File แปลงข้อมูลอื่น ๆ โดยอัตโนมัติ เขียนลงในแท็ก
mp3info2 -C ศิลปิน=CDDB_File -u *.mp3
# สำหรับชื่อเรื่อง ต้องการข้อมูลจากไฟล์ .inf พักผ่อนอัตโนมัติ อัปเดต
mp3info2 -C title=Inf,ID3v2,ID3v1,ชื่อไฟล์ -u *.mp3
# เหมือนกันและรับศิลปินจากไฟล์ CDDB
mp3info2 -C title=Inf,ID3v2,ID3v1,ชื่อไฟล์ -C ศิลปิน=CDDB_File -u *.mp3
# เขียนสคริปต์สำหรับการแปลง .wav เป็น .mp3 แท็กอัตโนมัติ
mp3info2 -p "อ่อนแอ -h --vbr-new --tt '%t' --tn %n --ta '%a' --tc '%c' --tl '%l' --ty '% y' '%f'\n" *.wav >xxx.sh
DESCRIPTION
โปรแกรมพิมพ์ข้อความสรุปข้อมูลแท็ก (ได้รับผ่านโมดูล MP3::Tag) สำหรับ
ไฟล์ที่ระบุ
นอกจากนี้ยังอาจอัปเดตข้อมูลในแท็ก ID3 สิ่งนี้เกิดขึ้นในสามกรณีที่แตกต่างกัน
· หากข้อมูลที่ให้ในตัวเลือกบรรทัดคำสั่ง "talygcn" แตกต่างจาก
เนื้อหาของแท็ก ID3 ที่เกี่ยวข้อง (หรือไม่มีแท็ก ID3 ที่สอดคล้องกัน)
· หากมีตัวเลือก "-d" หรือ "-F"
· หาก "MP3::Tag" ได้รับข้อมูลจากวิธีอื่นที่ไม่ใช่แท็ก MP3 และ "-u" บังคับให้
อัปเดตแท็ก ID3
(วิธีการทั้งหมดเหล่านี้ปิดใช้งานโดยตัวเลือก "-D")
มีตัวเลือกให้ (กรอกช่องที่คำนวณได้โดยอัตโนมัติ (โดยวิธี
id3v2_frames_เติมอัตโนมัติ()) จะดำเนินการเว้นแต่จะมีตัวเลือก "-d" หรือ "-N")
ตัวเลือก "-u" เขียน ("u"pdates) ข้อมูลที่ดึงมาไปยังแท็ก MP3 ID3 นี้
จะถือว่าตัวเลือกนั้นมีตัวเลือกบรรทัดคำสั่งซึ่งกำหนดองค์ประกอบแท็กอย่างชัดเจน
("-a", "-t" เป็นต้น และ "-F", "-d") (ผลของตัวเลือกนี้อาจถูกแทนที่ด้วยการให้
ตัวเลือก "-D") หากมีตัวเลือก "-2" ให้บังคับเขียนแท็ก ID3v2 แม้ว่าข้อมูล
พอดีกับแท็ก ID3v1 (นอกจากนี้ ตัวเลือกนี้จะเปิดใช้งานการอัปเดตอัตโนมัติของ "ชื่อส่วนบุคคล"
ช่องและชื่อเรื่องที่เกี่ยวข้องตามค่าของ "translate_person"
"person_frames" เป็นต้น การตั้งค่าคอนฟิก; ดู "การปรับช่องให้เป็นมาตรฐาน") ตัวเลือกนี้
จะถูกละเว้นหากตรวจไม่พบการเปลี่ยนแปลงแท็ก อย่างไรก็ตาม เราสามารถบังคับการอัปเดตได้โดยการทำซ้ำ
ตัวเลือกนี้ (มีประโยชน์หากคุณคาดว่าจะเปลี่ยน "รูปแบบ" ของแท็ก แทนที่จะเป็น
"เนื้อหา").
ตัวเลือก "-p" พิมพ์ข้อความโดยใช้อาร์กิวเมนต์ถัดไปเป็นรูปแบบ (โดยค่าเริ่มต้น "\\", "\t",
"\n" ถูกแทนที่ด้วยแบ็กสแลช แท็บ และขึ้นบรรทัดใหม่ ควบคุมโดยค่าของตัวเลือก "-E");
ดู "สอดแทรก" ใน MP3::Tag สำหรับรายละเอียดของรูปแบบของ วิ่ง()-ชอบหนี ถ้าไม่
ให้ตัวเลือก "-p" ข้อความในรูปแบบเริ่มต้นจะถูกปล่อยออกมา ค่าของตัวเลือก "-e"
คือการเข้ารหัสที่ใช้สำหรับเอาต์พุต ถ้าค่าเป็นตัวเลข การเข้ารหัสเฉพาะระบบคือ
เดา (และใช้สำหรับเอาต์พุตหากตั้งค่าบิต 0x1); หากตั้งค่าบิต 0x2 แล้วบรรทัดคำสั่ง
ตัวเลือกจะถือว่าอยู่ในการเข้ารหัสที่คาดเดา หากตั้งค่าบิต 0x4 แล้วบรรทัดคำสั่ง
อาร์กิวเมนต์จะถือว่าอยู่ในการเข้ารหัสที่คาดเดา ใช้ค่า "ไบนารี" เพื่อทำไบนารี
เอาท์พุต
ด้วยตัวเลือก "-D" (dry run) จะไม่มีการอัปเดต ไม่ว่าตัวเลือกอื่นๆ จะเป็นอย่างไร
ด้วยตัวเลือกนี้ จะไม่มีการแยกวิเคราะห์แท็กเว้นแต่จำเป็น
ใช้ตัวเลือก
talygcn
เพื่อเขียนทับข้อมูล (ชื่อศิลปิน อัลบั้ม ปี ประเภท ความคิดเห็น หมายเลขแทร็ก) ที่ได้รับ
ผ่านการวิเคราะห์พฤติกรรม "MP3::Tag" (สวิตช์ "-u" จะบ่งบอกโดยนัยหากอาร์กิวเมนต์ข้อใดข้อหนึ่งแตกต่างกัน
จากสิ่งที่จะพบเป็นอย่างอื่น ใช้สวิตช์ "-D" เพื่อปิดใช้งานการอัปเดตอัตโนมัติ) โดยค่าเริ่มต้น,
ค่าของตัวเลือกเหล่านี้ไม่ใช่ "%"-interpolated; อาจเปลี่ยนแปลงได้โดยตัวเลือก "-E"
ตัวเลือก "-d" ควรมีรายการเฟรม ID3v2 ที่คั่นด้วยเครื่องหมายจุลภาคที่จะลบ NS
ข้อมูลจำเพาะของเฟรมจะเหมือนกับที่อาจมีให้กับ "%{...}" การแก้ไขเฟรม
คำสั่ง เช่น "TIT3", "COMM03", "COMM(fra)[short title]"; ความแตกต่างกับการปรับเปลี่ยน-
การเข้าถึงคือว่า ทั้งหมด (และไม่ใช่ เป็นครั้งแรก ของ) เฟรมที่ตรงกันจะถูกลบออก (ตัวเลือก -d อาจเป็น
ซ้ำแล้วซ้ำเล่า)
ตัวอย่างเช่น "-d APIC" จะลบกรอบรูปทั้งหมด นอกจากนี้ หากรายการประกอบด้วย
"ID3v1" หรือ "ID3v2" แท็กทั้งหมดจะถูกลบออก
ในทำนองเดียวกัน ตัวเลือก "-F" ช่วยให้สามารถตั้งค่าเฟรม "ID3v2" ได้ตามอำเภอใจ: หากต้องการตั้งค่า
หนึ่งเฟรม ใช้คำสั่ง "FRAME_spec=VALUE":
-F TIT2=The_new_Title
อีกครั้งในการปรับเปลี่ยน ทั้งหมด เฟรมที่ตรงกันจะถูกลบออกก่อนดังนั้นโปรดระวังด้วย
-F COMM=ความคิดเห็นของฉัน
ตัวเลือก "-F" อาจทำซ้ำเพื่อตั้งค่ามากกว่าหนึ่งเฟรม ถ้าตัวแปรการกำหนดค่า
"empty-F-deletes" เป็น TRUE (ค่าเริ่มต้น) อาร์กิวเมนต์ว่างจะลบเฟรม
สามารถแทนที่ "FRAME_spec=VALUE" ด้วย "FRAME_spec < FILE"; ในกรณีนี้ค่าที่จะตั้ง
ถูกอ่านจากไฟล์ชื่อ ไฟล์; ถ้าเฟรมเป็นแบบข้อความเท่านั้น (ความหมาย: มากที่สุด
"[เข้ารหัส] ฟิลด์คำอธิบายภาษาของ URL ข้อความมีอยู่) ไฟล์ถูกอ่านเป็นข้อความ
โหมด (และด้วยการเว้นช่องว่างเริ่มต้น/ต่อท้าย) มิฉะนั้นจะถูกอ่านในรูปแบบไบนารี
โหมด. (จำเป็นต้องมีช่องว่างเกี่ยวกับเครื่องหมาย "<) หาก "<" ถูกแทนที่ด้วย "?<" เครื่องหมาย
ค่าจะถูกตั้งค่าเฉพาะในกรณีที่ยังไม่มีเฟรม และถ้าไฟล์นั้นมีอยู่ ถ้าแทนที่ด้วย ">"
ค่า (ถ้ามี) เขียนถึง ไฟล์ (การสร้างไดเร็กทอรีระดับกลางคือ
ควบคุมโดยตัวเลือกการกำหนดค่า "frames_write_creates_dirs" ค่าเริ่มต้นคือ FALSE)
นอกจากนี้ "FRAME_spec" อาจเป็นหนึ่งใน "ID3v1" หรือ "ID3v2" หรือ "TAGS" ในกรณีนี้ทั้งหมด
แท็กถูกเขียนหรืออ่าน ตัวอย่างเช่น สำหรับ "TAGS < FILE", "ชื่อศิลปิน อัลบั้ม ปี ประเภท
ติดตามความคิดเห็น" ข้อมูลคำนวณจาก ไฟล์ซึ่งอาจเป็นแท็กดิบตามที่สร้างด้วย ">"
หรือไฟล์ MP3 ที่ถูกต้อง ถ้า Image::ExifTool มีอยู่ ข้อมูลอาจถูกอ่านโดยพลการ
ไฟล์มัลติมีเดีย (เช่นเดียวกัน สำหรับ "ID3v1 < FILE" ข้อมูลเดียวกันจะถูกดึงมาจาก "ID3v1"
เท่านั้น) หลังจากนี้ ในกรณีของ "ID3v2" หรือ "TAGS" เฟรม "ID3v2" จะถูกคัดลอกจาก
แท็ก "ID3v2" ทีละรายการ (มีการปรับเปลี่ยนที่เหมาะสมสำหรับ "?<")
โดยค่าเริ่มต้น "VALUE" สำหรับ "-F" คือ "%"-interpolated; สามารถเปลี่ยนแปลงได้โดยตัวเลือก "-E"
เพื่อความสะดวกของผู้ใช้ รูปแบบที่เป็นมิตรกับมนุษย์ "ผู้แต่ง, text_by, วงออเคสตรา, วาทยกร,
disk_n" สามารถใช้แทน "TCOM, TEXT, TPE2, TPE3, TPOS"
ตัวเลือก "-P RECIPE" เป็นลักษณะทั่วไปที่ทรงพลังมากของสิ่งที่ตัวเลือกสามารถทำได้
"-F", "-d" และ "-t -a -l -y -g -c -n" มันอาจจะซ้ำ; ค่าควรมี
สูตรแยกวิเคราะห์ พวกเขากลายเป็นรายการการกำหนดค่า "parse_data" ของ "MP3::Tag"; ในท้ายที่สุด
ข้อมูลนี้ประมวลผลโดยโมดูล MP3::Tag::ParseData (หากมีอยู่ใน
ห่วงโซ่ของฮิวริสติก; ดูตัวเลือก "-C") "RECIPE" แบ่งออกเป็น "$flags, $string,
@patterns" บนอักขระที่ไม่ใช่ตัวอักษรและตัวเลขคละกันตัวแรกของ @patterns ที่ตรงกัน
$string จะถูกดำเนินการ (สำหรับผลข้างเคียง) (ดูตัวอย่าง: "ตัวอย่าง: parse
กฎ".)
หากระบุตัวเลือก "-G" ชื่อไฟล์ในบรรทัดคำสั่งจะถือเป็น glob
รูปแบบ ซึ่งอาจเป็นประโยชน์หากความยาวบรรทัดคำสั่งสูงสุดต่ำเกินไป กับ
อาร์กิวเมนต์ตัวเลือก "-R" สามารถเป็นไดเร็กทอรีซึ่งถูกค้นหาซ้ำ ๆ สำหรับเสียง
(ค่าเริ่มต้น * .mp3) ไฟล์ที่จะประมวลผล ใช้ตัวเลือก "-r" เพื่อรีเซ็ตนิพจน์ทั่วไปเป็น look
สำหรับ (ค่าเริ่มต้นคือ "(?i:\.mp3$)")
ตัวเลือก "-E" ควบคุมการขยายอักขระหลีก ควรมีตัวอักษรของ
ตัวเลือกบรรทัดคำสั่งที่ "\\, \n, \t" ถูกสอดแทรก สามารถต่อท้ายตัวอักษร
ของตัวเลือก "talygcn F" ที่ต้องการ "%"-interpolation หลังตัวคั่น "/i:" (สำหรับ
"-F" เฉพาะค่าที่มีการประมาณค่า) ค่าเริ่มต้นคือ "p/i:Fp": เฉพาะ "-p" คือ
"\"-ถูกสอดแทรก และมีเพียง "-F" และ "-p" เท่านั้นที่อยู่ภายใต้การแก้ไข "%" ถ้าทั้งหมดหนึ่ง
ต้องการคือการ เพิ่ม เป็นค่าเริ่มต้น นำหน้าค่า "-E" (มีตัวเลือกเพิ่มเติม) โดย
"+" (บางส่วนของค่าของตัวเลือก "-P" มีการสอดแทรก แต่ควรเป็น
ถูกควบคุมโดยแฟล็ก ไม่ใช่ "-E"; ทำ ไม่ ใส่ "P" ลงในส่วน "%"-interpolated ของ "-E")
หากระบุตัวเลือก "-@" อักขระ "@" ทั้งหมดในตัวเลือกจะถูกแทนที่ด้วย "%" นี้
อาจสะดวกหากเชลล์ปฏิบัติต่อ "%" เป็นพิเศษ (เช่น เชลล์ DOSISH)
หากมีตัวเลือก "-I" ไม่มีการคาดเดาสำหรับ ศิลปิน ฟิลด์จะดำเนินการเมื่อพิมพ์
ตัวเลือก "-C CONFIG_OPT=VALUE1,VALUE2..." ตั้งค่าข้อมูลการกำหนดค่า "MP3::Tag" เหมือนกัน
วิธีเป็น "MP3::Tag-"กำหนดค่า ()> จะทำ (จำได้ว่าค่าเป็นอาร์เรย์; แยกองค์ประกอบ
ด้วยเครื่องหมายจุลภาคถ้ามีมากกว่าหนึ่ง) อาจใช้ตัวเลือกซ้ำเพื่อตั้งค่ามากกว่าหนึ่งค่า บันทึก
เนื่องจาก "ParseData" ใช้ในการประมวลผลสูตรการแยกวิเคราะห์ "-P" จึงควรเก็บไว้ดีกว่า
ในการกำหนดค่า "autoinfo" (และฟิลด์ที่เกี่ยวข้อง "ผู้เขียน" ฯลฯ ) ต่อหน้า "-P"
หากมีตัวเลือก "-x" ข้อมูลทางเทคนิคเกี่ยวกับไฟล์เสียงจะถูกพิมพ์
(ระดับ MP3, ระยะเวลา, จำนวนเฟรม, ช่องว่างภายใน, ลิขสิทธิ์ และรายการของเฟรม ID3v2
ชื่อในรูปแบบที่เหมาะสมกับ "%{...}" หลีก) ถ้า "-x" ซ้ำ เนื้อหาของเฟรมคือ
พิมพ์ออกมาด้วย (อาจพิมพ์ตัวอักษรที่ไม่สามารถพิมพ์ได้หากทำซ้ำมากกว่าสองครั้ง)
หากมีตัวเลือก "-N" ไว้ "สมาร์ท" ทั้งหมดจะถูกปิดใช้งาน - ไม่มีการทำให้ฟิลด์เป็นมาตรฐาน
เกิดขึ้นและ (โดยค่าเริ่มต้น) ไม่พยายามอนุมานค่าของฟิลด์จาก non-ID3
ข้อมูลเสร็จแล้ว ตัวเลือกนี้ (ปัจจุบัน) เทียบเท่ากับการมี "-C
autoinfo=ParseData,ID3v2,ID3v1" เป็นคำสั่งแรกที่ไม่มี
ทำให้เป็นมาตรฐาน::ข้อความ::Music_Fields.pm นำเสนอบนเส้นทาง @INC และไม่เรียก ป้อนอัตโนมัติ () วิธี
normalization of ทุ่ง
(การโหลดโมดูลการทำให้เป็นมาตรฐานและการดำเนินการที่ตามมาทั้งหมดอาจถูกปิดใช้งานโดย
ตัวเลือก "-N" หรือโดยการตั้งค่าตัวแปรสภาพแวดล้อม "MP3TAG_NORMALIZE_FIELDS" ให้เป็น FALSE
ถ้าไม่ได้ห้าม โมดูลจะพยายามโหลดถ้าไดเร็กทอรี ~/.music_fields is
ปัจจุบัน หรือ "MP3TAG_NORMALIZE_FIELDS" ถูกตั้งค่าและเป็น TRUE)
หากการโหลดโมดูล "Normalize::Text::Music_Fields" สำเร็จ จะเป็นดังนี้
บังคับ:
หากมีการกำหนดค่าของ "MP3TAG_NORMALIZE_FIELDS" และไม่ใช่ 1 ค่านี้จะถูกแบ่งออกเป็น
ไดเร็กทอรีเป็น PATH และเส้นทางการโหลดของ "Normalize::Text::Music_Fields" ถูกตั้งค่าเป็นสิ่งนี้
รายการไดเรกทอรี จากนั้น MP3::Tag จะได้รับคำสั่ง (ผ่านการกำหนดค่าที่เกี่ยวข้อง
การตั้งค่า) เพื่อใช้วิธี "normalize_artist" (ฯลฯ ) ที่กำหนดโดยโมดูลนี้ วิธีการเหล่านี้
อาจทำให้ข้อมูลแท็กบางอย่างเป็นปกติ เวอร์ชันปัจจุบันกำหนดวิธีการสำหรับ "การทำให้เป็นมาตรฐาน"
ของชื่อบุคคลและชื่อเรื่อง (ตามผู้แต่ง) การทำให้เป็นมาตรฐานนี้ถูกขับเคลื่อน
ผ่านตารางการกำหนดค่าที่ผู้ใช้แก้ไขได้
นอกเหนือจากการทำให้ข้อมูลแท็ก MP3 เป็นมาตรฐานโดยอัตโนมัติแล้ว เราสามารถใช้ "ไฟล์ MP3 ปลอม" ได้
เข้าถึงคุณลักษณะบางอย่างของโมดูลนี้ด้วยตนเอง สำหรับสิ่งนี้ ให้ใช้ชื่อไฟล์ว่างและ "-D"
ตัวเลือก. เช่น,
mp3info2 -D -a เบโธเฟน -p "%a\n" ""
mp3info2 -D -a เบโธเฟน -p "%{shP[%a]}\n" ""
mp3info2 -D -a เบโธเฟน -t "sonata #28" -p "%t\n" ""
mp3info2 -D -a beethoven -t "อัลเลเกรตโต เบส" -@p "@t\n" ""
mp3info2 -D -a เบโธเฟน -t "op93" -@p "@t\n" ""
จะพิมพ์ชื่อบุคคลที่ทำให้เป็นมาตรฐานสำหรับ "เบโธเฟน" ซึ่งเป็นชื่อย่อมาตรฐานที่สอดคล้องกัน
ชื่อบุคคล และชื่อปกติสำหรับ "โซนาตา #28" ของนักแต่งเพลง "เบโธเฟน" เช่น,
ด้วยตารางการทำให้เป็นมาตรฐานที่จัดส่ง มันจะพิมพ์
ลุดวิก ฟาน เบโธเฟน (1770-1827)
แอล. ฟาน เบโธเฟน
Piano Sonata No. 28 ในวิชาเอก; อ. 101 (1816)
Allegretto สำหรับ Piano Trio ใน B flat major; วู 39 (1812)
ซิมโฟนีหมายเลข 8 ใน F major; อ. 93 (comp. 1812, fp Vienna, 1814-02-27, cond. Beethoven; pubd. 1816)
การขอ ใบสั่ง of การดำเนินการ
ปัจจุบันดำเนินการตามลำดับต่อไปนี้
· การลบ ID3v1 หรือ ID3v2 โดยรวมผ่านตัวเลือก "-d"
· มีการตั้งค่า Recipies ของตัวเลือก "-P" (จะถูกทริกเกอร์โดยการแก้ไข)
· การตั้งค่าทำได้ผ่านตัวเลือก "-a/-t/-l/-y/-g/-c/-n";
· การตั้งค่าทำผ่านตัวเลือก "-F";
· การลบแต่ละเฟรมโดยใช้ตัวเลือก "-d";
· ป้อนอัตโนมัติของเฟรม ID3v2 (id);
· ส่งข้อมูลตามตัวเลือก "-p" และ "-x"
· ทริกเกอร์ผู้รับของ "-P" (ถ้าไม่ถูกทริกเกอร์โดยการแก้ไข)
· อัปเดตแท็กหากจำเป็น
การใช้ กลยุทธ์: การเพิ่ม of ความซับซ้อน
จุดประสงค์ของสคริปต์นี้คือเพื่อให้การจัดการแท็ก ID3 เป็นเรื่องง่าย as เป็นไปได้.
ที่ปลายด้านหนึ่งของมาตราส่วน เราสามารถดำเนินการจัดการที่ซับซ้อนตามอำเภอใจด้วยแท็กโดยใช้
โมดูล "MP3::Tag" Perl
ในอีกด้านหนึ่ง จะสะดวกกว่ามากในการจัดการกับแท็กที่ง่ายที่สุด
โดยใช้ตัวเลือกของสคริปต์นี้ "-t -a -l -y -g -c -n" และ "-p -F -d" เพิ่มเติมเล็กน้อย
งานที่ซับซ้อนอาจต้องใช้วิธีการที่ซับซ้อนมากขึ้นของ วิเคราะห์คำ กฎระเบียบ, ให้
ไปยังสคริปต์นี้โดยใช้ตัวเลือก "-P"; กฎเกณฑ์ขึ้นอยู่กับ การแก้ไขโปรดดูที่
"สอดแทรก" ใน MP3::Tag, "interpolate_with_flags" ใน MP3::Tag.
เพื่อทำให้การอัพเกรดง่ายขึ้นจาก "การจัดการที่ง่ายที่สุด" เป็น "สิ่งที่ซับซ้อนยิ่งขึ้น" ที่นี่เรา
ให้ "กฎการแยกวิเคราะห์" คำพ้องความหมาย สู่ตัวเลือกที่ง่ายที่สุด ดังนั้นหากคุณเริ่มต้นด้วย "-t -a -l -y
-g -c -n" และ "-p -F -d" ตัวเลือกที่ "เกือบจะได้ผล" สำหรับคุณ คุณมีโอกาสที่จะเป็น
สามารถบรรลุเป้าหมายของคุณได้อย่างเต็มที่โดยการแก้ไขคำพ้องความหมายที่อธิบายไว้ด้านล่าง
(ด้านล่างเราคิดว่าตัวเลือก "-E" ถูกกำหนดเป็นค่าเริ่มต้น ดังนั้น "-F -p" คือ
"%" - สอดแทรก ไม่มีตัวเลือกอื่น โปรดทราบว่าหากการเข้ารหัส TTY ของคุณคือ
Perl รู้จักขอแนะนำให้ตั้งค่าตัวเลือก "-e 3" บนเชลล์ DOSISH
ใช้ "-@" ดีกว่า และแทนที่ "%" ด้วย "@" ด้านล่าง)
"-t ค่า"
-P "mz/VALUE/%t"
"-a -l -y -g -c -n"
ในทำนองเดียวกัน
"-F" "TIT2=ค่า"
-P "mzi/VALUE/%{TIT2}"
"-F" "APIC[myDescr] < ไฟล์"
-F "APIC[myDescr]=%{I(fimbB)FILE}"
or
-P "mzi/%{I(fimbB)FILE}/%{APIC[myDescr]}"
(ลบ "bB" สำหรับเฟรมแบบข้อความเท่านั้น)
"-F" "APIC[myDescr] > ไฟล์"
-P "bOi,%{APIC[myDescr]},FILE"
(ลบ "b" สำหรับเฟรมแบบข้อความเท่านั้น); หรือใช้ "-e binary -p "%{APIC[myDescr]}""
ด้วยการเปลี่ยนเส้นทาง โปรดดู "ตัวอย่าง: แยกวิเคราะห์กฎ"
"-d" TIT2
-P "ม.//%{TIT2}"
"-F" "TIT2 ?< ไฟล์"
หากินมาก สิ่งนี้จะไม่ตั้งค่าให้แยกไฟล์เปล่าและไฟล์ที่ไม่มีอยู่:
-P "mzi/%{TIT2:1}0%{I(fFim)FILE}/10/10%{TIT2}/0%{U1}"
(เพิ่ม "bB" เป็น "fFim" สำหรับเฟรมที่ไม่ใช่ข้อความเท่านั้น); ส่วนสุดท้ายอาจถูกละเว้น
หากละเว้นแฟล็ก "m" - มีให้จับเฉพาะการพิมพ์ผิดเท่านั้น
สำหรับรายละเอียดเกี่ยวกับ "กฎการแยกวิเคราะห์" โปรดดูที่ "ตัวอย่าง: กฎการแยกวิเคราะห์" และ "คำอธิบาย" ใน
MP3::Tag::ParseData.mpXNUMX::แท็ก::ParseData.
ตัวอย่าง: วิเคราะห์คำ กฎระเบียบ
เฉพาะตัวเลือก "-P" เท่านั้นที่ซับซ้อนพอที่จะสมควรได้รับความคิดเห็น... สำหรับรายละเอียดทั้งหมดเกี่ยวกับ
วิเคราะห์คำ กฎระเบียบดู "คำอธิบาย" ใน MP3::Tag::ParseData; สำหรับรายละเอียดทั้งหมดเกี่ยวกับการแก้ไข
ดู "interpolate" ใน MP3::Tag, "interpolate_with_flags" ใน MP3::Tag
สำหรับตัวอย่าง (โง่) เราสามารถแทนที่ "-a Homer -t Iliad" ด้วย
-P mz=โฮเมอร์=%a -P mz=อีเลียด=%t
ตัวอย่างที่งี่เง่าน้อยกว่าคือการบังคับให้ใช้วิธีแยกวิเคราะห์ชื่อไฟล์ผ่าน
-P "im=%{d0}/%f=%a/%n %t.%e"
มันถูกแบ่งออกเป็น
รูปแบบสตริงธง1
"ฉัน" "%{d0}/%f" "%a/%n %t.%e"
ธงอักษรย่อมาจาก ตีความ, ต้อง_match. สิ่งนี้สอดแทรกสตริง
"%{d0}/%f" และแยกวิเคราะห์ผลลัพธ์ (ซึ่งเป็นชื่อไฟล์ที่มีไดเร็กทอรีหนึ่งระดับ
สงวนไว้บางส่วน) โดยใช้รูปแบบที่กำหนด; ดังนั้นชื่อไดเรกทอรีจึงกลายเป็นศิลปิน the
ส่วนตัวเลขนำหน้า - หมายเลขแทร็ก และชื่อไฟล์ที่เหลือ (ไม่มีนามสกุล)
- ชื่อเรื่อง โปรดทราบว่าเนื่องจากอนุญาตให้ใช้หลายรูปแบบ เราจึงสามารถอนุญาตสำหรับ . ได้เช่นเดียวกัน
หลายรูปแบบของชื่อเช่น
-P "im=%{d0}/%f=%a/%n %t.%e=%a/%t (%y).%e"
อนุญาตให้ชื่อไฟล์อยู่ในรูปแบบ "TITLE (YEAR)" ด้วย อีกทางเลือกหนึ่งในการ
ได้ผลลัพธ์ที่เหมือนกันคือ
-P "im=%{d0}=%a" -P "im=%f=%n %t.%e=%t (%y).%e"
ซึ่งสอดคล้องกับสองสูตร:
ธงรูปแบบสตริง1รูปแบบ2
"ฉัน" "%{d0}" "%a"
"ฉัน" "%f" "%n %t.%e" "%t (%y).%e"
แน่นอนว่าใครๆ ก็ใช้
"ฉัน" "%B" "%n %t" "%t (%y)"
แทนอันที่สอง
โปรดทราบว่าการตั้งค่าอาจอ่านง่ายขึ้น ศิลปิน เป็น "%{d0}" โดยการกำหนดที่ชัดเจนด้วย
ข้อโต้แย้งที่คล้ายกับ
-E "p/i:Fpa" -a "%{d0}"
(ค่าของ "-E" นี้ร้องขอ "%"-interpolation ของตัวเลือก "-a" นอกเหนือจาก
ค่าเริ่มต้น "\"-การแก้ไขของ "-p" และ "%"-การแก้ไขของ "-F" และ "-p"; หนึ่งกระป๋อง
ทางลัดด้วย "-E +/i:a")
เพื่อยกตัวอย่างเพิ่มเติม
-P "if=%D/.comment=%c"
จะอ่านความคิดเห็นจากไฟล์ .ความคิดเห็น ในไดเรกทอรีของไฟล์เสียง
-P "ifn=%D/.comment=%c"
มีผลคล้ายกันหากไฟล์ .ความคิดเห็น มีความคิดเห็นหนึ่งบรรทัด หนึ่งรายการต่อแทร็ก (ถือว่า
สามารถค้นหาหมายเลขแทร็กได้ด้วยวิธีอื่น)
สมมติว่าไฟล์ อะไหล่ ในไดเร็กทอรีของไฟล์ MP3 มีรูปแบบดังนี้: มี a
คำนำ แล้วมีย่อหน้าสั้นๆ ของข้อมูลต่อไฟล์เสียง นำหน้าด้วยแทร็ก
ตัวเลขและจุด:
...
12. เรซิตาทีฟ.
(ปิซาโร, ร็อคโค)
13. Duett: jetzt, Alter, jetzt hat es Eile, (ปิซาร์โร, ร็อคโค)
...
คำสั่งต่อไปนี้ใส่ข้อมูลนี้ในชื่อของแท็ก ID3 (ให้ไฟล์เสียง
ชื่อไฟล์มีข้อมูลเพียงพอเพื่อให้ MP3::Tag สามารถอนุมานหมายเลขแทร็กได้):
mp3info2 -u -C parse_split='\n(?=\d+\.)' -P 'fl;Parts;%=n. %NS'
หากข้อมูลย่อหน้านี้อยู่ในรูปแบบ "TITLE (COMMENT)" โดยมีส่วน "COMMENT" อยู่ด้วย
เป็นทางเลือก แล้วใช้
mp3info2 -u -C parse_split='\n(?=\d+\.)' -P 'fl;Parts;%=n. %t (%c);%=n. %NS'
หากคุณต้องการลบจุดหรือเครื่องหมายจุลภาคที่ส่วนท้ายของชื่อ ให้ใช้
mp3info2 -u -C parse_split='\n(?=\d+\.)' \
-P 'fl;อะไหล่;%=n. %t (%c);%=n. %t' -P 'iR;%t;%t[.,]$'
รูปแบบที่สองของการร้องขอนี้จะถูกแปลงเป็น
['iR', '%t' => '%t[.,]$']
ซึ่งโดยพื้นฐานแล้วจะใช้การแทนที่ "s/(.*)[.,]$/$1/s" กับชื่อ
ตอนนี้สมมติว่านอกเหนือจาก อะไหล่, เรามีไฟล์ข้อความ Comment พร้อมข้อมูลเพิ่มเติม
เราต้องการใส่ข้อมูลนี้ลงในช่องแสดงความคิดเห็น หลังจาก สิ่งที่สกัดมาจาก "TITLE
(COMMENT)"; แยกความคิดเห็นสองส่วนนี้ด้วยบรรทัดว่าง:
mp3info2 -EC -C 'parse_split=\n(?=\d+\.)' -C 'parse_join=\n\n' \
-P 'f;Comment;%c' -P 'fl;Parts;%=n. %NS' \
-P 'i;%t///%c;%t (%c)///%c' -P 'iR;%t;%t[.,]$'
ถือว่าชื่อเรื่องและความคิดเห็นไม่มี '///' เป็นสตริงย่อย
คำอธิบาย: รูปแบบแรกของ "-P"
['f', 'ความคิดเห็น' => '%c'],
อ่านความคิดเห็นจากไฟล์ "ความคิดเห็น" ลงในช่องแสดงความคิดเห็น ที่สอง,
['fl', 'Parts' => '%=n. %NS'],
อ่านส่วน "ชิ้นส่วน" ในช่องชื่อ ตัวที่สาม
['ผม', '%t///%c' => '%t (%c)///%c']
จัดเรียงชื่อเรื่องและความคิดเห็น ให้ ชื่อเรื่องอยู่ในรูปแบบ "TITLE (COMMENT)"
(ตัวเลือกการกำหนดค่า "parse_join" จะทำหน้าที่แยกความคิดเห็นออกเป็นสองส่วน
สอดคล้องกับการเกิด %c สองครั้งทางด้านขวามือ)
สุดท้าย รูปแบบที่สี่จะเหมือนกับในตัวอย่างก่อนหน้านี้ มันกำจัดสิ่งปลอมปน
เครื่องหมายวรรคตอนท้ายชื่อเรื่อง
ตัวอย่างเพิ่มเติม: การลบสตริง "with violin" ออกจากจุดเริ่มต้นของช่องแสดงความคิดเห็น (removing
แสดงความคิดเห็นทั้งหมดถ้าไม่มีอะไรเหลือ):
mp3info2 -u -P 'iz;%c;กับ violin%c' *.mp3
การตั้งค่าช่องศิลปินโดยไม่ปล่อยให้คุณลักษณะอัปเดตอัตโนมัติสรุปช่องอื่น ๆ จาก
แหล่งอื่น ๆ
mp3info2 -C autoinfo=ParseData -a "AU Thor" *.mp3
การตั้งค่าช่องแสดงความคิดเห็นเว้นแต่จะมีอยู่แล้ว:
mp3info2 -u -P 'i;%c///พร้อมเปียโน;///%c' *.mp3
ตัวอย่างสุดท้ายแสดงวิธีการเขียน "โปรแกรม" ในภาษาของ "-P" จริงๆ
ตัวเลือก: ตัวอย่างให้การกำหนดเงื่อนไข ด้วยตัวแปรผู้ใช้ (เช่นใน "%{U8}")
ชั่วคราว และความเป็นไปได้ที่จะใช้นิพจน์ทั่วไป หนึ่งสามารถให้โดยพลการ
ตรรกะเชิงโปรแกรม แน่นอน ที่ระดับความซับซ้อนระดับหนึ่ง ควรเปลี่ยนไปใช้
เชื่อมต่อโดยตรงกับโมดูล Perl "MP3::Tag" (ใช้รหัสของสคริปต์ Perl นี้เป็นan
ตัวอย่าง!).
นี่คือการตั้งค่างานทั่วไป "ขั้นสูง" id3v2 เฟรม: ผู้แต่ง ("TCOM") วงออเคสตรา
("TPE2") ตัวนำ ("TPE3") เราถือว่าไดเร็กทอรีทรีซึ่งมีไฟล์ MP3 ติดแท็ก
ด้วยอนุสัญญาดังต่อไปนี้: "ศิลปิน" แท้จริงแล้วเป็นนักแต่งเพลง "ความคิดเห็น" เป็นหนึ่งใน
สองรูปแบบ:
นักแสดง; วงออเคสตรา; คอนดักเตอร์
วงออเคสตรา; คอนดักเตอร์
ในการตั้งค่าเฟรม MP3 เฉพาะโดยใช้กฎ "-P" ให้ใช้
mp3info2 -@P "mi/@a/@{TCOM}" \
-P "mi/@c/@{U1}; @{TPE2}; @{TPE3}/@{TPE2}; @{TPE3}" -R
ด้วยตัวเลือก "-F" สิ่งนี้ทำให้ง่ายขึ้นเป็น
mp3info2 -@F "TCOM=@a" -P "mi/@c/@{U1}; @{TPE2}; @{TPE3}/@{TPE2}; @{TPE3}" -R
or
mp3info2 -@F "composer=@a" -P "mi/@c/@{U1}; @{TPE2}; @{TPE3}/@{TPE2}; @{TPE3}" -R
การคัดลอกแท็ก ID3 ของไฟล์ MP3 ในไดเร็กทอรีปัจจุบันไปยังไฟล์ในไดเร็กทอรี /tmp/mp3 สีสดสวย
ส่วนขยาย .แท็ก (และพิมพ์ "รายงานความคืบหน้า") ใช้
mp3info2 -p "@N@E\n" -@P "bODi,@{ID3v2}@{ID3v1},/tmp/mp3/@N.tag" -DNR
เนื่องจากเราไม่ได้ใช้แฟล็ก "z" ไฟล์ MP3 ที่ไม่มีแท็กจึงถูกข้ามไป
ทีนี้ สมมติว่ามีไฟล์เสียงและเนื้อเพลงที่มีลำดับชั้นคู่ขนานกัน:
ไฟล์เสียงอยู่ใน เสียง/dir_name/audio_name.mp3 พร้อมไฟล์เนื้อเพลงที่สอดคล้องกันใน
ข้อความ/dir_name/audio_name.mp3. การแนบเนื้อเพลงเป็นไฟล์ MP3 (ในกรอบ "COMM" ด้วย
คำอธิบาย "เนื้อเพลง" ในภาษา "อังกฤษ" - นี้ is a ไม่ได้มาตรฐาน สถานที่ เห็น ด้านล่าง),
โทรศัพท์
mp3info2 -@P "fim;../text/@{d0}/@B.txt;@{COMM(eng)[lyrics]}" -Ru
ภายในไดเร็กทอรี เสียง. (เปลี่ยน "fim" เป็น "Ffim" เพื่อละเว้นไฟล์เสียงที่
ไม่มีไฟล์ข้อความที่เกี่ยวข้อง) (แน่นอนว่าต้องปฏิบัติตามข้อกำหนด
เราควรจะใช้ฟิลด์ "%{USLT(eng)[]}" แทน "%{COMM(eng)[lyrics]}"; ดู
ด้านล่างสำหรับรูปแบบต่างๆ)
จบด้วยตัวอย่างง่ายๆ: ทั้งหมดมีรูปแบบอย่างไร
-ป'ฉัน%t;%t'
คือการลบช่องว่างต่อท้ายและนำหน้าออกจากชื่อเรื่อง (ซึ่งอนุมานโดยคนอื่น
วิธี).
เพิ่มเติม ตัวอย่าง
ด้วยตัวเลือก "-F" เราสามารถตั้งค่าเฟรม "USLT" เป็น
mp3info2 -@F "USLT(eng)[] < ../text/@{d0}/@B.txt" -Ru
พิมพ์กรอบดังกล่าว (ในภาษาใดก็ได้) ด้วย
mp3info2 -@p "@{USLT[]}\n" file.mp3
ในทำนองเดียวกัน หากต้องการพิมพ์เฟรม APIC พร้อมคำอธิบายที่ว่างเปล่า ให้ใช้
mp3info2 -e ไบนารี -@p "@{APIC[]}" file.mp3 > output_picture_file
หรือ (พร้อมคำอธิบาย "หน้าปก")
mp3info2 -@P "bOi,@{APIC[cover]},output_picture_file.jpg" loading="lazy" audio_07.mp3
การตั้งค่าเฟรมดังกล่าวจากไฟล์ xxx.gif (ด้วยค่าเริ่มต้น "ประเภทรูปภาพ", "หน้าปก (ด้านหน้า)",
และคำอธิบายที่ว่างเปล่า) ทำอย่างใดอย่างหนึ่งของ
mp3info2 -F "APIC < xxx.gif" file.mp3
mp3info2 -@F "APIC[]=@{I(fimbB)xxx.gif}" file.mp3
ความแตกต่างของ "APIC" และ "APIC[]" คืออันแรกจะลบเฟรม "APIC" ทั้งหมดออกก่อน
และอันที่สองจะลบเฉพาะเฟรม "APIC" ทั้งหมดที่มีคำอธิบายว่างเปล่า - แต่รูปภาพโดยพลการ
พิมพ์. เลยน่าจะเหมาะกว่าที่จะใช้สเปคเต็มๆ อย่าง "APIC(Cover .)"
(ด้านหน้า))[]".
หากต้องการลบเฟรม "APIC" ที่มีคำอธิบายว่าง ให้ใช้ "ประเภทรูปภาพ" (และ "MIME .) ตามอำเภอใจ
ชนิดที่อาจคำนวณได้อย่างถูกต้องโดย mp3info2เช่น "TIFF/JPEG/GIF/PNG") ใช้
mp3info2 -d "APIC[]" file.mp3
(โปรดทราบว่าสิ่งนี้จะไม่เพิ่มพื้นที่ว่างในดิสก์ เว้นแต่ว่า "การย่อ" จะถูกบังคับโดยการกำหนดค่า
ตัวแปร) ทำเช่นเดียวกันกับประเภทรูปภาพ "ตัวนำ" เท่านั้น do
mp3info2 -d "APIC(ตัวนำ)[]" file.mp3
ในการสแกนผ่านไดเร็กทอรีย่อยและเพิ่มไฟล์ cover.jpg จากไดเร็กทอรีของไฟล์เป็น a
เฟรม "ค่าเริ่มต้น" "APIC" แต่ถ้าไม่มีเฟรม "APIC" และมีไฟล์อยู่ ให้ทำ
mp3info2 -@F "APIC ?< @D/cover.jpg" loading="lazy" -R .
การดำเนินการนี้จะลบเฟรมว่างสำหรับวันที่ "TCOP, TENC, WXXX[], COMM(eng)[]" และลบ
นำ 0 จากหมายเลขแทร็กจากไฟล์ MP3 ในไดเรกทอรีปัจจุบัน:
mp3info2 -@ -E +/i:y -F "TCOP=@{TCOP}" -F "TENC=@{TENC}"
-F "WXXX[]=@{WXXX[]}" -F "COMM(eng)[]=@{COMM(eng)[]}"
-y "@y" -P "mi/@n/0@n/@n" *.mp3
ตัวอย่าง on การซื้อขาย สีสดสวย แตก การเข้ารหัส
จุดอ่อนที่สำคัญประการหนึ่งของข้อกำหนด ID3 คือจำเป็นต้องมีข้อมูล
มีให้ในการเข้ารหัส "latin-1" เนื่องจากภาษาส่วนใหญ่ในโลกไม่สามารถแสดงออกได้ใน
"latin-1" ทำให้แท็ก ID3 (ส่วนใหญ่?) ไม่เป็นไปตามมาตรฐาน ใหม่กว่า
เวอร์ชันของข้อมูลจำเพาะได้แก้ไขข้อบกพร่องนี้ แต่ความเสียหายได้เกิดขึ้นแล้ว
โชคดีที่สคริปต์นี้สามารถใช้ความสามารถของ "MP3::Tag" เพื่อแปลงจากที่ไม่เป็นไปตามข้อกำหนด
เนื้อหาให้สอดคล้องกัน
ตัวอย่างต่อไปนี้จะแปลงแท็ก ID3v2 ที่เขียนขึ้น (ไม่เป็นไปตามมาตรฐาน)
การเข้ารหัส "cp1251" ให้อยู่ในการเข้ารหัสที่เป็นไปตามมาตรฐาน เพื่อจุดประสงค์ของตัวอย่างนี้
สมมติว่าแท็ก ID3v1 อยู่ในการเข้ารหัสเดียวกัน (และแท็กนั้นต้องการทิ้งไว้ใน
การเข้ารหัส "cp1251"); ไฟล์ที่จะประมวลผลอยู่ในไดเร็กทอรีปัจจุบันและ
(เรียกซ้ำ) ในไดเรกทอรีย่อย (ไวยากรณ์ "set" สำหรับเชลล์ DOSISH):
ตั้งค่า MP3TAG_DECODE_V1_DEFAULT=cp1251
ตั้งค่า MP3TAG_DECODE_V2_DEFAULT=cp1251
mp3info2 -C id3v2_fix_encoding_on_write=1 -u2R
สำหรับข้อมูลเพิ่มเติม โปรดดู "สิ่งแวดล้อม" ใน MP3::Tag, "config" ใน MP3::Tag และ
"การปรับแต่ง" in MP3::Tag.
ความเข้ากันไม่ได้ สีสดสวย ข้อมูล mp3
เครื่องมือนี้สร้างแบบจำลองอย่างหลวมๆ ในโปรแกรม ข้อมูล mp3; มันเข้ากันได้กับ "ส่วนใหญ่" ย้อนหลัง
(โดยเฉพาะเมื่ออยู่ในโหมด "ไร้เดียงสา" ผ่าน "-N") และอนุญาตให้มี superset ที่สำคัญมากของ
ฟังก์ชั่น ความไม่ลงรอยกันย้อนหลังที่รู้จักกันดีคือ:
-G -h -r -d -x
ฟังก์ชั่นที่ขาดหายไป:
-f -F -ฉัน
เข้ากันไม่ได้ "%"-หนี:
%e %E - ความหมายที่แตกต่างอย่างสิ้นเชิง
%v - ไม่มี 0s ต่อท้าย
%q - มีเศษส่วน
%r - เป็นตัวเลข ไม่ใช่คำว่า "ตัวแปร" สำหรับ VBR
%u - น้อยกว่าหนึ่ง (ต่อหน้าเฟรมอธิบายเท่านั้น?)
หายไป "%"-หนี:
%ข %กรัม
แบ็กสแลช Escape: รองรับเฉพาะ "\\", "\n", "\t"
"-x" พิมพ์ข้อมูลในรูปแบบอื่น ไม่มีฟิลด์ทั้งหมด และชื่อแท็ก ID3v2
เป็นผลผลิต
และพวกเรา
ด้วย "-e" 1, 2 หรือ 3 สคริปต์นี้อาจศึกษาตัวแปรสภาพแวดล้อม "LC_CTYPE, LC_ALL,
LANG" เพื่ออนุมานการเข้ารหัสปัจจุบัน ไม่มีตัวแปรสภาพแวดล้อมอื่น ๆ ถูกอ่านโดยตรงโดย
สคริปต์นี้
อย่างไรก็ตาม โปรดทราบว่าโมดูล MP3::Tag มีชุดค่าเริ่มต้นมากมายสำหรับการตั้งค่าการเข้ารหัส
กำหนดได้โดยตัวแปรสภาพแวดล้อม ดู "สิ่งแวดล้อม" ใน MP3::Tag. ดังนั้นตัวแปรเหล่านี้
ส่งผลกระทบ (ทางอ้อม) ว่าสคริปต์นี้ทำงานอย่างไร
ล้าสมัย INTERFACE
หากคุณไม่เข้าใจว่าเนื้อหาเกี่ยวกับอะไร คุณสามารถเพิกเฉยต่อประกาศนี้ได้อย่างปลอดภัย:
เวอร์ชันเก่าก่อนเวอร์ชัน=1.05
ตัวเลือก) เพื่อให้หลายคำสั่งสำหรับตัวเลือก "-F" และ <-P> ยังคงได้รับการสนับสนุน แต่เป็น
ท้อแท้อย่างแรง (ไม่ขัดแย้งกับอินเทอร์เฟซปัจจุบัน)
ใช้ mp3info2p ออนไลน์โดยใช้บริการ onworks.net
