top of page
תמונת הסופר/תההנדסאי

איך עובדים סרטי DVD

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


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

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

מה אנחנו רואים? אנחנו רואים שתי תיקיות, AUDIO_TS ו-VIDEO_TS שנמצאות על הכונן. תיקיית AUDIO_TS קיימת בשביל פורמט אחר לשמירת אודיו על DVD (DVD-Audio) ולכן במקרה שלנו היא ריקה. בתיקיית VIDEO_TS יש קבצים שניתן לחלק ל-2 קטגוריות. קטגוריה אחת היא קבצי VMG, כלומר קבצים ששייכים ל-Video Manager.

מהו ה-Video Manager? כאשר מריצים דיסק עם סרט על DVD Player, אנחנו נתקלים במעין Menu שדרכו אנחנו יכולים לבחור לצפות בסרט מההתחלה, להתחיל את הסרט מפרק ספציפי, לבחור שפת כתוביות וכו'. בסרט "שרק 2", לדוגמה, ה-Menu נראה כך:


הקובץ הראשון שה-player מריץ הוא VIDEO_TS.IFO. בקובץ זה שמור מידע כללי אודות אופן ההרצה של כל הפרקים בסרט, ובפרט שמור בו סט של פקודות עבור First Play. מה זה אומר? את כל הפורמט של DVD-Video אפשר לחלק באופן גס ל-2 סוגי מידע: פקודות שונות שה-player צריך להריץ, ומידע אודות "התמונות הזזות", המוזיקה, הכתוביות וכיו"ב, שעליהם צריך להריץ את הפקודות. סט הפקודות First Play, כשמו כן הוא, רץ ראשון על ידי ה-player ומקשר אותו אל הפקודות שמריצות את ה-menu (וכמובן לפני כן הודעה על זכויות יוצרים על הסרט). בקובץ ה-VOB ששייך ל-menu שמור אותו המידע על איך שצריך להציג את ה-menu, ופקודות ל-player על איך שצריך להריץ אותם.


הקטגוריה השנייה של הקבצים היא VTS, כלומר Video Title Set, ושם מאוחסנים הפרקים עצמם של הסרט, כך שכל VTS הוא פרק נפרד. המספר הראשון בשם הקבצים, לדוגמה VTS_01_ או VTS_02_ מסמל את המספר הסידורי של הפרק. יש לכל פרק קובץ IFO, שמטרתו לתת הגדרות כלליות להרצת הפרק. לכל פרק יכול להיות גם menu משל עצמו (אך לא חובה), והוא מאוחסן בקובץ .VOB שהמספר השני שלו הוא 0. כל שאר קבצי ה-.VOB שייכים לסרט עצמו של הפרק, כך שכל פרק גדול מאוחסן בכמה קבצים קטנים יותר שלכל אחד מספר שונה.

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

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


לכן, מחלקים את התמונות ל-3 סוגים. סוג אחד הוא I-frame, וסוג זה מייצג תמונה אחת שלמה. סוג אחר הוא P-frame, שהוא לא תמונה שלמה – הוא שומר רק את ההבדלים שיש לבצע יחסית לתמונה הקודמת. בתרשים למעלה ניתן לראות כי ההבדלים בין התמונה השנייה משמאל לראשונה הם רק במיקום של הכדורים שפקמן בולע. לכן, אנחנו יכולים לאחסן רק את ההבדלים האלה ולא תמונה שלמה, ונחסוך במקום.

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

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

Comments


bottom of page