יום שישי, 21 באוגוסט 2009

SlowMotion xN, מדריך צילום בהילוך איטי חלק ב' - תוכנה

אחרי צד החומרה וביצוע הצילום הגיע הזמן לחלק השני של המדריך לוידאו בהילוך איטי.
השלב הראשון לביצוע הוא העברת התוכן המצולם אל המחשב.
אם יש לכם מצלמת וידאו דיגיטלית עם קלטות, כלומר מצלמת DV, אתם כנראה כבר מיומנים בהעברת התוכן למחשב, הדרך הקלה ביותר היא דרך Movie Maker, תוכנה מובנית בווינדוס, עליכם להתחיל "לכידה" מהתקן FireWire, ואז לשמור את הקובץ ללא קידוד בפורמט AVI DV. (הקידוד יפגע באיכות התמונה ויהרוס את השדות המרכיבים את התמונה).
לבעלי מצלמות חדשות עם דיסק קשיח או הקלטה ע"ג כרטיס זיכרון הפעולה עוד יותר פשוטה, ניתן להעתיק את הקבצים דרך USB או קורא כרטיסים.
לבעלי מצלמת וידאו אנלוגית (כמוני), כאן יש סיבוך מסויים. אתם צריכים כרטיס טלוויזיה (פנימי או חיצוני) המסוגל להקליט ברוזולוציה מלאה (כמעט כולם כאלה, מדובר על 720x576 עם 25 FPS בPAL) ואני ממליץ ללכוד באמצעות התוכנה VirtualDub במצב CaptureAVI. אני אכתוב על זה מדריך נפרד בהתאם לביקוש.

