Kūjō, Jolyne

28/09/2018

3o41bhs.jpg
בעקבות גילויי, שכתיבת מדריך זה די מהנה, החלטתי להכין מדריך "איכותי".

קצת הסבר
במדריך זה אלמד כיצד עובד הבסיס של אפקטים באגיסאב, לכן שימו לב!
המדריך לא נועד לאנשים חדשים וחסרי נסיון באגיסאב, אלה לבעלי הבנה בסיסית באגסא בנושא הטייפ.
המדריך יסביר רק על הדרך בה עובדים עם האפקטים וגם יציג זאת.
לא אסביר מעבר למה שייכתב במדריך, מאחר שזה לא יחשב כבר כמדריך לימוד בעיניי, אלא יותר כעשייה עבורכם.
בנוסף, לא אלמד את הבסיס של אגיסאב, כי הוא קיים בהרבה מקומות שנכתבו בעברית.
אישית, לא נתקלתי עדיין במדריך שמסביר איך לעבוד עם האפקטים ככה, בפשטות למבינים, אלא רק בכאלה שמסבירים הכול מאפס.
אם יהיו בקשות רבות, אולי אכין גם מדריך שיסביר כיצד להשתמש ב-nyufx.
nyufx - תוכנה חיצונית ליצירת אפקטים המשתמשת רק ב-lua.
 
תחילת העבודה
יוצרים שורה חדשה המוגדרת בתור comment ובה שני דברים עיקריים לנושא זה:
ה-style, שהוא ה-style של השורות להן אנחנו מכינים את האפקט,
והאפקט - ב-"effect" אנחנו מכניסים את סוג ה-template.
תמונה להמחשה
am7goco.png

סוגי ה-template:
באגיסאב יש לנו סוגי template שונים, שאותם ארשום ואסביר כיצד לעבוד איתם עכשיו.
1. template line - מוגדר לשורות.
2. template syl - מוגדר להבהרות (syl = הבהרה).
3. template char - מוגדר לאותיות (שימו לב כי המשתנים להבהרות).
4. סוגים מיוחדים: notext ,noblank ו-jumper.
את ה-template נכתוב במקום של ה-Effect, מה שיקבע את הסוג.
template line- מעתיק את האפקט שלנו לכל הבהרה בשורה, אבל מעתיק שורות שלמות.
template syl - מעתיק את האפקט שלנו להבהרה בכל שורה חדשה.
template char - מעתיק אות האפקט לאות אות ואות בכל שורה חדשה.
נוסיף אל ה-template את ה-noblank. לדוגמה: "template line noblank" -מעלים שורות ריקות. (במקרה של syl, יעלים syl ריקים).
notext - מעתיק לנו את האפקט, אך לא את תוכן הקריוקי(במקרה שנרצה שהאפקט יזרוק כוכבים, אז אין צורך במילים, אלא בכוכבים שלנו).
jumper - למיטב ידיעתי, ניתן להגדיר על שורות בלב template line jumper ואז השורה תעשה מין shaking נחמד כזה.

הסבר תוכן השורה/האפקט עצמו:
את האפקט עצמו נכתוב בשורת ה-"sub title",
אז מה בעצם כותבים שם? זה קל. אנחנו נכניס תווים שיפעלו על פי המוגדר ב-template.
לדוגמה: אם נכניס את התג "(t(0, 500, \frz15\" ונפעיל את האפקט (נלחץ Apply karaoke template < Automation),
תמונה להמחשה
gfglf6j.png

אז באותו הרגע שנפעיל את ה-template,  תיווצר שורה חדשה לכל שורה קיימת בה התזמון של ההבהרות יעלם וגם התג ששהשם שלו יופיע על כל הבהרה (כמובן, השורות הקיימות ירדו ל-comment).
 

