זוהי הפקודה 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
mp3info2 -NC autoinfo=ID3v1 *.mp3
# קבל אמן מקובץ CDDB, הסקה אוטומטית מידע אחר, כתוב אותו לתגיות
mp3info2 -C artist=קובץ_CDDB -u *.mp3
# עבור כותרת, עדיף מידע מקובץ .inf; גזירה אוטומטית של השאר, עדכן
mp3info2 -C title=Inf,ID3v2,ID3v1,שם קובץ -u *.mp3
# אותו דבר, וקבל את האמן מקובץ CDDB
mp3info2 -C title=Inf,ID3v2,ID3v1,שם קובץ -C artist=קובץ CDDB -u *.mp3
# כתוב סקריפט להמרה של .wav ל-.mp3, תוך גזירה אוטומטית של תגיות
mp3info2 -p "lame -h --vbr-new --tt '%t' --tn %n --ta '%a' --tc '%c' --tl '%l' --ty '%y' '%f'\n" *.wav >xxx.sh
תיאור
התוכנה מדפיסה הודעה המסכמת את פרטי התגית (שהושגו דרך מודול MP3::Tag) עבור
קבצים שצוינו.
ייתכן שהוא גם יעדכן את המידע בתגיות ID3. זה קורה בשלושה מקרים שונים.
· אם המידע שסופק באפשרויות שורת הפקודה "talygcn" שונה מהמידע שסופק על ידי
תוכן תגי ה-ID3 המתאימים (או שאין תגי ID3 תואמים).
· אם ניתנו אפשרויות "-d" או "-F".
· אם "MP3::Tag" משיג את המידע מאמצעים אחרים מלבד תגי MP3, ו-"-u" כופה את
עדכון של תגי ID3.
(כל הדרכים הללו מושבתות על ידי האפשרות "-D".) תג ID3v2 נכתב במידת הצורך, או אם "-2"
ניתנת אפשרות. (מילוי אוטומטי של שדות ניתנים להסקה (באמצעות השיטה
id3v2_frames_autofill()) מתבצע אלא אם כן ניתנות אפשרויות "-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 לקבלת פרטים על הפורמט של sprintf ()כמו בריחות. אם לא
אם האפשרות "-p" תינתן, תישלח הודעה בפורמט ברירת המחדל. ערך האפשרות "-e"
הוא הקידוד המשמש לפלט; אם הערך הוא מספר, קידוד ספציפי למערכת הוא
ניחש (ומשמש לפלט אם סיבית 0x1 מוגדרת); אם סיבית 0x2 מוגדרת, אז, שורת הפקודה
מניחים שהאפשרויות נמצאות בקידוד המנוחה; אם ביט 0x4 מוגדר, אז שורת הפקודה
מניחים שטיעונים נמצאים בקידוד המחושב. השתמשו בערך "בינארי" כדי לבצע קידוד בינארי
פלט.
עם אפשרות "-D" (הרצה יבשה) לא מתבצע עדכון, לא משנה מהן האפשרויות האחרות.
עם אפשרות זו, לא מתבצע ניתוח של תגיות אלא אם כן יש צורך בכך.
השתמש באפשרויות
טליגקן
כדי להחליף את המידע (כותרת, אמן, אלבום, שנה, ז'אנר, הערה, מספר רצועה) שהתקבל
באמצעות היוריסטיקות "MP3::Tag" ("-u" משתמע אם אחד מהארגומנטים הללו שונה
ממה שהיה נמצא אחרת; השתמש במתג "-D" כדי להשבית עדכון אוטומטי). כברירת מחדל,
הערכים של אפשרויות אלו אינם עוברים אינטרפולציה של "%"; ניתן לשנות זאת באמצעות האפשרות "-E".
האפשרות "-d" צריכה להכיל את הרשימה המופרדת בפסיקים של מסגרות ID3v2 למחיקה.
מפרט המסגרת זהה למה שניתן לתת לאינטרפולציה של מסגרת "%{...}"
פקודה, לדוגמה, "TIT3", "COMM03", "COMM(fra)[כותרת קצרה]"; ההבדל עם modify-
גישה היא זו הכל (ולא ה- ראשון של) מסגרות תואמות נמחקות. (אפשרות -d עשויה להיות
חזר על עצמו.)
לדוגמה, "-d APIC" יסיר את כל מסגרות התמונה. בנוסף, אם הרשימה מכילה
"ID3v1" או "ID3v2", תגיות שלמות יימחקו.
באופן דומה, האפשרות "-F" מאפשרת הגדרה של מסגרות "ID3v2" שרירותיות: אם צריך להגדיר
מסגרת אחת, השתמש בהנחיה "FRAME_spec=VALUE":
-F TIT2=הכותרת_החדשה
שוב, לגבי שינוי, הכל מסגרות תואמות נמחקות תחילה, לכן היזהרו עם
-F COMM=התגובה שלי
ניתן לחזור על האפשרות "-F" כדי להגדיר יותר ממסגרת אחת. אם משתנה התצורה
"empty-F-deletes" הוא TRUE (ברירת מחדל), ארגומנטים ריקים ימחקו את המסגרת.
ניתן להחליף את "FRAME_spec=VALUE" ב-"FRAME_spec < FILE"; במקרה זה הערך שיש להגדיר
נקרא מהקובץ בשם קובץ; אם המסגרת היא טקסט בלבד (כלומר: לכל היותר
שדות "תיאור שפה של כתובת URL טקסט [encoded]" קיימים), הקובץ נקרא כטקסט
מצב (ועם הסרת רווחים לבנים מתחילים/אחרונים), אחרת הוא נקרא בצורה בינארית
מצב. (יש צורך ברווח לבן מסביב לסימני "<"). אם "<" מוחלף ב-"?<", ה-
הערך נקבע רק אם המסגרת עדיין לא קיימת, ואם הקובץ קיים; אם הוא מוחלף ב-">",
הערך (אם קיים) נכתב אל קובץ (יצירת ספריות ביניים היא
נשלט על ידי אפשרות התצורה "frames_write_creates_dirs", ברירת המחדל היא FALSE).
בנוסף, "FRAME_spec" יכול להיות אחד מ-"ID3v1" או "ID3v2" או "TAGS"; במקרה זה, שלם
תגיות נכתבות או נקראות. לדוגמה, עבור "תגיות < קובץ", "כותרת אמן אלבום שנה ז'אנר
מידע על "מסלול התגובות" מחושב מ קובץ, אשר עשויים להיות תגיות גולמיות, כפי שהופקו עם ">",
או קובץ MP3 תקין; אם Image::ExifTool קיים, ניתן לקרוא את הנתונים מקובץ שרירותי
קובץ מולטימדיה. (באופן דומה, עבור "ID3v1 < קובץ", אותו מידע מופק מ-"ID3v1"
תג בלבד.) לאחר מכן, במקרה של "ID3v2" או "TAGS", מסגרות "ID3v2" מועתקות מה-
תג "ID3v2" אחד אחד. (עם שינויים מתאימים עבור "?<".)
כברירת מחדל, ה-"VALUE" עבור "-F" הוא אינטרפולציה של "%"; ניתן לשנות זאת באמצעות האפשרות "-E".
לנוחיות המשתמש, צורות ידידותיות יותר למשתמש "מלחין, טקסט מאת, תזמורת, מנצח,
ניתן להשתמש ב-"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 תבוצע (לגבי תופעות לוואי). (ראו דוגמאות: "EXAMPLES: parse"
חוקים").
אם צוין האפשרות "-G", שמות הקבצים בשורת הפקודה ייחשבו כ-glob
תבניות. זה עשוי להיות שימושי אם אורך שורת הפקודה המרבי נמוך מדי. עם ה-
ארגומנטים של האפשרות "-R" יכולים להיות ספריות, אשר מחפשות אודיו באופן רקורסיבי.
(בְּרִירַת מֶחדָל * .mp3) קבצים לעיבוד; השתמש באפשרות "-r" כדי לאפס את הביטוי הרגולרי לחפש
עבור (ברירת המחדל היא "(?i:\.mp3$)").
האפשרות "-E" שולטת בהרחבת תווי בריחה. היא צריכה להכיל את האותיות של
אפשרויות שורת הפקודה שבהן "\\, \n, \t" אינטרפולציות; ניתן להוסיף את האותיות
של אפשרויות "talygcn F" הדורשות אינטרפולציה של "%" לאחר המפריד "/i:" (עבור
"-F", רק הערכים עוברים אינטרפולציה). ערך ברירת המחדל הוא "p/i:Fp": רק "-p" מבוצע
"\"-אינטרפולציה, ורק "-F" ו-"-p" כפופים לאינטרפולציה של "%". אם כל אחד מהם
רוצה זה להוסיף להגדרות ברירת המחדל, יש להקדים את הערך של "-E" (המכיל אפשרויות נוספות) ב-
"+". (חלקים מהערך של האפשרות "-P" עוברים אינטרפולציה, אך זה אמור להיות
נשלט על ידי דגלים, לא על ידי "-E"; לעשות לא הכניסו "P" לחלק של "-E" שעבר אינטרפולציה של "%".)
אם ניתנת האפשרות "-@", כל התווים "@" באפשרויות יוחלפו ב-"%". פעולה זו
עשוי להיות נוח אם הקליפה מטפלת ב-"%" באופן מיוחד (למשל, קליפות DOSISH).
אם ניתנת אפשרות "-I", אין ניחושים עבור אמן השדה מתבצע בעת הקלדה.
האפשרות "-C CONFIG_OPT=VALUE1,VALUE2..." קובעת את נתוני התצורה של "MP3::Tag" זהים
בדרך כמו "MP3::Tag-"config()> יעשה (נזכיר שהערך הוא מערך; אלמנטים נפרדים
באמצעות פסיקים אם יש יותר מערך אחד). ניתן לחזור על האפשרות כדי להגדיר יותר מערך אחד. הערה
שמכיוון ש-"ParseData" משמש לעיבוד מתכוני ניתוח "-P", עדיף לשמור אותם
בתצורת "autoinfo" (ובשדות קשורים "author" וכו') בנוכחות "-P".
אם ניתנת האפשרות "-x", יודפס המידע הטכני אודות קובץ האודיו.
(רמת MP3, משך, מספר פריימים, ריפוד, זכויות יוצרים ורשימת פריימים של ID3v2
שמות בפורמט המתאים ל-"%{...}" escapes). אם "-x" חוזר על עצמו, תוכן המסגרות מוחלש
גם מודפס (עשוי להוציא תווים שאינם ניתנים להדפסה, אם הוא חוזר על עצמו יותר מפעמיים).
אם ניתנת האפשרות "-N", כל ה"חכמות" מושבתות - אין נרמול של שדות
קורה, ו(כברירת מחדל) אין ניסיון להסיק את ערכי השדות משדות שאינם ID3
המידע נעשה. אפשרות זו שקולה (כרגע) ל-"-C"
autoinfo=ParseData,ID3v2,ID3v1" כהנחיה הראשונה, ללא
נרמול::טקסט::Music_Fields.pm נוכח בנתיב @INC, ולא קורא מילוי אוטומטי () שִׁיטָה.
נוֹרמָלִיזָצִיָה of שדות
(טעינת מודול הנורמליזציה וכל הפעולות הבאות עשויות להיות מושבתות על ידי
האפשרות "-N", או על ידי הגדרת משתנה הסביבה "MP3TAG_NORMALIZE_FIELDS" ל-FALSE.
אם לא אסור, נעשה ניסיון לטעון את המודול אם הספרייה ~/.שדות_מוזיקה 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 "סונטה מס' 28" -p "%t\n" ""
mp3info2 -D -a beethoven -t "אלגרטו, בס" -@p "@t\n" ""
mp3info2 -D -a בטהובן -t "op93" -@p "@t\n" ""
ידפיס את שם האדם המנורמל עבור "בטהובן", שם הקיצור המנורמל המתאים
שם אדם, והכותרת המנורמלת עבור "סונטה מס' 28" של המלחין "בטהובן". לדוגמה,
עם טבלאות הנורמליזציה שנשלחו, הוא ידפיס
לודוויג ואן בטהובן (1770-1827)
ל. ואן בטהובן
סונטה לפסנתר מס' 28 בלה מז'ור; אופוס 101 (1816)
אלגרטו לשלישיית פסנתר בסי במול מז'ור; WoO 39 (1812)
סימפוניה מס' 8 בפה מז'ור; אופוס 93 (קומפוזיציה 1812, מול וינה, 1814-02-27, בניצוחו של בטהובן; פורסמה 1816)
השמיים להזמין of מבצע
נכון לעכשיו, הפעולות מתבצעות בסדר הבא
· מחיקת ID3v1 או ID3v2 בשלמותו באמצעות האפשרות "-d";
· מתכונים עם אפשרות "-P" מוגדרים (כדי שיופעלו על ידי אינטרפולציה);
· ההגדרה נעשית באמצעות האפשרויות "-a/-t/-l/-y/-g/-c/-n";
· ההגדרות שבוצעו באמצעות האפשרות "-F";
· מחיקת מסגרות בודדות באמצעות האפשרות "-d";
· מילוי אוטומטי של מסגרות ID3v2 (id);
· פליטת מידע המבוסס על האפשרויות "-p" ו-"-x";
· הפעלת מתכונים של "-P" (אם לא מופעלים על ידי אינטרפולציה);
· עדכון תגיות במידת הצורך.
נוֹהָג אסטרטגיה: הסלמה of מורכבות
מטרת הסקריפט הזה היא להפוך את הטיפול בתגיות ID3 לפשוט ככל האפשר. as אפשרי.
בקצה אחד של הסקאלה, ניתן לבצע מניפולציות מורכבות באופן שרירותי עם תגיות באמצעות
מודול פרל "MP3::Tag".
מצד שני, הרבה יותר נוח להתמודד עם מניפולציות פשוטות ביותר עם תגיות.
באמצעות האפשרויות של סקריפט זה "-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 שלכם הוא
מזוהה על ידי פרל, מומלץ מאוד להגדיר את האפשרות "-e 3"; על קליפות DOSISH,
עדיף להשתמש ב-"-@", ולהחליף את "%" ב-"@" למטה.)
"-t ערך"
-P "mz/VALUE/%t"
"-א-ל-י-ג-ג-ן"
כמו כן.
"-F" "TIT2=ערך"
-P "mzi/VALUE/%{TIT2}"
"-F" "APIC[myDescr] < קובץ"
-F "APIC[myDescr]=%{I(fimbB)קובץ}"
or
-P "mzi/%{I(fimbB)קובץ}/%{APIC[myDescr]}"
(הסר את "bB" עבור מסגרות טקסט בלבד).
"-F" "APIC[myDescr] > קובץ"
-P "bOi,%{APIC[התיאור שלי]},קובץ"
(הסר את "b" עבור מסגרות טקסט בלבד); או השתמש ב-"-e binary -p "%{APIC[myDescr]}""
עם ניתוב מחדש, ראה "דוגמאות: כללי ניתוח".
TIT2 -ד
-P "m//%{TIT2}"
"-F" "TIT2 ?< קובץ"
מאוד מסובך. זה לא יבחין בין קובץ ריק לקובץ שאינו קיים:
-P "mzi/%{TIT2:1}0%{I(fFim)FILE}/10/10%{TIT2}/0%{U1}"
(הוסף "bB" ל-"fFim" עבור מסגרות שאינן טקסט בלבד); ניתן להשמיט את החלק האחרון
אם משמיטים את הדגל "m" - הוא קיים רק כדי ללכוד שגיאות דפוס.
לפרטים על "כללי ניתוח", ראו "דוגמאות: כללי ניתוח" ו"תיאור" ב
MP3::תגית::ניתוח נתונים.
דוגמאות: לנתח כללי
רק האפשרות "-P" מסובכת מספיק כדי לטעון הערות... לפרטים מלאים על
לנתח כללי, ראה "תיאור" ב-MP3::Tag::ParseData; לפרטים מלאים על אינטרפולציה,
ראה "interpolate" ב-MP3::Tag, "interpolate_with_flags" ב-MP3::Tag.
לדוגמה (טיפשית), אפשר להחליף את "-a הומרוס -t איליאדה" ב
-P mz=הומרוס=%a -P mz=איליאדה=%t
דוגמה פחות טיפשית היא כפיית דרך מסוימת לניתוח שם קובץ באמצעות
-P "im=%{d0}/%f=%a/%n %t.%e"
זה נפרץ
תבנית מחרוזת דגלים1
"אני" "%{d0}/%f" "%a/%n %t.%e"
אותיות הדגל מייצגות אינטרפולציה, חייב_להתאיםפעולה זו מבצעת אינטרפולציה של המחרוזת
"%{d0}/%f" ומנתח את התוצאה (שהיא שם הקובץ עם רמה אחת של הספרייה)
חלק נשמר) באמצעות התבנית הנתונה; כך שם הספרייה הופך לאמן, ה
החלק המספרי המוביל - מספר הרצועה, ושאר שם הקובץ (ללא סיומת)
- הכותרת. שימו לב שמכיוון שמותר מספר דוגמאות, ניתן לאפשר באופן דומה גם
פורמטים מרובים של השמות, למשל
-P "im=%{d0}/%f=%a/%n %t.%e=%a/%t (%y).%e"
מאפשר ששם הבסיס של הקובץ יהיה גם הוא בצורה "כותרת (שנה)". דרך חלופית ל
להשיג את אותן תוצאות הוא
-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" מבקש אינטרפולציה של "%" של האפשרות "-a" בנוסף ל-
אינטרפולציה ברירת מחדל של "\" של "-p", ואינטרפולציה של "%" של "-F" ו-"-p"; אפשר
קיצור דרך באמצעות "-E +/i:a").
כדי לתת דוגמאות נוספות,
-P "אם=%D/.comment=%c"
יקרא את התגובה מהקובץ .הֶעָרָה בתיקייה של קובץ האודיו;
-P "ifn=%D/.comment=%c"
יש השפעה דומה אם הקובץ .הֶעָרָה מכיל הערות בנות שורה אחת, אחת לכל רצועה (זה מניח
ניתן למצוא את מספר הרצועה בדרכים אחרות).
נניח שקובץ חלקים בספרייה של קבצי MP3 יש את הפורמט הבא: יש לו
הקדמה, לאחר מכן יש פסקה קצרה של מידע לכל קובץ שמע, שלפניה הרצועה
מספר ונקודה:
...
12. רזיטטיבי.
(פיזארו, רוקו)
13. דואט: jetzt, Alter, jetzt hat es Eile, (Pizarro, Rocco)
...
הפקודה הבאה מכניסה מידע זה לכותרת של תג ה-ID3 (בתנאי שהאודיו
שמות הקבצים אינפורמטיביים מספיק כדי ש-MP3::Tag יוכל להסיק את מספר הרצועה):
mp3info2 -u -C parse_split='\n(?=\d+\.)' -P 'fl;חלקים;%=n. %t'
אם פסקת מידע זו היא בעלת הטופס "כותרת (הערה)" עם החלק "הערה"
בהיותו אופציונלי, לאחר מכן השתמש
mp3info2 -u -C parse_split='\n(?=\d+\.)' -P 'fl;חלקים;%=n. %t (%c);%=n. %t'
אם ברצונך להסיר נקודה או פסיק שנכנסו לסוף הכותרת, השתמש ב-
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)"; הפרידו בין שני חלקי ההערה באמצעות שורה ריקה:
mp3info2 -EC -C 'parse_split=\n(?=\d+\.)' -C 'parse_join=\n\n' \
-P 'f;הערה;%c' -P 'fl;חלקים;%=n. %t' \
-P 'i;%t///%c;%t (%c)///%c' -P 'iR;%t;%t[.,]$'
זה בהנחה שהכותרת והתגובה אינן מכילות '///' כתת-מחרוזת.
הסבר: התבנית הראשונה של "-P",
['f', 'הערה' => '%c'],
קורא תגובה מהקובץ "תגובה" לתוך שדה ההערות; השני,
['fl', 'חלקים' => '%=n. %t'],
קורא קטע מתוך "חלקים" לתוך שדה הכותרת. השלישי
['i', '%t///%c' => '%t (%c)///%c']
מסדר מחדש את הכותרת והתגובה ובלבד הכותרת היא בצורה "כותרת (תגובה)".
(אפשרות התצורה "parse_join" מטפלת בהפרדת שני חלקים של תגובה
(המקביל לשתי הופעות של %c בצד ימין.)
לבסוף, התבנית הרביעית זהה לזו שבדוגמה הקודמת; היא מסירה אובייקטים מזויפים
סימני פיסוק בסוף הכותרת.
דוגמאות נוספות: הסרת המחרוזת "עם כינור" מתחילת שדה ההערה (הסרת
הגיבו לגמרי אם לא נשאר כלום):
mp3info2 -u -P 'iz;%c;עם כינור%c' *.mp3
הגדרת שדה האמן מבלי לאפשר לתכונת העדכון האוטומטי להסיק שדות אחרים מ
מקורות אחרים;
mp3info2 -C autoinfo=ParseData -a "AU Thor" *.mp3
הגדרת שדה תגובה אלא אם כן הוא כבר קיים:
mp3info2 -u -P 'i;%c///עם פסנתר;///%c' *.mp3
הדוגמה האחרונה מראה כיצד לכתוב בפועל "תוכניות" בשפת ה-"-P"
אפשרות: הדוגמה נותנת הקצאה מותנית. עם משתני משתמש (כמו ב-"%{U8}")
עבור קבצים זמניים, ואפשרות להשתמש בביטויים רגולריים, ניתן לספק קבצים שרירותיים
לוגיקה תכנותית. כמובן, ברמת מורכבות מסוימת עדיף לעבור ל
ממשק ישיר עם מודול פרל "MP3::Tag" (השתמש בקוד של סקריפט פרל זה כ-
דוּגמָה!).
הנה הגדרת משימה אופיינית למסגרות 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 "מלחין=@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 ללא תגיות מדלגים.
כעת נניח שישנן שתי היררכיות קבצים מקבילות של קבצי שמע ושל מילים:
קבצי האודיו נמצאים ב שמע/שם_התיקייה/שם_השמע.mp3 עם קובץ המילים המתאים ב
טקסט/שם_התיקייה/שם_השמע.mp3כדי לצרף מילים לקבצי MP3 (בתוך מסגרת "COMM" עם
תיאור "מילים" בשפה "אנגלית" - זֶה is a לא סטנדרטי מקום, לִרְאוֹת בהמשך!),
שיחה
mp3info2 -@P "fim;../text/@{d0}/@B.txt;@{COMM(אנגלית)[מילים]}" -Ru .
בתוך הספרייה אודיו(לשנות את "fim" ל-"Ffim" כדי להתעלם מקבצי האודיו שעבורם
קובץ הטקסט המתאים אינו קיים.) (כמובן, כדי לעמוד במפרטים,
היה צריך להשתמש בשדה "%{USLT(eng)[]}" במקום "%{COMM(eng)[lyrics]}"; ראה
להלן וריאציות).
סיים בדוגמה פשוטה מאוד: כל מה שהתבנית
-P 'i;%t;%t'
עושה זאת הוא הסרת ריקים נגררים ומובילים מהכותרת (אשר מוסקים על ידי אחרים
אֶמְצָעִי).
עוד דוגמאות
עם האפשרות "-F", ניתן להגדיר את מסגרת ה-"USLT" כ-
mp3info2 -@F "USLT(eng)[] < ../text/@{d0}/@B.txt" -Ru .
הדפיסו מסגרת כזו (בכל שפה) עם
mp3info2 -@p "@{USLT[]}\n" file.mp3
באופן דומה, כדי להדפיס את מסגרת ה-APIC עם תיאור ריק, השתמשו ב-
mp3info2 -e binary -@p "@{APIC[]}" file.mp3 > קובץ_תמונה_פלט
או (עם התיאור "כריכה")
mp3info2 -@P "bOi,@{APIC[כריכה]},קובץ_תמונה_פלט.jpg" טוען="עצלן" אודיו_07.mp3
כדי להגדיר מסגרת כזו מקובץ xxx.gif (עם ברירת המחדל "סוג תמונה", "כריכה (קדמית)",
ותיאור ריק), בצע אחד מהבאים הבאים:
mp3info2 -F "APIC < xxx.gif" קובץ.mp3
mp3info2 -@F "APIC[]=@{I(fimbB)xxx.gif}" קובץ.mp3
ההבדל בין "APIC" ו-"APIC[]" הוא שהראשון מסיר תחילה את כל המסגרות של "APIC",
והשני מסיר רק את כל מסגרות ה-"APIC" עם תיאור ריק - אבל תמונה שרירותית
סוג. לכן ייתכן שיהיה מתאים יותר להשתמש במפרט המלא, כמו ב-"APIC(Cover
(חֲזִית))[]".
כדי להסיר מסגרות "APIC" עם תיאורים ריקים, יש להשתמש בסוגי "תמונה" שרירותיים (ו-"MIME"
סוגים אשר ניתן לחשב בצורה נכונה על ידי mp3info2, לדוגמה, "TIFF/JPEG/GIF/PNG"), השתמש
mp3info2 -d "APIC[]" קובץ.mp3
(שימו לב שזה לא יפנה מקום בדיסק, אלא אם כן "כווץ" נכפה על ידי התצורה)
כדי לעשות את אותו הדבר עם סוג התמונה "מנצח" בלבד, בצע
mp3info2 -d "APIC(מוליך)[]" קובץ.mp3
כדי לסרוק בין ספריות משנה ולהוסיף קבצים cover.jpg מהספרייה של הקובץ בתור
מסגרת "APIC" "ברירת מחדל", אך רק אם אין מסגרת "APIC", וקובץ קיים, בצע
mp3info2 -@F "APIC ?< @D/cover.jpg" טוען="עצלן" -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, "קונפיגורציה" ב-MP3::Tag, ו-
"התאמה אישית" ב-MP3::Tag.
אי התאמה עם מידע על mp3
כלי זה בנוי באופן חופשי על פי התוכנית מידע על mp3זה "ברובו" תואם לאחור
(במיוחד במצב "נאיב" דרך "-N"), ומאפשר קבוצת-על משמעותית מאוד של
פונקציונליות. אי-תאימות לאחור ידועות הן:
-G -h -r -d -x
פונקציונליות חסרה:
-f -F -i
לא תואם "%"-בורח:
%e %E - סמנטיקה שונה לחלוטין
%v - ללא אפסים אחריו
%q - יש חלק שברי
%r - הוא מספר, לא מילה. "משתנה" עבור VBR
%u - האם אחד פחות (בנוכחות מסגרת תיאור בלבד?)
חסר "%"-בורח:
%b %G
קו יציאה לאחור (Backlooking escape): רק "\\", "\n", "\t" נתמכים.
"-x" מדפיס נתונים בפורמט שונה, לא כל השדות קיימים, ושמות תגיות ID3v2
הם פלט.
הסביבה
עם "-e" 1, 2 או 3, סקריפט זה עשוי להתייעץ עם משתני סביבה "LC_CTYPE, LC_ALL,
LANG" כדי להסיק את הקידוד הנוכחי. אף משתני סביבה אחרים לא נקראים ישירות על ידי
התסריט הזה.
שימו לב עם זאת, שלמודול MP3::Tag יש סט עשיר של ברירות מחדל עבור הגדרות קידוד.
ניתן להגדרה על ידי משתני סביבה; ראה "סביבה" ב-MP3::Tag. לכן משתנים אלה
משפיעים (בעקיפין) על אופן פעולתו של הסקריפט הזה.
אובסולייט ממשק
אם אינך מבין על מה מדובר, אתה מוזמן להתעלם מההכרזה הזו:
הדרך הישנה, שלפני גרסה 1.05 (על ידי שילוש של מפריד, ללא חזרה על
אפשרויות) כדי לספק פקודות מרובות לאפשרויות "-F" ו-<-P> עדיין נתמך, אך הוא
מומלץ מאוד. (זה לא מתנגש עם הממשק הנוכחי.)
השתמש ב-mp3info2p באינטרנט באמצעות שירותי onworks.net