אוקיי, יצאנו מנקודת הנחה שיש לכם קובץ וידאו גולמי במחשב שאפשר לעשות בו שימוש, עדיף קובץ AVI אבל לא חייב (יכול להיות MOV MPG ועוד). התוכנה שבה נשתמש תומכת במגוון רחב,
קוראים לה MeGUI, לחצו להורדה.
השימוש העיקרי של התוכנה הוא לקידוד קבצי וידאו למס' פורמטים בינהם MPEG4 x264 שהוא המקודד הכי איכותי בו משתמשים בסרטי HD, אבל גם XVID תמצאו כאן.
האופציה הנוספת שטובה לנו היא תמיכה בסקריפטים מסוג Avisynth המאפשרים לנו לבצע Deinterlacing (ביטול "קצוות משוננים", אפקט לוואי הנוצר בקבצי וידאו רבים בעת תצוגה על מסכי מחשב LCD וכו' (בעלי סריקה פרוגרסיבית).

אחרי ההתקנה, הכנסו לתוכנה. חובה לבצע עדכון של כל הרכיבים לפני ההפעלה הראשונה (לוקח מס' דקות).
לאחר העדכון תתבקשו להוסיף פרופילים מותאמים מראש לקידוד וידאו ואודיו. הדרך הפשוטה היא לסמן את כולם ולבחור אח"כ, למבינים, ניתן לסמן רק את הפרופילים הרצויים לכם.
כאשר התוכנה נפתחת יש ללחוץ Tools ואז AVS Script Creator.
נפתח חלון חדש, בVideo Input יש לבחור בקובץ הוידאו שלכם.
נעבור ללשונית Filters ונלחץ Analyse. הפעולה לוקחת מס' דקות תלוי במהירות המחשב שלכם.
ביצוע ניתוח של הקובץ וידאו הוא הכרחי, התוכנה בודקת מה הסדר של השדות בוידאו שלכם, אתם יכולים לשנות לבד את ההגדרות שמתחת (Deinterlacing) אבל אם אתם לא יודעים ב100% תנו לתוכנה לבחור עבורכם.
יש לסמן V ליד Deinterlace ולבחור בYadif with bob
הפעולה הנ"ל מחלצת מכל50 שדות, 50 פריימים מלאים (ולא חצאי תמונה). מדובר על שיפור משמעותי באיכות התמונה בתצוגה על גבי טלוויזיות LCD ומסכי מחשב. עוד על ההבדל בין שדות לפריימים מלאים במאמר עתידי.
יש בתוכנה אופציות נוספות אך אני ממליץ לא לשנות אותם דרך התפריט אלא דרך הקוד (סקריפט). מה גם שכאשר משנים את הקוד ואח"כ הגדרות בתפריט, הקוד נמחק וחבל.



נעבור ללשונית Edit.
כעת הקוד מוצג לפנינו, אין צורך לשנות אותו יותר מדי. הוידאו שלנו מכיל עכשיו 50 תמונות בשניה.
צריך לשנות את הקצב חזרה ל25 או 24 (או פחות, אך התוצאה לא תהיה "זורמת" לעין) ונגיע לוידאו בהילוך איטי פי 2 מהמציאות. ניתן להוריד עוד את הקצב FPS כדי לקבל הילוך עוד יותר איטי אבל יש דרך טובה יותר לעשות זאת, על ידי אינטרפולציה, הוספה של פריימים מהונדסים גנטית נקרא להם. על כך בהמשך.
הפקודה לשינוי הFPS היא:
AssumeFPS(25)
שימו לב, הפקודה הזאת צריכה להיות אחרונה בקוד, כאשר התוכנה מבצעת אותו היא עוברת על הפקודות שורה שורה, והפקודה הזאת צריכה להתבצע אחרונה.

אני מאמין שגם תרצו לחתוך חלק מהסרטון ולבחור רק את החלק הרלוונטי, הסרטון בו השתמשתי הוא של גמר 100 מטרים גברים באליפות העולם בברלין, מתוך 3 דקות חתכתי רק את 10 השניות של הריצה. הפקודה היא:
trim(7392,7836,false)
כאשר המספרים מייצגים את מס' הפריים בו אני מתחיל את הבחירה ומס' הפריים בו אני מסיים. הפריימים לפני 7392 ימחקו וכמו כן הפריימים אחרי 7836. אתם יכולים להיעזר בכפתור התצוגה המקדימה "Preview AVS Script" כדי לדעת היכן לחתוך. יפתח לכם חלון חדש עם כפתורי ניווט.

כעת הקוד שלכם צריך להיראות כך:
AVISource("C:\YourVideo.avi")
Load_Stdcall_Plugin("C:\Program Files (x86)\megui\tools\yadif\yadif.dll")
Yadif(mode=1, order=1)
trim(7392,7836,false)
AssumeFPS(25)

אתם יכולים להפסיק כאן, עם וידאו בהילוך איטי פי 2 מהמציאות, ניתן ללחוץ Save ולדלג לשלב הקידוד.
אם אתם אוהבים קצת קוד, ורוצים לשפר עוד את התוצאות, תוכלו להגיע להילוך איטי בלתי מוגבל (זה למה הכותרת היא SlowMotion xN). אתם מוזמנים להמשיך לקרוא.

ניתן לשנות את הרוזולוציה של הוידאו ע"י הוספת הפקודה
LanczosResize(720,576)
המספרים מייצגים את הגובה והרוחב בפיקסלים.
עליכם לבחור ערכים שמתחלקים ב16, אחרת הפלאג לא יעבוד וגם יתכנו בעיות בשלב הקידוד
אני השתמשתי בקובץ HD שהוקלט משידור חי מבלרין בערוץ הרומני בFullHD 1080I. החלטתי להקטין את הרוזולוציה לSD כדי לקצר בזמן העיבוד (יש לי מחשב בן 4 שנים והוא מתחיל להזדקן).

כעת עלינו להוסיף פלאג אין חינמי חביב בשם MSU FRC, הוא בעצם מהנדס לנו פריימים חדשים בין הפריימים המקוריים על ידי שימוש באלגוריתם מתוכחם שמזהה תנועה (Motion Estimation).
להורדה לחצו כאן
יש לחלץ את הקבצים מהZIP לתיקיה כלשהי. כעת לחצו על Load Dll (...) ובחרו את הקובץ MSU_FRC.dll.
נוספה לנו שורה שמציינת את טעינת הפלאג אין.
השתמשו בפקודה הזו:
ConvertToYV12().MSU_FRC(8, "slow")
במקום 8 אתם יכולים להכניס כל מספר שלם אחר, בין כל 2 פריימים יתווספו 7 פריימים מהונדסים, כלומר, פי 8 יותר פריימים. slow יביא את התוצאות הטובות ביותר אך דורש כוח עיבוד רב, עדיף להישאר עליו, בכל מקרה התוצאות חביבות, עדיין מדובר באינטרפולציה ולא בפריימים שצולמו באמת.

עדכון: דצמבר 2009:
קיים פלאג חדש שעושה את אותו הדבר רק הרבה הרבה יותר טוב. הפלאג הישן עובד באינטרפולציה של בלוקים (קוביית פיקסלים בגודל 16x16) ובחדש נעשה שימוש באינטרפולציה לפי פיקסלים. זה הרבה הרבה יותר מדוייק, פחות תופעות לוואי (Artifacts9) וגם קצת יותר מהיר.
הורידו מכאן את הפלאג בשם Mvtolls2, חלצו מהZIP וטענו את הפלאג בדומה לקודם.
עליכם לרשום את הפקודות הבאות (השורה הראשונה לא נדרשת למי שכבר טען את הפלאג דרך הכפתור) :

loadplugin("C:\Program Files (x86)\AviSynth 2.5\plugins\mvtools2.dll")
super = MSuper(pel=2)
backward_vec = MAnalyse(super, overlap=4, isb = true, search=3)
forward_vec = MAnalyse(super, overlap=4, isb = false, search=3)
MFlowFps(super, backward_vec, forward_vec, num=3*FramerateNumerator(last), \   den=FramerateDenominator(last))
##end

הקוד שלכם צריך להיראות עכשיו ככה:
LoadPlugin("C:\plugins\MSU_FRC.dll")
AVISource("C:\YourVideo.avi")
Load_Stdcall_Plugin("C:\Program Files (x86)\megui\tools\yadif\yadif.dll")
Yadif(mode=1, order=1)
trim(7392,7836,false)
LanczosResize(720,576)
ConvertToYV12().MSU_FRC(8, "slow")
AssumeFPS(25)
##end
עליכם לשמור על הסדר הזה של הפקודות, קודם ביטול שזירה (Yadif Deinterlacing) אח"כ גזירה של קטע נבחר (Trim), אח"כ הקטנה במידת הצורך (LanczosResize) הורדת רוזולוציה לפני הפקודה שלוקחת כוח עיבוד רב (MSU FRC) ולבסוף איפוס מס' התמונות בשניה חזרה ל25.

סיימנו עם הקוד אחת ולתמיד, יש ללחוץ על Save, יפתח לכם חלון עם תצוגה מקדימה, ניתן לסגור אותו.

שלב אחרון - קידוד.
עליכם לבחור מקודד, ניתן לבחור XVID, הוא יעבוד על רוב נגני הDVD, אך אני ממליץ על X264.
ליד Encoding Settings בחרו xvid 2pass balanced או x264 DXVA SD Balanced.
לחצו Config.
ליד Mode סמנו V על Turbo (יקצר לכם מאוד את תהליך העיבוד)
Bitrate ניתן להשאיר על 1000.
לחצו OK ואז Enqeue (בחלק העליון של הVideo)
בעקבות ההאטה של הוידאו תהיה בעיה עם הסאונד, או שהוא יהיה לא מסונכרן לתמונה או שהוא יהיה מעוות כמו אצל אמנון לוי. ניתן לתקן את זה אבל הדבר מסובך ואמרנו כבר שלא חוזרים יותר לקוד. לכן נספק בסרטון אילם, או שתרצו להוסיף מוסיקת רקע. עדיך לעשות זאת עם התוכנה VirtualDub לאחר סיום הקידוד (רק אם קידדתם קובץ AVI XVID)
יש לעבור ללשונית Queue ואז ללחוץ Start. קחו לכן איזה שעה מנוחה עד שהפעולה תסתיים.

לסיום, תראו את יוסיין בולט שובר שיא עולם, 9.58 שניות! רגע, בעצם בסרטון הזה הוא נראה רץ הרבה יותר לאט... אולי בעצם לוקח לו 153 שניות?


זה הכל, תעלו את הסרטון ותראו לי איך יצא, בהצלחה!


אין תגובות:

הוסף רשומת תגובה