משתנים:
אז גם פה יש לנו משתנים שגם איתם אנחנו נכין את האפקט.
אני אציג את המשתנים הבסיסים ואת השאר אפשר למצוא ב-api של aegisub:
sstart$ - זמן התחלה של הבהרה ו- lstart$ - זמן התחלה של השורה.
send$ - זמן סיום של הבהרה ו- lend$ - זמן סיום של שורה.
smid$ - זמן אמצע ההבהרה ו - lmid$ - זמן אמצע השורה.
x$ - ערך ה-x של ההבהרה/שורה (תלוי בהגדרת ה-template).
y$ - ערך ה-y של ההבהרה/שורה (תלוי בהגדרת ה-template).
middle$ - ערך ה-y של אמצע השורה/ההבהרה ו - center$ - ערך ה-x של אמצע השורה/ההבהרה.
left$ - הנקודה הכי שמאלית של השורה/ההבהרה ו- right$ - הנקודה הכי ימנית של השורה/ההבהרה (שימו לב כי אלה ערכי ה-x!).
bottom$ - תחתית השורה/הבהרה ו - top$ - הלמעלה של השורה/ההבהרה (שימו לב כי אלה ערכי-y!).
dur$ - אורך השורה/הבהרה ו - kdur$ - אורך ההבהרה (אם אתם זוכרים האפקט - שם את התגים לכל הבהרה ולכן kdur מביא לכם את הזמן של ה-k - התזמון של ההבהרה).
שימו לב כי kdur$ שימושי למקרים שבהם רק רוצים להחליף את תג ה-k\ ל-kf\ ואז יוצרים template line ושמים בו {kf$kdur\}
אציין כי בזמני התחלה,אמצע וסיום הגדרתי s בשביל syl ו- l בשביל line, אבל אתם יכולים להעלים אותם וזה יפעל על פי השורה/ההבהרה.

