H.264/MPEG-4 AVC

H.264 הוא תקן לדחיסת וידאו. התקן מספק וידאו באיכות טובה ובקצב נתונים נמוך משמעותית (מחצית או פחות) ממה שדרשו תקנים קודמים לו. התקן הוגדר באופן פשוט מספיק כך שיישומו יהיה כלכלי מחד, ובעל גמישות שמאפשרת שימוש במגוון יישומים רחב. גמישותו של התקן מאפשרת לשדר וידאו בקצבי נתונים גבוהים או נמוכים, או איכות וידאו גבוהה או נמוכה, וגם יכולת לפעול תוך העברה דרך מגוון רחב של רשתות ומערכות. מגוון היישומים של התקן כולל בין השאר שידור וידאו דיגיטלי, אחסון DVD, תעבורת וידאו ברשתות RTP/IP ורשתות טלפוניית מולטימדיה של ITU-T. בתחילת 2013 הוכרז על תקן הדור הבא בשם H.265, אשר יוכל לקודד וידאו לקובץ קטן פי שניים מאשר התקן הקיים. התקן נכתב כמיזם משותף המכונה "צוות וידאו משותף" (JVT) שהקימה "קבוצת המומחים לקידוד וידאו" (VCEG) של ארגון התקינה ITU-T בשיתוף עם "קבוצת המומחים לתמונות נעות" (MPEG) של ארגון התקינה הבינלאומי (ISO). לעיתים מתייחסים אל התקן כאל "the JVT codec". טיוטת הגרסה הראשונה שלו הושלמה במאי 2003. מאז השלמת התקן המקורי במאי 2003 השלים ה־JVT סבב של תיקון טעויות ופיתח אוסף של כלים משלימים לתקן Fidelity Range Extensions (FRExt), המספקים פונקציונליות נוספת. סבבים נוספים של השלמות ותיקונים התבצעו עד שנת ב-2009 (גרסה מספר 13 של התקן). במקור, התקן זהה לחלק 10 של התקן MPEG-4 של ISO, וידוע גם בשם "קידוד וידאו מתקדם" - AVC. השם H.264 מתייחס לשלל תקני הווידאו של ITU-T המסומנים H.26x, בעוד שהשם AVC מתייחס לשורשיו של התקן ב־ISO/IEC MPEG. באופן רגיל יקרא התקן H.264/AVC או AVC/H.264 כדי להדגיש את מורשתו המשותפת, אך לעיתים נדירות יקרא התקן H.26L בהתייחס להיסטוריה שלו ב־ITU-T. ריבוי שמות זה אינו ללא תקדים, ולדוגמה בעבר זכה לכך התקן MPEG-2 (נקרא גם ITU-T H.262), שהיה אף הוא תוצאה של מאמץ משותף בין שני גופי תקינה אלו. H.264/AVC מאופיין על ידי מספר תכונות חדשות המאפשרות לו לדחוס וידאו ביעילות אלגוריתמית רבה יותר מאשר מקודדים אחרים, ולספק גמישות נוספת ליישומים למגוון רחב של סביבות רשת. ניתן לומר ש-H.264 הוא צאצא ישיר של H.263 ושל MPEG-4. התבוננות מעמיקה בתכונות של H.263+ ו־H.263++ מראה כי פרוטוקול דחיסה זה דומה יותר ל־H.263 מאשר ל־MPEG-4. תכונות חדשות שהוספו ל־H.264 אינן בהכרח יעילות ביחס לעוצמת החישוב הנדרשת. להלן מספר דוגמאות לתכונות אלו: ביצוע "פיצוי תנועה רב תמונתי" (Multi picture motion compensation) תוך שימוש בתמונות שקודדו קודם כהתייחסות, בצורה גמישה יותר מתקנים קודמים – בכך מאפשר התקן שימוש בעד 32 תמונות התייחסות (תקנים קודמים אשרו שימוש בתמונת התייחסות אחת, או אם נעשה שימוש ב־ B pictures – שתיים). תכונה זו מאפשרת בדרך כלל שיפור צנוע בקצב הנתונים ובאיכות התמונה, אך ישנם מספר תרחישים, למשל הבהוב חוזר ומהיר של תמונה, תנועות מצלמה הלוך-ושוב או אזורי רקע חשופים - בהם מתאפשר שיפור משמעותי בקצב הנתונים. ביצוע "פיצוי תנועה על סמך בלוק בגודל משתנה" (Variable block-size motion compensation) עם בלוקים בגדלים 16x16 ועד 4x4 המאפשר חלוקה מדויקת של אזורים נעים. חלוקה רבה מדי לתת-בלוקים עלולה להוביל לשליחת מידע מיותר, שכן המקודד נדרש לציין מספר גדול יותר של בלוקים ולכן מתמקדים מקודדי H.264 בבעיית הבחירה של החלוקה האופטימלית של בלוק 16X16. רמת הדיוק של פיצוי תנועה עד לרבע פיקסל המאפשרת תיאור מדויק של העתקת אזורים נעים. חיזוי ממושקל (Weighted prediction) מאפשר למקודד לציין שימוש בסילום (Scaling) וקיזוז (Offset) בעת ביצוע פיצוי תנועה ובכך לספק שיפור משמעותי בביצועים במקרים מסוימים כגון מעברי Fade out ו-Fade in או התפוגגות תמונה אחת לתוך תמונה אחרת (Dissolve). המקרים המוזכרים להלן הם אפקטים טלוויזיוניים הנפוצים בשימוש. מסנן חיבור מחדש של בלוקים (De-Blocking) שמסייע במניעת "צלצולים" ושאר הפרעות הנוצרות משימוש בבלוקים (Blocking) כשמשתמשים בדחיסת תמונה מבוססת DCT. "טרנספורמציית בלוקים" (4x4 Block Transform) של מספרים שלמים (דומה לזו שקיימת ב־DCT). ב־Fidelity Range Extensions המקודד יכול לבחור בין בלוקים של 4x4 ו 8x8 בטרנספורמציה. טרנספורמציית הדמר (Hadamard) המשנית מבוצעת על מקדמי ה־DC של הטרנספורמציה הראשית המרחבית (עבור מקדמי DC של צבע ובמקרה אחד גם של בהירות נראית – luma). כך משיגים דחיסה מוגברת במשטחים חלקים. חיזוי מרחבי לשולי הבלוקים לצורך קידוד "ביניים" (עדיף על פני חיזוי בעזרת DC בלבד שבשימוש ב־MPEG-2 וגם על פני חיזוי לפי מקדמי הטרנספורמציה כפי שתקן H.263+ וחלק 2 של MPEG-4 ממליצים). "קידוד בינארי חשבוני סתגלני ותלוי הקשר" (Context-adaptive binary arithmetic coding CABAC) שהוא טכניקה מתוחכמת לדחוס אלמנטים של תחביר בזרימת וידאו ללא אובדן מידע. "קידוד אורך משתנה סתגלני ותלוי הקשר" (Context-adaptive variable-length coding CAVLC) שהוא אלטרנטיבה פשוטה יותר ל־CABAC לקידוד מקדמי טרנספורמציית מנות. על אף פשטותה ביחס ל־CABAC, CAVLC משוכללת יותר ויעילה יותר משיטות אחרות לקידוד מקדים בתקנים קודמים. טכניקה פשוטה, נפוצה ומובנית מאוד לקידוד אורך משתנה לאלמנטים הרבים של תחביר שאינם מקודדים על ידי CABAC ו־CAVLC נקראת קוד "גולומב אקספוננציאלי". תכונות כגון אוסף פרמטרים של רצף (SPS) ואוסף פרמטרים של תמונה (PPS) המספקים עמידות וגמישות נוספות בהשוואה לתקנים קודמים. "פרוסות החלפה" (הנקראות פרוסות SP ו־SI) הן מאפיין המאפשר למקודד להפנות את המפענח "לקפוץ" לזרימת וידאו במהלכה. יש צורך בתכונה זו לשם התמודדות עם שינויים בקצב זרימת הביטים ופעולות "trick mode". כאשר מקודד קופץ לאמצע הסרט תוך שימוש בתכונת ה־SP/SI ניתן לקבל תמונה זהה בצד המפענח אפילו מתמונה שונה או בלי תמונה כלל כהתייחסות ללפני ההחלפה. סידור גמיש של מאקרו בלוקים (FMP – ידוע גם כקבוצת פרוסות) וסידור שרירותי של פרוסות (ASO) הם טכניקות לשחזור הסידור של ייצוגיי האזורים הבסיסיים בתמונה (הנקראים מאקרו בלוקים). על אף שתכונה זו משמשת להגברת העמידות של השידור לטעויות או אובדן מידע, ניתן להשתמש ב־FMO ו־ASO למטרות אחרות. שימוש בתכונה זו מאפשר יישום של הגנת שגיאות לא שווה (UEP) וסוגים אחרים של עמידות בפני טעויות אובדן מידע. פרוסות יתירות (RS) היא תכונה של עמידות בפני טעויות ואובדן מידע המאפשר למקודד לשלוח מידע נוסף על אזור בתמונה (בדרך כלל באיכות נמוכה יותר). במידע זה ייעשה שימוש אם המידע הראשי אבד/הושחת. תהליך פשוט ואוטומטי המונע את אמולציה בטעות של "קודי התחלה" (רצפי ביטים מיוחדים במידע המקודד המאפשרים גישה אקראית לתוך רצף הביטים וגם סנכרון ביטים במערכות שהדבר דרוש להן ויכולות לאבד אותו). לתוך זרם הביטים ניתן להוסיף מידע מסוג מידע מוגבר ומוסף (SEI) ומידע על שימושיות הווידאו (VUI) ובכך להגביר את השימוש בווידאו למגוון מטרות. תמונת עזר בה ניתן להשתמש למטרות כמו הרכבת "תערובת אלפא" (Alpha Blend Compositing). מספור מסגרות, מאפיין המאפשר את היווצרותם של תת-רצפים ובכך מאפשר סקלביליות לפי זמן על ידי הכללה אפשרית של תמונה בין שתי תמונות. בנוסף אנו יכולים לגלות כך אובדן תמונה (שיכול לקראת עקב אובדן מנות ברשת למשל). ספירת סדר התמונות, מאפשר שמירה על סידור תמונות והערכים הנדגמים במפענח. כך מתאפשר למידע תזמון להינשא ולערוך אותו בנפרד על ידי המערכת, מבלי להשפיע על תוכן התמונה המפוענחת. טכניקות אלו יחד עם אחרות עוזרות לתקן H.264 להיות בעל ביצועים טובים משמעותית מתקנים קודמים, תחת מגוון רחב של נסיבות ובמגוון רחב של סביבות יישומים. H.264 בעל ביצועים טובים בהרבה מאלו של MPEG-2 כאשר באופן אופייני הוא ישיג ביצועים זהים במחצית קצב הנתונים ואף פחות. "צוות הווידאו המשותף" (JVT) השלים תוספות לתקן המקורי הידועות בשם FRExt. תוספות אלו תומכות בקידוד ודאי נאמן יותר למקור באמצעות תמיכה בדיוק דגימה גדול יותר (כולל קידוד של 10 סיביות ושל 12 סיביות) ומידע צבע בהפרדה גבוהה יותר (כולל מבני דגימה הידועים כ־YUV 4:2:2 ו־YUV 4:4:4). מספר תכונות נוספות של תוספות אלו לתקן הן: מעבר סתגלני טרנספורמציות מספריות בין 4x4 ו 8x8, מטריצות משקלים למנות מבוססות תפיסה וייחודיות למקודד, קידוד בין תמונתי יעיל ללא אובדן מידע, תמיכה במרחבי צבע נוספים, וטרנספורמציית צבע שאריתי). העבודה על התוספות לתקן הושלמה בספטמבר 2004. H.264/AVC נמצא בשימוש רחב בוועידות וידאו כפי שניתן לפגוש במוצריהן של שתי חברות בולטות בענף (Polycom ו־Tandberg). התקן גם אומץ על ידי שני פורמטים הראשים ל־DVD המתחרים ביניהם (HD-DVD ו־Blu-ray). ארגון האירופאי לשידור וידאו דיגיטלי אישר לאחרונה את השימוש ב־H.264/AVC לשידורי טלוויזיה באירופה. מספר גופי שידור ביפן וקוריאה אישרו את תמיכתם בתקן הקידוד, והוא נמצא בבחינה לשידורים נוספים. למשל הוא נמצא בבחינה של גוף התקינה של הוועדה לשידורי טלוויזיה מתקדמים בארצות הברית. בעולם האלחוטי אומץ התקן כחלק מגרסה 6 של "פרויקט השותפות לדור השלישי" (3GPP). נכון ל-2005 מייצרות ארבע חברות שבבים המסוגלים לקודד H.264/AVC וידאו: BroadCom, Conexant, Sigma Designs ו-ST - Micro. שבבים אלו יאפשרו פריסה רחבה של התקנים זולים המסוגלים לנגן H.264/AVC וידאו ברזולוציה של טלוויזיה סטנדרטית ושל טלוויזיה ברזולוציה גבוהה. כמו תקני ISO/IEC MPEG אחרים, גם ל־H.264/AVC יישום לדוגמה שאותו ניתן להוריד חינם מאתר ISO. מטרתו העיקרית היא לתת דוגמה ליכולותיו של H.264/AVC ולא לשמש כיישום שלו. כמו בתקן MPEG-2 וחלק 2 של תקן MPEG-4, ספקי מוצרים של H.264/AVC נדרשים לשלם תמלוגים עבור שימוש ברכיבים שמשתמשים בפטנטים שהוצאו על התקן. המקור העיקרי לרישיונות לפטנטים הרלוונטיים לתקן זה הוא ארגון פרטי הידוע כ- MPEG-LA, LLC. ארגון זה אינו קשור ישירות לארגון התקינה MPEG, אך הוא מטפל מנהלית במאגר הרישיונות של תקן MPEG-2 וחלק 2 של תקן MPEG-4. פורמט HD-DVD תוכנן על ידי פורום ה־DVD, וכולל בתוכו את H.264/AVC כמאפיין חובה של נגני ה־DVD התואמים לפורמט זה. גם פורמט Blu-Ray Disc תוכנן בצורה דומה על ידי איגוד Blu-Ray Disc. מוצרים התואמים לפורמטים אלה הגיעו לשוק לראשונה ב-2005. DVB, גוף התקינה האירופי לשידורי וידאו דיגיטליים, אישר בסוף 2004 את השימוש ב־H.264/AVC עבור שידורי טלוויזיה באירופה. ATSC, גוף התקינה של הוועדה לטלוויזיה מתקדמת בארצות הברית, שוקל את השימוש בתקן H.264/AVC לשידורי טלוויזיה בארצות הברית. בקוריאה, השירות לשידורי מולטימדיה דיגיטלית (DMB) ישתמש ב־H.264/AVC. שדרנים גדולים ביפן הכריזו על תמיכה ב־H.264/AVC לחלק הנייד של שרותי שידור קרקעיים. פרויקט שותפות הדור השלישי (3GPP) אישר את הכללתו של H.264/AVC כמאפיין אופציונלי של גרסה 6 של ספציפיקציות טלפונית המולטימדיה הניידת שלו. מועצת התקן לדימות תנועה (MISB) של משרד ההגנה של ארצות הברית (DoD) אימצה את H.264/AVC לערוצים המסוגלים להעביר Bit Rate נמוך (למשל פחות מ־1Mbits/sec) ושוקלת את אימוצו של התקן לשימושים אחרים. כוח המשימה להנדסת האינטרנט (IETF) נמצא בשלבים אחרונים של העבודה על הגדרת פורמט "אריזת מטען במנות" לנשיאת וידאו H.264/AVC תוך שימוש בפרוטוקול RTP. מדור התקנים של ITU-T אימץ את H.264/AVC למפרט של קבוצת מערכות טלפוניית המולטימדיה שלו – H.32x. כמעט כל מוצרי ועידות הווידאו החדשים כוללים תמיכה ב־H.264/AVC, הבולטים מביניהם - Polycom ו-Tandberg. "קבוצת המומחים לקידוד וידאו" (MPEG) כללה תמיכה מלאה ב־H.264/AVC בתקן המערכות שלה (כלומר MPEG-2 ו־MPEG-4) וגם במפרט לפורמט קובצי המדיה בתצורת ISO שלה. חברת "אפל" עובדת על שילוב H.264 לתוך "טייגר", מערכת ההפעלה של מחשבי מקינטוש (Mac OS X 10.4). אפל שילבה את H.264/AVC ישירות לתוך "QuickTime", נגן המולטימדיה שלה. גם נגן האייפוד של אפל, בגרסה תומכת הווידאו שלו, מנגן וידאו בפורמט H.264, עם סיומת MP4. PSP, קונסולת המשחקים הניידת של סוני, כוללת מפענח חומרה לקובצי וידאו בפורמט H.264. חברת התוכנה Ahead שילבה מקודד H.264 לתוך תוכנת הצריבה המפורסמת שלה, Nero. x264 היא ספריית תוכנה חופשית עבור קידוד זרמי וידאו לפורמט H.264/MPEG-4 AVC, המופצת תחת התנאים של הרישיון הציבורי הכללי של גנו. הספרייה נכתבה כחלק ממיזם Videolan שבו נכתב גם נגן המדיה VLC, הנחשב לאחד המימושים הטובים ביותר של x264. בתחילת השימוש בתקן H.264 לא היה ניתן לכתוב תוכנה הממירה וידאו לתקן זה ללא תשלום גבוה לארגון התקינה עבור רישיון שימוש בתקן. כיום, לאחר פיתוח הספרייה היא זמינה לשימוש חופשי ובנוסף ל VLC משתמשים בה מגוון רחב של כלים ויישומים חופשיים לקידוד, המרת ופענוח וידאו, כגון FFmpeg ו-HandBrake. מדיה וקבצים בנושא H.264/MPEG-4 AVC בוויקישיתוף אתר האינטרנט הרשמי של H.264/MPEG-4 AVC (באנגלית, בספרדית ובצרפתית) למשל MPEG-2, H.263, שכבה 2 של MPEG-4