מיפויים של סטרימינג

‫Transcoder API מאפשר לכם לשרשר סרטונים, לערבב טראקים של אודיו ועוד. מפרט ה-JSON של JobConfig הוא גמיש מאוד, ולכן יכולה להיות אי-בהירות בין נתוני הקלט לנתוני הפלט. כדי לפתור את הבעיה הזו, אפשר להגדיר מיפויים מסוימים של שידורים. אם לא תעשו זאת, ה-API יספק לכם מיפויי ברירת מחדל סבירים של הסטרימינג.

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

רקע

הרשימה inputs בקובץ JobConfig מציינת אילו קבצים להוריד, ולא איך להשתמש בהם. כל קלט משויך למפתח שמזהה אותו.

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

מידע נוסף מופיע בקטע מושגים שבסקירה הכללית.

מיפוי ברירת מחדל של סרטונים

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

ההגדרה הבאה משרשרת את 5 השניות הראשונות של טראק הווידאו input0.mp4 עם 10 שניות של טראק הווידאו input1.mov לקובץ הפלט:

"inputs": [
  {
    "key": "input0",
    "uri": "gs://my-bucket/input0.mp4"
  },
  {
    "key": "input1",
    "uri": "gs://my-bucket/input1.mov"
  }
],
"editList": [
  {
    "key": "atom0",
    "inputs": ["input0"],
    "endTimeOffset": "5s",
    "startTimeOffset": "0s"
  },
  {
    "key": "atom1",
    "inputs": ["input1"],
    "endTimeOffset": "20s",
    "startTimeOffset": "10s"
  }
]

מידע נוסף זמין במאמר בנושא צירוף של כמה סרטוני קלט.

מיפוי אודיו שמוגדר כברירת מחדל

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

שרשור של כמה קלטים

כל אטום ב-editList חייב להפנות לפחות לקלט אחד שמכיל טראק אודיו, אם מוגדר audioStream. אם מוגדרים כמה קלטים לאטום וכל אחד מהם מכיל טראק אודיו, הקלט הראשון ברשימה inputs משמש כמקור האודיו. זו המיפוי שמוגדר כברירת מחדל. אם אף אחד מהקלטות לא מכיל טראק אודיו, העבודה נכשלת.

‫Transcoder API יוצר מיפוי ברירת מחדל לכל audioStream מוגדר רק אם הלקוח לא מציין את המיפוי באופן מפורש.

נבחן את ההגדרה הבאה שמכילה audioStream מוגדר:

"inputs": [
  {
    "key": "video_and_stereo_audio",
    "uri": "gs://my-bucket/video_and_stereo_audio.mp4"
  },
  {
    "key": "video_only",
    "uri": "gs://my-bucket/video_only.mov"
  },
  {
    "key": "stereo_audio_only",
    "uri": "gs://my-bucket/stereo_audio_only.mp3"
  }
],
"editList": [
  {
    "key": "atom0",
    "inputs": ["video_and_stereo_audio"]
  },
  {
    "key": "atom1",
    "inputs": ["video_only", "stereo_audio_only"]
  }
],
"elementaryStreams": [
  {
    "key": "output_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 2, // API default
      "channelLayout": ["fl", "fr"], // API default
      "sampleRateHertz": 48000
    }
  }
]

‫Transcoder API יוצר את מיפויי ברירת המחדל הבאים לפלט אודיו. שימו לב שהשדות audioStream לא חלים על הקלט video_only. למרות שהקלט הזה מופיע ראשון ברשימה inputs, הוא לא מכיל טראק אודיו.

"elementaryStreams": [
  {
    "key": "output_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 2,
      "channelLayout": ["fl", "fr"],
      "sampleRateHertz": 48000,
      "mapping": [
        {
          "atomKey": "atom0",
          "inputKey": "video_and_stereo_audio",
          "inputTrack": 1,
          "inputChannel": 0,
          "outputChannel": 0,
          "gainDb": 0
        },
        {
          "atomKey": "atom0",
          "inputKey": "video_and_stereo_audio",
          "inputTrack": 1,
          "inputChannel": 1,
          "outputChannel": 1,
          "gainDb": 0
        },
        {
          "atomKey": "atom1",
          "inputKey": "stereo_audio_only",
          "inputTrack": 0,
          "inputChannel": 0,
          "outputChannel": 0,
          "gainDb": 0
        },
        {
          "atomKey": "atom1",
          "inputKey": "stereo_audio_only",
          "inputTrack": 0,
          "inputChannel": 1,
          "outputChannel": 1,
          "gainDb": 0
        }
      ]
    }
  }
]

N עד n עותקים

אם מספר הערוצים בטראק האודיו של קובץ הקלט זהה למספר הערוצים בקובץ הפלט audioStream, ‏ Transcoder API מעתיק את ערוצי הקלט לערוצי הפלט.

נניח שיש לכם את ההגדרה הבאה שכוללת קלט עם אודיו סטריאו דו-ערוצי ו-audioStream מוגדר עם 2 ערוצים:

