ב-Online
 
 
 
 
 
 
 
לפרק את הבייט 
איך מכווצים וידאו? 
 
  צילום: Video Animal Weblog    
לפרק את הבייט |
 

איך דוחסים סרט באורך שעה וחצי ל-CD בנפח 700MB? השבוע ב"לפרק את הבייט", עידו גנדל מסביר איך פועלת דחיסת וידאו

 
 
 
 
 
 
 
 
 
 
 
במדור הזה כבר דיברנו פעם או פעמיים על נושא כיווץ הנתונים, אך הפעם נתמקד בסוג כיווץ נפוץ ושימושי במיוחד – כיווץ וידאו. כידוע, וידאו הוא בסך הכל רצף של תמונות נפרדות שמוקרנות במהירות זו אחר זו, ויש אלגוריתמים מצוינים לכיווץ תמונה, אבל אפילו הם לא מספיק טובים בשביל כמות המידע העצומה שקטע וידאו גולמי מכיל.
 
ניקח לדוגמה את רזולוציית ה-VGA הצנועה והמוכרת, 640x480. ללא שום כיווץ, תמונה אחת ברזולוציה כזו מכילה 307,200 פיקסלים, וכל אחד מהם דורש 3 בתים לצבע מלא – בסך הכל, קרוב למגהבייט אחד. כיווץ תמונה חזק יכול לצמצם תמונה שכזו פי שלושים בערך ועדיין לשמור על איכות סבירה, אך וידאו – למשל בשידורי טלוויזיה – מוצג במהירות של עשרים וחמש תמונות לשניה, כך ששניה אחת בלבד של וידאו יכולה להתקרב שוב לקו המגהבייט, וסרט באורך מלא של שעה וחצי עלול לתפוס למעלה מארבעה וחצי ג'יגהבייט. בפועל, אנו יודעים שאפשר לדחוס סרט כזה באיכות סבירה גם לתקליטור של 700 מגהבייט. אז איך עושים את זה?
 
 

הבדל ומשול

כדי להדגים, ניקח שני פריימים סמוכים מהקדימון לסרט איירון מן (תמונות 1 ו-2 באיור למטה). אם "נלביש" אותם זה על זה (3), נוכל לראות את ההבדלים העיקריים בין שתי התמונות הנפרדות: המטוס מימין ופסגות ההרים עלו קצת למעלה, ואיירון מן עצמו הסתובב כמעט בתשעים מעלות. בתמונה 4 סומנו באדום האזורים שבהם התחוללו שינויים משמעותיים. קל לראות שהשטח הכולל שלהם הוא פחות מחצי משטח התמונה כולה, ואילו היינו משנים רק אותם בין פריים 1 ל-2 ומקרינים את התוצאה במהירות טבעית, העין לא הייתה שמה לב להבדל.
 
הבדלים בין פריימים סמוכים בוידאו (תמונות: Youtube; עיבוד: עידו גנדל)
 הבדלים בין פריימים סמוכים בוידאו (תמונות: Youtube; עיבוד: עידו גנדל) 
 
זהו העיקרון החשוב ביותר בכיווץ וידאו: לחלק את התמונה לאיזורים, ולשמור רק את המידע אודות האיזורים שהשתנו בין פריים לפריים. החלוקה לאיזורים יכולה להיעשות בכמה אופנים: ריבועים בגודל קבוע (נניח 8x8 פיקסלים), מלבנים בגודל משתנה ועוד. בנוסף, אפשר לקבוע רמת רגישות לשינויים: אם פיקסל אחד בלבד בתוך אזור מסוים הפך לבהיר יותר בשני אחוזים, זהו הבדל חסר משמעות ואפשר להתייחס לכך כאילו אותו אזור לא השתנה כלל. קובץ הווידאו יתחיל בפריים מלא מכווץ כתמונה, ולאחר מכן יישמרו בו האזורים שהשתנו בין הפריים הראשון לשני, בין השני לשלישי וכן הלאה. עם הזמן מצטברות טעויות בסרט (בעיקר אם הרגישות לשינויים נמוכה), ולכן "נשתלים" בקובץ מדי פעם פריימים מלאים טריים שמטרתם לסנכרן מחדש את התמונה.

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

ליתר דיוק

החלוקה של התמונה לאזורים, בשילוב עם הכיווץ מאבד-המידע של התמונה, יוצרים אפקט של "בלוקים" עם גבולות ברורים ולא-טבעיים ביניהם. אם תסתכלו פעם בתשומת לב על אזורים חשוכים בקטעי וידאו באיכות בינונית (למשל, רוב הקטעים ביוטיוב, או בווידאו שצולם במצלמה סלולרית) תוכלו לראות את הבלוקים הללו. כדי לצמצם את האפקט הזה, האלגוריתם המפענח מפעיל – בנוסף על שחזור המידע – גם מסנן שמבצע "Deblocking", כלומר מטשטש את הגבולות בין הבלוקים.

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

באיזה צבע אתה רוצה את הפס כסף?

קיימות טכניקות נוספות לחיסכון במקום בעת כיווץ וידאו. כידוע, פורמט כיווץ הצליל MP3 פועל בין השאר על ידי התעלמות מצלילים שאוזן אנושית לא מסוגלת לשמוע. בכיווץ וידאו קיימת טכניקה דומה שמתעלמת מהבדלי צבע שהעין האנושית לא מסוגלת לראות. מסיבות פיזיולוגיות, העין שלנו מסוגלת להבחין בהבדלים דקים מאד בבהירות של אובייקטים, אבל היא הרבה פחות רגישה להבדלים בצבעים. באיור הבא מוצגים ארבעה מרובעים צבעוניים ששונים זה מזה בבהירות (למעלה) או בגוון (למטה). ההפרשים בין המרובעים מקבילים מבחינת עוצמת השינוי, אך קל לנו יותר להבחין בשינוי הבהירות לעומת שינוי הגוון. זו גם הזדמנות לבחון את איכות המסך שלכם.
 
קל יותר להבחין בהבדלים בבהירות לעומת הבדלים בגוון (איור: עידו גנדל)
 קל יותר להבחין בהבדלים בבהירות לעומת הבדלים בגוון (איור: עידו גנדל) 
 
הצבעים במחשב מוגדרים אמנם ככמויות של אדום, ירוק וכחול, אך ניתן להגדיר אותם גם כשילוב של גוון (Hue), רוויה (Saturation) ובהירות (Luminance). כל אחד משלושת הפרמטרים האלה תופס בית אחד, אבל בהסתמך על חוסר הרגישות של העין, לא יקרה כלום אם נשתמש בקצת פחות ביטים כדי לקודד את הגוון והרוויה שמגדירים את הצבע. לצורך הדוגמה בלבד, אם נצליח לחסוך בדרך זו ולו ביט יחיד מכל פיקסל בתמונה, מייד נגיע לחיסכון של K37.5 מכל פריים גולמי – שווה ערך לפריים מכווץ שלם. תהליך הכיווץ הזה נקרא Chroma subsampling.

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

(תודה לעמית מרגלית על הסיוע)
 
 
 
@@@@@@@@@@@@@@@@@@@ ilan @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
@@@@@@@@@@@@@@@@@@@ ilan @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 
תגובות
הוסף תגובה0 תגובות
הוספת תגובה
מאת
 
נושא
 
תוכן
 
 
 
 
תודה! תגובתך התקבלה.
התגובה תתפרסם בכפוף לתנאי האתר.
 
 
 
 
 

כל הזכויות שמורות 2011 © נענע 10 בע"מ
 
 
 
 
כל הזכויות שמורות © Nana10 בע"מ
Video powered by