Amazon Elastic Transcoder

אורן מונדשיין | 05.06.2018
סקירת מקודד הווידאו האלסטי של אמזון

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

למקודד האלסטי יש ארבעה רכיבים:

משימות (Jobs)
תפקיד המשימה היא לבצע את פעולת ההמרה. כל משימה ממירה קובץ אחד לעד 30 פורמטים. לדוגמה אם רוצים להמיר קובץ מדיה לשישה פורמטים שונים, ניתן לבצע זאת תחת משימה אחת. כאשר יוצרים משימה, מציינים את שם הקובץ שרוצים להמיר, את השם של הקובץ המומר ועוד כמה פרמטרים. לכל פורמט יש את התבנית שלו (תצורה\Preset), אשר מכילה את הגדרות האודיו והווידאו שיש לעשות בהם שימוש.

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

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

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

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

הודעות (Notifications)
במידה ואנו חפצים בכך, המקודד האלסטי יכול לשלוח לנו הודעות באמצעות מוצר נוסף של אמזון בשם הודעות פשוטות (Amazon Simple Notification Service). למשל כאשר מתחיל קידוד, או מסתיים, או שיש הזהרות או שגיאות במהלך ביצוע הקידוד. הודעות אילו חוסכות מאיתנו לבדוק שוב ושוב האם תהליך הקידוד הסתיים. את ההודעות מגדירים כאשר יוצרים את הצינור.

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

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

כמה זה עולה?
התמחור של השירות פשוט מאוד, עבור סרט באיכות גבוה - 720p ומעלה המחיר הוא $0.030 לדקה, מתחת לזה המחיר הוא חצי, כלומר $0.015 לדקה, כאשר עבור קול בלבד המחיר הוא אפילו זול יותר, רק $0.0045 לדקה. בשביל מי שלא מקודד הרבה זה ממש מחיר מציאה, עבור מי שמקודד הרבה ורואה את אותם המחירים אצל המתחרים, חשוב להבין שכאן מקבלים תמורה טובה יותר ולא צריך לשלם פרימיום בשביל שדברים יעבדו לשביעות רצוננו.

חסרונות?
חשוב להבין שהשירות שזה הוא שירות ותיק לטוב ולרע. לא נמצא כאן תכונות מתקדמות כפי שניתן למצוא בשירות אחר של אמזון להמרת מדיה (AWS Elemental MediaConvert) כמו איכות אולטרה (UHD/4K), או צבעים מפורמטים יותר (HDR/HDR10), הגנה על הסרטים (DRM) אפילו לא מעברים כפולים על המדיה או אינסוף פילטרים מתקדמים. אם צריך את זה אז פשוט אפשר להשתמש בשירות החדש יותר, אבל אם לא אז היתרון של השירות הזה הוא בפשטות. הממשק פשוט, נקי וקל ללימוד ועושה בדיוק מה שצריך ברוב המקרים. למעשה באמזון לא צריך לבחור, אפשר להשתמש בשניהם ולשלם לפי השימוש בלבד.

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

כיצד המוצר עובד?
לאחר שהבנו מה נותן השירות, מה הוא לא נותן וכמה הוא עולה, בואו נעשה ניסוי קטן עם עשרה סרטים אופיינייים. לקחתי עשרה סרטים באורכים אופייניים של שלוש וחצי דקות עד רבע שעה, בגדלים של 400-1100 מגה, בפורמטים של MP4,MOV וברוחבי פס גבוהים מדי עבור האינטרנט שאותם רציתי לקודד לצורך הדוגמה לשלושה פורמטים מקובלים 1080p,720p,480p.

יצירת אחסון S3
תחילה יצרתי שלושה דליים (Buckets), אחד עבור הקבצים המקוריים שלי, אחד בשביל הווידאו שנוצר ע"י המקודד ועוד אחד עבור תמונות אצבע (Thumbnails) שלא עשיתי בו שימוש בדוגמה זו. בשביל הסדר הטוב ניתן ליצור בדלי מחיצות לכאורה ולהרגיש שיש לנו ספקיות ותת ספריות שמסייעות לנו לארגן את הקבצים, כדי לדעת שבפועל זה רק סמנטי וכל האובייקטים בדלי של S3 נמצאים בפועל באותה הספריה. כלומר להרגיש עם אבל בלי.

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

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

הגדרת משימה
במסך זה נבחר בצינור שהגדרנו שיופיע אוטומטית, ניתן לספק תחילית לקבצים שנוצרו, למשל שם ספריה (למרות שב-S3 אין באמת ספריות). יש לבחור בסרט שרוצים לקודד שיופיע כאופציה שנתחיל להקליד. יש לבחור בתצורה רצויה מתוך המבחר העשיר (במידה ואין ניתן להגדיר נוספים) וכמובן את שם הקובץ הרצוי, שאליו יתווסף ה-Prefix במידה ובחרנו בכך. זה מספיק על מנת ליצור משימת קידוד חדשה, נלחץ על Create New Job, המשימה תרוץ ותסתיים בעוד זמן קצר.

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

זמן הקידוד
ערכתי שלושה ניסיונות, עבור איכויות של 1080,720,480, להלן התוצאות:

זמן הקידוד באיכות 1080 עמד על כ-8 דקות בלבד לכולם, זמן הקידוד באיכות 720 עמד על כ-5 דקות בלבד לכולם, זמן הקידוד באיכות 480 עמד על כ-5 דקות בלבד לכולם.

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

טיפ, בזמן שקודדתי את עשרת הסרטים לפורמט 480p, באותו הזמן המקודד המתחרה עשה רק 15% מקובץ בודד, כלומר באופן יחסי המקודד האלסטי של אמזון מהיר מאוד מהמתחרים.

אינטגרציה
במידה ומעוניינים בספריות חמות או בפתרון מקצה לקצה ניתן לכתוב זאת באמצעות סל מוצרי הפיתוח העשיר בענן של אמזון או לחליפין להשתמש תבנית (AWS CloudFormation templates) שבונה פתרון קידוד שלם המ אוטומטית מקצה לקצה עבור וידאו לפי דרישה (Video on Demand on AWS) החל מהטענת חומרי הגלם (עם או בלי metadata), אם אפשרות לגיבוי קר של חומר הגלם (Amazon Glacier Archive), ניהול\מעקב באמצעות בסיס נתונים (Amazon Dynamodb), שליחת סטטוס בעזרת שירות ההודעות הפשוט (Amazon SNS topics) והגשה באמצעות ה-CDN של אמזון (Amazon CloudFront).

התהליך מבוסס על מיקרו שרותים מתקדמים (Amazon Step Functions/Lambda Function) וכמובן עושה שימוש מרכזי במקודד האלסטי או המקודד האלמנטרי (עם שינוי קל בארכיטקטורה).

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

{{footerStrings.span1}}  {{footerStrings.span2}} {{footerStrings.span3}}

{{footerStrings.btn}}