"inputs": [
  {
    "key": "video_and_stereo_audio",
    "uri": "gs://my-bucket/video_and_stereo_audio.mp4"
  }
],
"editList": [
  {
    "key": "atom0",
    "inputs": ["video_and_stereo_audio"]
  }
],
"elementaryStreams": [
  {
    "key": "output_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 2, // API default
      "channelLayout": ["fl", "fr"], // API default
      "sampleRateHertz": 48000
    }
  }
]

‫Transcoder API יוצר את מיפויי ברירת המחדל הבאים לפלט אודיו:

"elementaryStreams": [
  {
    "key": "output_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 2,
      "channelLayout": ["fl", "fr"],
      "sampleRateHertz": 48000,
      "mapping": [
        {
          "atomKey": "atom0",
          "inputKey": "video_and_stereo_audio",
          "inputTrack": 1,
          "inputChannel": 0,
          "outputChannel": 0,
          "gainDb": 0
        },
        {
          "atomKey": "atom0",
          "inputKey": "video_and_stereo_audio",
          "inputTrack": 1,
          "inputChannel": 1,
          "outputChannel": 1,
          "gainDb": 0
        }
      ]
    }
  }
]

N לדאון-מיקס אחד

אם מספר הערוצים בטראק האודיו של הקלט גדול ממספר הערוצים בפלט audioStream, ‏ Transcoder API מעתיק את כל ערוצי הקלט לערוץ פלט יחיד.

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

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

"inputs": [
  {
    "key": "video_and_stereo_audio",
    "uri": "gs://my-bucket/video_and_stereo_audio.mp4"
  }
],
"editList": [
  {
    "key": "atom0",
    "inputs": ["video_and_stereo_audio"]
  }
],
"elementaryStreams": [
  {
    "key": "output_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 1,
      "channelLayout": ["fc"],
      "sampleRateHertz": 48000
    }
  }
]

‫Transcoder API יוצר את מיפויי ברירת המחדל הבאים לפלט אודיו:

"elementaryStreams": [
  {
    "key": "output_mono_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 1,
      "channelLayout": ["fc"],
      "sampleRateHertz": 48000,
      "mapping": [
        {
          "atomKey": "atom0",
          "inputKey": "video_and_stereo_audio",
          "inputTrack": 1,
          "inputChannel": 0,
          "outputChannel": 0,
          "gainDb": 0
        },
        {
          "atomKey": "atom0",
          "inputKey": "video_and_stereo_audio",
          "inputTrack": 1,
          "inputChannel": 1,
          "outputChannel": 0,
          "gainDb": 0
        }
      ]
    }
  }
]

עותק 1 עד N

אם מספר הערוצים בטראק אודיו של הקלט קטן ממספר הערוצים בפלט audioStream, Transcoder API מעתיק את ערוץ הקלט הראשון לכל ערוץ פלט.

נבחן את ההגדרה הבאה שמכילה קלט עם אודיו מונו בערוץ אחד ו-audioStream מוגדר עם 2 ערוצי פלט:

"inputs": [
  {
    "key": "video_and_mono_audio",
    "uri": "gs://my-bucket/video_and_mono_audio.mp4"
  }
],
"editList": [
  {
    "key": "atom0",
    "inputs": ["video_and_mono_audio"]
  }
],
"elementaryStreams": [
  {
    "key": "output_mono_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 2, // API default
      "channelLayout": ["fl", "fr"], // API default
      "sampleRateHertz": 48000
    }
  }
]

‫Transcoder API יוצר את מיפויי ברירת המחדל הבאים לפלט אודיו:

"elementaryStreams": [
  {
    "key": "output_mono_audio",
    "audioStream": {
      "codec": "aac",
      "bitrateBps": 64000,
      "channelCount": 2,
      "channelLayout": ["fl", "fr"],
      "sampleRateHertz": 48000,
      "mapping": [
        {
          "atomKey": "atom0",
          "inputKey": "video_and_mono_audio",
          "inputTrack": 1,
          "inputChannel": 0,
          "outputChannel": 0,
          "gainDb": 0
        },
        {
          "atomKey": "atom0",
          "inputKey": "video_and_mono_audio",
          "inputTrack": 1,
          "inputChannel": 0,
          "outputChannel": 1,
          "gainDb": 0
        }
      ]
    }
  }
]

מיפוי ברירת מחדל של טקסט

מיפוי טקסט משמש בדרך כלל לכתוביות.

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

"inputs": [
  {
    "key": "video_and_audio",
    "uri": "gs://my-bucket/video_and_audio.mp4"
  },
  {
    "key": "sub",
    "uri": "gs://my-bucket/sub.srt"
  }
],
"editList": [
  {
    "key": "atom0",
    "inputs": ["video_and_audio", "sub"]
  }
],
"elementaryStreams": [
  {
    "key": "output_sub",
    "textStream": {
      "codec": "webvtt"
    }
  }
]

‫Transcoder API יוצר את מיפויי ברירת המחדל הבאים לפלט טקסט:

"elementaryStreams": [
  {
    "key": "output_sub",
    "textStream": {
      "codec": "webvtt",
      "mapping": [
        {
          "atomKey": "atom0",
          "inputKey": "caption_input0",
          "inputTrack": 0
        }
      ]
    }
  }
]