דרך הפעולה:
אז עכשיו, כשאתם יודעים מה הם המשתנים ואיך ליצור שורה ל-effect, כל מה שנותר זה להסביר כיצד ליצור את האפקט עצמו.
אדגים לכם אפקט ואני מקווה שמשם תבינו את דרך השימוש:
לדוגמה, אם ארצה שכל הבהרה תודגש ב"תור" שלה,
אז אצור שורת אפקט תחת template syl noblank (בדרך כלל משתמשת ב-noblank, כי לרוב אין שימוש בהבהרות ריקות) ואכניס בה תזמון שברגע שתתחיל היא תגדל וברגע שתסתיים היא תקטן, (שימו לב שכשיוצרים template syl חשוב לשים כל הבהרה במקום שלה ולכן נשתמש (pos($x, $y\! )

תנסו עם קצת חשיבה לעשות לבד ואז תציצו ותבינו את הדרך
{\pos($x, $y)\t($sstart, $smid, \fs95) \t($smid, $send, \fs85)}


חיבור lua:
אגיסאב מאפשרת לנו גם להשתמש ב-lua בשביל האפקטים.
בשביל שימוש ב-lua יש לנו 2 דרכים:
1. החיבור של ה-lua בתוך "שורת" האפקט שלנו.
2. יצירת שורת ה-code.

חיבור lua בשורת האפקט:
פה פשוט ניצור שני סימני קריאה שבניהם אנחנו חופשיים לכתוב כל קוד של lua.
לבמקרה שנרצה להזיז את מיקום ציר ה-x ב-15, אז מה נעשה? נוסיף לו 15, נכון?
כך נעשה, !15+x$! ובום!

​דוגמא בתוך קוד
{\pos(!$x+15!, $y)}

כמובן, אפשר לעשות דברים יותר מתקדמים כמו לסובב בצורה "רנדומלית".

נכניס את הקוד
{\frz!math.random(-50, 50)!}

ספריית ה-math למעוניינים...
math.abs - ערך מוחלט.
math.ceil - עיגול כלפי מעלה.
math.floor - עיגול כלפי מטה.
math.random - מגריל מספר בין 2 ערכים (הראשון צריך להיות קטן מהשני). 
math.sin ו - math.cos - סינוס\קוסינוס.
math.sqrt - שורש.
כמובן' פעולות חשבון רגילות פועלות.
* - כפל  | + - ועוד | -  - פחות | \ - חילוק | % - שארית.

ושימו לב שיש פונקציה שנמצאת בתוך הסקריפט עצמו, שאנחנו יכולים להשתמש בה הנקראת "retime"!
כמובן שמאחר שהיא פונקציית lua, אנחנו נכניס אותה בתוך !!.
בעזרת הפונקצייה הזו אנחנו יכולים לשנות את תזמון השורה.

הפונקציה "(retime(mode, addstart, addend":
ב-mode מכניסים את סוג ההבהרה בתוך מחרוזת (כמרכאות).
ב-addstart מגדירים את זמן ההוספת להתחלת השורה(אם תכניסו מספר שלילי אתם תורידו...)
ב-addend מגדירים זמן ההוספה לסוף השורה (אם תכניסו מספר שלילי אתם תורידו...).
שימו לב שאם תכניסו 0, זה יוגדר על פי הזמן, אבל במקרים בהם צריכים להגדיר התחלה/סיום, חייבים להכניס ערך שהוא לא 0!

רשימת סוגי ה-retime:
syl - תזמון לזמן של ההבהרה בלבד.
presyl - תזמון לפני הבהרה בה זמן הסיום "0" - הוא ההתחלה שלה וזמן ההתחלה אתם מגדירים.
postsyl - תזמון לפי הבהרה בה זמן הסיום אתם מגדירים וזמן ההתחלה "0" הוא זמן הסיום שלה.
line - תזמון לפי זמן השורה (התזמון הרגיל).
preline - תזמון לפי שורה בה זמן הסיום "0" הוא ההתחלה שלה וזמן ההתחלה אתם מגדירים.
postline - תזמון לפי שורה בה זמן הסיום אתם מגדירים וזמן ההתחלה "0" הוא זמן הסיום שלה.
start2syl - תזמון מתחילת השורה עד תחילת ההבהרה.
syl2end - תזמון מסוף ההבהרה עד סוף השורה. (שימו לב שלא יפעל על ההבהרה האחרונה...).
set או abs - תזמון על פי הגדרה משלכם. (לא מצאתי לזה שימוש עד היום, אבל בטוח שאתם תמצאו).
sylpct - תזמון הבהרה על פי אחוזים.

דוגמא לשימוש - כל פעם שיגיע זמן ההבהרה היא תסתובב במקום.
!retime("syl", 0, 0)!{\frz360\t(0, 0, \frz0)}

יצירת שורת code של lua:
אז את שורת ה-code אנחנו יוצרים כדי להכין פונקציות משלנו וכדומה.
את שורת הקוד ניצור כמו שורת template, רק עם code, במקום template.
code:
1. code line - מוגדר לשורות.
2. code syl - מוגדר להבהרות.
3. code char - מוגדר לאותיות.
4. code once - במקרה שניצור פונקציה.
מיוחדים:
all - מגדיר על כל אות סוג הנמצא באותו התזמון (שורה).
את מה שיצרתם בתוך שורת ה-code תחברו בעזרת שני סימני קריאה בשורת האפקט!

סיכום:
הסוף. בעיקרון, המדריך אמור לעזור לאנשים בעלי ידע ב-aegisub שמחפשים את הדרך המהירה להתחיל.
אישית, אני חושבת שהרבה יותר כיף להבין לבד איך האפקטים עובדים ולחקור, ולכן הבאתי לכם את הכלים להתחיל.
מכאן תתחילו להתנסה. תסתכלו על אפקטים ביוטיוב >> תחקרו >> תשכילו >> תבינו.
בהצלחה!

cN3rd תגובה נבחרת

29/09/2018

קודם כל, שאפו על המדריך.

יש לי קצת זמן לעבור עליו וראיתי בו כמה אי-דיוקים או דברים שיכולים לבלבל מתקדמים, אז אסביר עליהם בהרחבה.

לגבי מדריך על NyuFX אני קצת חלוק - אף על פי שאשמח לראות שימוש של אדם אחר בפלטפורמה הזו, אני חושב ש-Lua זו שפה נוראית ושהפלטפורמה ש-NyuFX מציגה די מסורבלת. לדעתי צריך לכתוב פלטפורמה יותר גמישה בשפה טובה יותר כמו Python.

 

שורות תבנית, קוד ו-Modifiers

במדריך שלך ציינת שיש שני סוגי שורות: שורות קראוקה ושורות תבנית (Template). ציינת גם סוג שלישי - שורות קוד - שמאפשרות לך להזין קוד Lua שיכול לרוץ באופן חד פעמי, בכל שורה או בכל הברה. אבל אם נסתכל על זה מקרוב - אפשר לאחד את שורות הקוד ושורות ה-Template תחת אותה הגדרה - שורות "קונפיגורציה". שורות שמגדירות איך הקריוקי יראה ויתנהג.

איך אנחנו קובעים מתי כל Template או שורת קוד רצה? בעזרת Template modifiers. למשל, שורה מסוג

template syl

היא שורה מסוג template עם ה-modifier של syl, תבנית שחלה על כל הברה.

את ה-Template modifiers מחלקים ל-2 סוגים:

  • Class modifiers - קובעים מתי שורה מסויימת (תבנית\קוד) רצה.
    דוגמאות: once, line, syl
  • Other modifiers - מאפיינים נוספים שאפשר להחיל על השורה.
    דוגמאות: all, char, keeptags, notext, noblank.

לכל שורת קונפיגורציה כזו (תבנית או קוד) אפשר לשרשר modifiers. מן הסתם, ניתן לתת לשורה רק class modifier יחיד (טכנית, אפשר לתת כמה אבל ה-karaoke templater יתייחס רק לאחד). לעומת זאת, אפשר לשרשר כמה modifiers מהסוג השני. דוגמא:

template syl noblank

זוהי שורת template שרצה על כל ה-syllables שמכילים תווים נראים לעין (מתעלם syllables ריקים ו-syllables שמורכבים מרווחים).

לשורות template אפשר לתת כמה modifiers שונים, אבל לשורות קוד מומלץ לתת כמעט תמיד בעד כ-2 modifiers. לא ניסיתי לשרשר יותר מכך ואני לא יכול להבטיח שזה לא יגרום להתנהגויות מוזרות.

בחזרה למדריך כאן... סוגי שורות ה-Template השונות שהצגת במדריך שלך הם בעצם קונפיגורציות ספציפיות של modifiers ויכולות לבלבל כל מי שרוצה לעשות דברים טיפה יותר מתקדמים עם המערכת.

לקריאה נוספת למעוניינים בלבד: http://aegisub.org/manual/Karaoke_Templater_Reference:_Template_modifiers

 

שורות ב-Comment וכו'

לא צויין כאן שה-Templater מריץ רק שורות שסומנו ב-Comment. כלומר שאם יש לך שורה שאת מנסה לדבג (קריוקי\תבנית\קוד), אפשר "להציג" אותה וה-Templater יתעלם ממנה.

 

הבהרות ספציפיות לחלק של הקוד

אפשר לגשת לספריות Lua סטנדרטיות שה-karaoke templater לא חושף על ידי שימוש באובייקט _G ככה:

!_G.math.random(5)!

זה מאפשר לנו להכניס ל-scope ספריות נוספות של lua:

table = _G.table;
string = _G.string;

ואף לגשת לפונקציות עזר שימושיות של Aegisub:

width, height, descent, ext_lead = _G.aegisub.text_extents(style, text);

מידע על כל הפונקציות שאפשר לגשת אליהן זמין בכתובת הבאה: http://docs.aegisub.org/manual/Lua_Reference

תיאורטית, משתמשים מתקדמים יכולים אף ליצור סקריפטים משלהם ולהשתמש בהם באופן הזה. לא ניסיתי לעשות את זה בעצמי ולכן לא אסביר איך.

 

כמו כן, מעבר ל-Retime שהוסברה כאן יחסית בהרחבה יש עוד כמה פונקציות שימושיות. הכל מוסבר בקישור הבא: http://docs.aegisub.org/manual/Karaoke_Templater_Reference:_Code_execution_environment

 

הבהרות נוספות

TsUNaMy WaVe

28/09/2018

מדיך מפורט ומרשים ביותר!
כל הכבוד!

ZeroA

28/09/2018

יישר וכוח! כל הכבוד!

DeadlyAngle

28/09/2018

הרבה זמן חיכיתי למדריך כזה. היה נחמד אם היה סרטון המבסס את הכתוב.  שאפו על ההשקעה ^^

 

AltairChan

29/09/2018

עשית לי את היום. תודה על המדריך!

זה סידר לי קצת את הבלגן שיש לי בראש.

Shaykoko2

29/09/2018

בטוח אשתמש בו בשלב מאוחר יותר, ישר כוח על ההשקעה! מדריך שיעזור להרבה אנשים שבאמת רוצים ללמוד ולהתקדם :)

TecNight

29/09/2018

GOOD JOB

kazuto kirigia

29/09/2018

שאפו על המדריך! תודה רבה!

Akagami no Shimon

29/09/2018

אחלה מדריך! תותח :ok_hand:

אראגון

29/09/2018

יופי של דבר, כל הכבוד.

אם תוסיף ווידאו שמדגים הכל זה יהיה מושלם.

יאיר

30/09/2018

אפשר להוסיף לעמוד של מדריכי פאנסאב (אם עוד לא עשו את זה)