באמצעות Transformer, אפשר לשלב בין כמה נכסי מדיה, כמו סרטונים, תמונות וקובצי אודיו, כדי ליצור Composition.
ייצוא של קומפוזיציה
כדי להחיל טרנספורמציות (כמו אפקטים או עריכות חיתוך) על MediaItem, צריך ליצור EditedMediaItem כדי לייצג את הנכס שהטרנספורמציות הוחלו עליו.
אחר כך אפשר לשרשר את אובייקטים EditedMediaItem כדי ליצור EditedMediaItemSequence.
לדוגמה, אתם יכולים ליצור EditedMediaItemSequence עם שני סרטונים ערוכים. הפריטים בתוך EditedMediaItemSequence מסודרים ברצף ואין חפיפה ביניהם בזמן.
Composition הוא שילוב של אובייקט EditedMediaItemSequence אחד או יותר. כל האובייקטים EditedMediaItemSequence ב-Composition מעורבבים יחד, כך שאפשר לשלב בין נכסי וידאו ואודיו.
אפשר לייצא אובייקטים של Composition באמצעות Transformer.
הנה דוגמה ליצירה ולייצוא של נכס וידאו שמורכב משני קליפים של וידאו שעברו עריכה, עם טראק אודיו שמוצג מעליהם:
Kotlin
val video1 = EditedMediaItem.Builder(MediaItem.fromUri(video1Uri)).build() val video2 = EditedMediaItem.Builder(MediaItem.fromUri(video2Uri)).build() val videoSequence = EditedMediaItemSequence.Builder(setOf(C.TRACK_TYPE_AUDIO, C.TRACK_TYPE_VIDEO)) .addItems(video1, video2) .build() val backgroundAudio = EditedMediaItem.Builder(MediaItem.fromUri(audioUri)).build() val backgroundAudioSequence = EditedMediaItemSequence.Builder(setOf(C.TRACK_TYPE_AUDIO)) .addItem(backgroundAudio) .setIsLooping(true) // Loop audio track through duration of videoSequence .build() val composition = Composition.Builder(videoSequence, backgroundAudioSequence).build() transformer.start(composition, filePath)
Java
EditedMediaItem video1 = new EditedMediaItem.Builder(MediaItem.fromUri(video1Uri)).build(); EditedMediaItem video2 = new EditedMediaItem.Builder(MediaItem.fromUri(video2Uri)).build(); EditedMediaItemSequence videoSequence = new EditedMediaItemSequence.Builder(ImmutableSet.of(C.TRACK_TYPE_AUDIO, C.TRACK_TYPE_VIDEO)) .addItems(video1, video2) .build(); EditedMediaItem backgroundAudio = new EditedMediaItem.Builder(MediaItem.fromUri(audioUri)).build(); EditedMediaItemSequence backgroundAudioSequence = new EditedMediaItemSequence.Builder(ImmutableSet.of(C.TRACK_TYPE_AUDIO)) .addItem(backgroundAudio) .setIsLooping(true) // Loop audio track through duration of videoSequence .build(); Composition composition = new Composition.Builder(videoSequence, backgroundAudioSequence).build(); transformer.start(composition, filePath);
דוגמאות לתרחישי שימוש נתמכים
זו רשימה לא ממצה של תרחישי שימוש ש-Transformer API תומך בהם באמצעות Compositions:
- שילוב רציף של נכסי אודיו, תמונות ווידאו.
- הוספת אודיו לרקע של נכס וידאו.
- הוספת אפקטים ליצירה.
- מיפוי טונים של קלט HDR ל-SDR כדי ליצור פלט SDR באיכות חזותית טובה יותר.
מגבלות נוכחיות
רצפים בתוך קומפוזיציה צריכים לעמוד בתנאים שמפורטים בקטע Transformer.start().
בנוסף, הפעולות הבאות עדיין לא נתמכות כשעובדים עם יצירות מוזיקליות:
- הוספת מעבר הדרגתי בין רצועות וידאו או אודיו
בקשות להוספת תכונות
אם יש לכם בקשות לתכונות ב-Transformer API, אתם יכולים לדווח על בעיה במאגר Media3 ב-GitHub.