אתרים כדוגמת YouTube מאפשרים אחסון של מאות מיליוני שעות של תוכן וידאו (בדרגות שונות של איכויות טכניות ואומנותית), ולפי האתר מעל 4 מיליארד סרטונים נצפים בו בכל יום. סרטונים מסוימים מגיעים למאות מיליוני (ולמיליארדי) צפיות. צוואר הבקבוק של העברת הוידאו היא הנפח העצום של המידע. לדוגמה הסרטון Gangnam Style של האומן הקוריאני PSY, נוצר בצבע (3 Bytes per pixel), ברזולוצית HD (1920×1080=2.1MPixel), 30 תמונות בשנייה ואורך הקליפ 253 שניות. בסה”כ מעל 40GByte של וידאו גולמי. אם ניקח בחשבון שסרטון זה, נצפה מעל מיליארד פעמים, נגיע לכמויות אדירות של חבילות מידע שעברו מסביב לעולם והיו עלולות להפיל את רשת האינטרנט, אלמלא באה לעזרתנו הטכנולוגיה של קידוד (“דחיסה עם עיוות”) הוידאו. בעיה נוספת היא זמן ההמתנה. עבור מחשב ביתי עם חיבור לאינטרנט במהירות של (10Mbps (1.25MByte/s, ללא טכנולוגיה של קידוד וידאו, הסרטון היה דורש זמן הורדה של כ-9 שעות. על מנת לראות את הסרטון בזמן אמת עלינו לממש קידוד המקטין את נפח המידע בשני סדרי גודל (!).
קידוד וידאו
המבנה הכללי של מערכות לקידוד וידאו מתואר בציור 1. המטרה היא העברה של אות וידאו מן המקור, דרך ערוץ תקשורת, אל היעד. ערוץ התקשורת מסוגל להעביר נתונים ממקום גיאוגרפי אחד לשני (לדוגמה ערוץ סלולרי) או לשמור נתונים מזמן אחד לזמן מאוחר יותר (לדוגמה, אחסון בזיכרון Flash).
כאמור, אות הוידאו המקורי תופס נפח רב ולכן יש צורך בצמצום משמעותי של הנפח שלו. הצמצום נעשה תוך שימוש בטכנולוגיות קידוד הכוללות עיוות, ולכן האות המשוחזר שונה מן האות המקורי. השיפוט על איכות הקידוד נעשה באמצעים סובייקטיים ואובייקטיביים. ברור כי קיים Tradeoff בין יחס הקידוד לאיכות האות המתקבל. השוואה בין תקנים לקידוד וידאו חייבת לכן להיות על בסיס משותף – ניתן להשוות את איכות האות המתקבל בקצב מידע דחוס שווה, או להשוות את קצב המידע הדחוס באיכות וידאו שווה.
פרמטרים נוספים אותם יש לקחת בחשבון הם ההשהייה הנובעת מן הקידוד והמאמץ החישובי הנדרש. באופן כללי המקודד (Encoder) הוא מסובך יותר ודורש מאמץ חישובי גדול יותר מאשר המפענח (Decoder).
מפאת חוסר מקום לא נדון במאמר קצר זה בכל הפרטים הקשורים לקידוד, ונציג רק עקרונות עיקריים. כמו כן לא נעסוק בנושא קידוד ערוץ השמע בוידאו והסינכרון בין אות השמע לתמונה.
תקנים לקידוד וידאו
בצורה גסה ניתן לחלק את יישומי הוידאו לשתי משפחות – יישומי צפייה ויישומי אינטרקאציה. המשפחה הראשונה, הכוללת אתרי אינטרנט לצפייה בוידאו, מערכות כבלים ולווין, בתי קולנוע וכדומה מאופיינת בערוץ וידאו חד כיווני. המשפחה השנייה של יישומים מיועדת לתקשורת דו-כיוונית כמו Video Conferencing או שיחות וידאו כדוגמת תוכנת Skype.
משפחת יישומי הצפייה מאופיינת בחוסר סימטריה של הצדדים. הצד המקודד הוא מחשב מקצועי חזק והצד המפענח הוא מערכת ביתית זולה. ביישומים אלו מקובל להניח כי השהייה של מספר שניות, איננה מפריעה. משפחת מקודדי הוידאו בשם MPEG – Motion Picture Expert Group של גוף התקינה ISO/IEC פותחה למשפחת יישומים זו.
משפחת היישומים האינטראקטיבית מאופיינת בתקשורת בין צדדים סימטריים מבחינת יכולת החישוב. ביישומים כאלו, ההשהייה היא גורם קריטי לאיכות השירות. מקובל להניח כי השהיית קידוד של כ-200mS לכל כיוון היא השהייה קבילה. משפחת מקודדי הוידאו בשם H.26n של גוף התקינה ITU עונה למשפחת יישומים זו.
כאמור, מאז תחילת שנות ה-1990, קיים מאמץ מתמשך לפיתוח אלגורתמים ותקנים לקידוד וידאו. אבני הדרך הראשונות במאמץ זה הן התקן לשיחות וידאו H.261 משנת 1991 ותקן MPEG-I משנת 1993. ה-MPEG-I ידוע גם בשם Video CD וסיפק איכות השקולה לקלטות וידאו VHS (אבחנה של כ-250 שורות) ובקצב ביטים של 1.5Mbps.
תקן ה-MPEG-2 משנת 1994 מומש בהרחבה במערכות כבלים ולווין ובדיסקים מסוג DVD. ה-MPEG-2 הציע איכות גבוהה יותר (אבחנה של כ-500 שורות) בקצב של כ-10Mbps.
תקן H.264/Advanced Video Coding משנת 2003 מאפשר העברה של וידאו באיכות דומה ל-MPEG 2 אך בקצב של כחצי כמות הביטים בערוץ לאיכות וידאו דומה. מערכת העידן+ בישראל פועלת בטכנולוגיה זו. באיכויות גבוהות יותר, מרבית נגני ה-Blue Ray המציגים סרטי High Definition (אבחנה של כ-1000 שורות) תומכים ב-H.264. בתוכן של HD נדרש קצב של כ-35Mbps.
משנת 2003 ועד היום (ינואר 2013) אלו עברו כעשר שנים של התפתחות טכנולוגית. בנוסף עלו בשנים האחרונות דרישות לשידור באבחנה גבוהה מ-HD ברזולוציות של 4000×2000 ואפילו 8000×4000 פיקסלים. טכנולוגיות נוספות הן אפליקציות Multi-View כדוגמת תוכן תלת מימד. אתגר נוסף הוא הצריכה של תוכן וידאו באיכות גבוהה בטלפונים חכמים ומחשבי טאבלט על גבי רשת מקומית ורשת סלולרית. הדור הבא של תקן וידאו אמור להתפרסם סופית בינואר 2013 וייקרא H.265 High Efficiency Video Coding וגם MPEG-H Part 2. התקן החדש מאפשר ירידה נוספת של 50% בנפח המידע המקודד בערוץ לאיכות נתונה (רבע מכמות המידע הדחוס יחסית ל-MPEG-2).
חשוב לציין כי התקנים לקידוד וידאו מכתיבים רק חלק מן המערכת שבציור 1. התקנים מכתיבים את ה-Syntax של הוידאו הדחוס ואת מבנה המפענח. התקנים כלל אינם מכתיבים את מבנה המקודד פרט לכך כי עליו להפיק רצף מידע שעונה על כללי ה-Syntax. בכך משאיר התקן חופש ליצרנים לקבוע את מבנה המקודד על סמך החומרה שברשותם. הלקח החשוב מנושא זה הוא שלא כל מקודדי הוידאו נולדו שווים אפילו אם הם פועלים תחת אותו תקן בדיוק. יצרן אחד יכול להציע מקודד H.264 פשוט באיכות וידאו נמוכה וביחס דחיסה גרוע ויצרן אחר יציע מקודד מתוחכם אשר יציג ביצועים טובים יותר גם בנושא האיכות וגם בנושא הדחיסה. המשותף לשני היצרנים הוא שמפענח התואם לתקן יוכל להציג את שניהם.
מקודד וידאו היברידי
בצורה פשטנית ניתן לתאר כל אחד ממקודדי הוידאו לדורותיהם כמערכת בת שלושה שלבים המתוארת בציור 2.
בשלב הראשון, Temporal redundancy, המקודד מאתר מידע בר-דחיסה (ולכן “מיותר”) בדמיון בין תמונות ברצף הוידאו. לדוגמה, אם פרט מסוים קיים ברצף התמונות, אין צורך לשדר אותו בכל תמונה מחדש, אלא רק את מידע התנועה שלו בין התמונות (Motion compensation). פעולה זו נקראת Inter prediction.
בשלב השני, Spatial redundancy, המקודד מאתר מידע בר דחיסה בתוך התמונה עצמה. לדוגמה איזורים בעלי טקסטורה אחידה (שמיים לדוגמה) ניתן לתאר ע”י שכפול של איזורים בתמונה. פעולה זו נקראת Intra prediction. מהיכרות מערכת הראיה האנושית, ידוע כי היא רגישה פחות לפרטים העדינים (“תדר מרחבי גבוה”) בתמונה. המקודד מנצל תכונה זו ומקטין את כמות המידע הקשורה לתדרים הגבוהים (מעין Low Pass filter).
בשלב השלישי, Entropy redundancy, המקודד מאתר תבניות חוזרות במידע המתקבל משני השלבים הקודמים. איתור תבניות כאלה מאפשר צמצום נוסף בכמות המידע בוידאו הדחוס.
בצורה סכימטית ניתן לחלק את צורת קידוד התמונות ברצף הוידאו לשלושה סוגים: תמונות I-Intra, תמונות P-Predicted ותמונות B-Bidirectional Prediction.
קידוד תמונות בגישת I מתבסס על מידע הקיים בתמונה עצמה בלבד, ללא שימוש בתמונות אחרות ברצף התמונות בוידאו. מכיוון שנעשה דילוג על שלב ה-Temporal prediction הרי שיש לצפות כי הדחיסה של תמונות I תהיה מתונה והתמונה תדרוש נפח גדול יחסית במידע הדחוס. תמונות I תופענה כאשר אין מידע רלוונטי מתמונות אחרות (למשל אחרי Scene cut ברצף התמונות). אחת למספר תמונות, נהוג להכניס לרצף הדחוס תמונת I על מנת לאפשר גישה אקראית לזמנים שונים בסרט (אחרת היה צורך לצפות בסרט מתחילתו).
קידוד תמונות בגישת P מבוסס על שימוש במידע מן התמונה ומתמונות שהופיעו לפניה ברצף הוידאו (“תמונות עבר”). שימוש בתמונות העבר דורש שימוש בזיכרון לשמירת תמונות העבר ומנגנון לאיתור ושימוש במידע חופף בין התמונות.
קידוד תמונות בגישת B מבוסס על שימוש במידע מן התמונה ומתמונות שהופיע גם לפניה וגם אחריה (“תמונות עתיד”) ברצף הוידאו. שימוש בתמונות מן העתיד משפר אמנם את ביצועי הדחיסה של הוידאו, אך גורם להשהייה אינהרנטית בתהליך הקידוד. ההשהייה נובעת מכך שלא ניתן לקודד תמונת B לפני תמונת עתיד המכילה מידע הדרוש לקידוד B. הקידוד, ובהתאם המידע בערוץ, נעשה בסדר coding order השונה מן הסדר הכרונולוגי של התמונות display order.
ייצוג צבע וחלוקת התמונה לבלוקים
תקנים קודמים ל-H.265 לקחו בחשבון כי התמונה עשויה להיות נדגמת בצורה רציפה (Progressive scan) או בשורות זוגיות ואי זוגיות לסירוגין (Interlaced scan). בשנים האחרונות, מרבית התצוגות פעולות בסריקת Progressive ולכן בתקן החדש אין תמיכה מפורשת לסריקת Interlaced.
אות הוידאו נדגם לרוב במרחב צבע עם שלושה צבעי יסוד – Red, Green, Blue. מתברר כי קידוד מידע תוך שימוש במרחב צבע אחר הנקרא Y,Cr,Cb מתאים יותר למערכת הראיה האנושית. קיימת התמרה לינארית פשוטה למעבר בין שני מרחבי הצבע. המידע המסומן (Y (Luma מכיל מידע על עוצמת הבהירות בתמונה – בדומה לאות המשודר בטלוויזיה מונוכרומטית (“שחור-לבן”). מעניין לציין כי המידע מן הצבע הירוק הוא המידע הדומיננטי באות Y. שני האותות האחרים מכילים את מידע הצבע (Chroma) כאשר המידע מן הצבע האדום הוא הדומיננטי באות Cr והצבע הכחול הוא הדומיננטי באות Cb. ידוע כי מערכת הראיה האנושית מבחינה בשינויים באות ה-Luma טוב יותר מאשר שינויים באותות ה-Chroma. במרבית השימושים, קצב הדגימה, ובהתאמה כמות הפיקסלים, עבור שני אותות ה-Chroma נמוך פי שניים בכל כיוון – גם בכיוון השורות וגם בכיוון העמודות. מכאן שלכל ריבוע של 2×2 פיקסלים באות Y מקודד רק פיקסל אחד של מידע עבור Cr ופיקסל אחד של מידע Cb. פורמט זה מוכר בשם 4:2:0. בהמשך נתייחס רק לבלוקים מסוג Luma בגודל LxL (L זוגי). יש לזכור כי בהתאמה קיים שני בלוקים מסוג Chroma בגודל L/2xL/2 כל אחד.
תמונה המגיעה לקידוד מחולקת ע”י המקודד לבלוקים. בתקנים קודמים, החלוקה היתה לבלוקים קבועים בשם Macro-blocks בגודל 16×16 פיקסלים מסוג Luma (ובהתאמה שני בלוקים בגודל 8×8 מסוג Chroma). בתקן H.265 החלוקה היא גמישה יותר ומאפשרת בלוקים הנקראים CTB – Coding Tree Blocks והם בגדלים של 16×16,32×32,64×64. הבלוק מחולק בהמשך לתתי בלוקים במבנה עץ כמתואר בציור 3. החלוקה נעשית במבנה עץ בבסיס 4 (Quadtree) כאשר רק בלוקים עם Split Flag=1 מחולקים הלאה.
ציור 3 ניתן לראות כי הבלוק הראשי בגודל 64×64 חולק לארבעה תתי בלוקים בגודל 32×32. מתוך ארבעת הבלוקים, רק השני חולק לארבעה ריבועים בגודל 16×16 ומהם האחרון חולק לארבעה ריבועים בני 8×8 כל אחד. המבנה המלא מופיע בצד שמאל. השימוש בבלוקים בגדלים שונים מאפשר דחיסה טובה של מידע עבור איזורים “גדולים” בתמונה ומצד שני אמינות טובה עבור איזורים עם פרטים רבים.
קיזוז תנועה
בתמונות המקודדות בגישתP או B קיים מנגנון, המתואר בציור 4, אשר מנצל את הדמיון בין פרטים בתמונות (Temporal redundancy) מתוך רצף הוידאו. המנגנון מאפשר לשערך את ערך הפיקסלים בבלוק מסוים (Target) ע”י העתקה של בלוק מתמונה שקודדה בעבר (Buffered). חשוב להדגיש כי תמונה שקודדה בעבר לפי coding order עשויה להיות תמונה עתידית לפי Display order.
מנגנון הקיזוז מאפשר שליחה של וקטור תנועה (Motion vector) אחד לכל בלוק. הוקטור מתואר סכימטית ע”י חץ בציור 4. בתקן H.265 המנגנון דומה מאד לתקנים הקודמים פרט לכמה ניואנסים. מנגנון הקיזוז פועל בדיוק של רבע פיקסל ומסוגל לטפל בבלוקים בגדלים שונים בין 4×4 ועד 64×64 פיקסלים.כאשר נדרש ערך של פיקסל במיקום שאיננו מתיישב עם פיקסל מקורי (מיקום בתת פיקסל) הערך מחושב ע”י מסנן אינטרפולציה מסוג FIR בן 7 או 8 מקדמים. חשוב לציין כי מנגנון חישוב וקטורי התנועה (Motion vector estimation) הוא החלק הכבד ביותר מבחינה חישובית באלגוריתם קידוד הוידאו וכי הוא קיים במקודד בלבד.
העתקה בתוך תמונה
הדרך הראשונה האפשרית לניצול יתירות בתוך התמונה (Spatial redundancy) היא שכפול של איזור אחד בתמונה לאיזור אחר, בעיקר באיזורים בהם קיימת טקסטורה אחידה. ההעתקה של מידע בתוך התמונה נקראת Intra prediction. בהשוואה לתקן H.264 בו היו 8 אופנים אפשריים של Intra prediction, הרי שהתקן החדש מאפשר 35 אופני שכפול. כל אופן מגדיר זווית בה יש להזיז את הבלוק בתמונה על מנת ליצור בלוק חדש, כאשר דיוק של תת-פיקסל משמעו חישוב ע”י אינטרפולציה. בציור 5 מתוארת השוואה בין הכיוונים המוגדרים ב-H.265 לעומת אלו המותרים ב-H.264.
ציור 4 – קיזוז תנועה
התמרות וקוונטיזציה
הדרך השנייה לניצול יתירות בתוך התמונה היא ע”י שימוש בטרנספורמציות מתחום התמונה לתחום התדר המרחבי. תקן H.265 מאפשר ספריה עשירה של טרנספורמים מבוססי התמרת Discrete Cosine Transform בגדלים של 4×4,8×8,16×16,32×32 וכן התמרה מבוססת Discrete Sine Transform בגודל 4×4. לאחר המעבר לתחום התדר, עוברי המקדמים קוונטיזציה, כאשר מקדמים בתדר נמוך עוברים קוונטיזציה עדינה יותר בהשוואה למקדמים של תדר גבוה. בצורה זו המקודד מסלק מן האות תדרים גבוהים שאינם נראים ע”י מערכת הראיה האנושית. ניתן לשלוט על הקווניטזציה כך שקוונטיזציה עדינה תיתן אות וידאו איכותי עם נפח מידע גדול יותר בערוץ. קוונטיזציה גסה תשמש שידור דחוס בצורה חזקה על חשבון האיכות.
דחיסת אנטרופיה
השלב האחרון משמש למיצוי Entropy redundancy ומנצל את שאריות המידע העודף ע”י איתור תבניות חוזרות במידע שנדחס ע”י שני השלבים הקודמים. הדחיסה נעשית בשיטה הנקראת Context Adaptive Binary Arithmetic Coding והיא דומה מאד לזו שמומשה ב-H.264.
סיכום
במאמר קצר זה הבאנו, על קצה המזלג, את העקרונות של קידוד אותות וידאו ומקצת החידושים של התקן החדש H.265. הקורא הסקרן המעונין להתעמק בנושא מוזמן לקרוא מתוך החומר הרב הקיים באינטרנט ובתקן עצמו עם פרסומו.