באמצעות הכלי Transformer, אפשר לשלב בין כמה נכסי מדיה, כמו סרטונים, תמונות וקובצי אודיו, כדי ליצור Composition.
ייצוא של קומפוזיציה
כדי להחיל טרנספורמציות (כמו אפקטים או עריכות חיתוך) על MediaItem, צריך ליצור EditedMediaItem כדי לייצג את הנכס שהטרנספורמציות הוחלו עליו.
אחר כך אפשר לשרשר את אובייקטי EditedMediaItem כדי ליצור EditedMediaItemSequence.
לדוגמה, אתם יכולים ליצור EditedMediaItemSequence עם שני סרטונים ערוכים. הפריטים בתוך EditedMediaItemSequence מסודרים ברצף ואין חפיפה ביניהם בזמן.
Composition הוא שילוב של אובייקט EditedMediaItemSequence אחד או יותר. כל האובייקטים EditedMediaItemSequence בComposition מעורבבים יחד, כך שאפשר לשלב בין נכסי וידאו ואודיו.
אפשר לייצא אובייקטים של Composition באמצעות Transformer.
הנה דוגמה ליצירה ולייצוא של נכס וידאו שמורכב משני קליפים ערוכים של וידאו, עם טראק אודיו שמוצג מעליהם:
Kotlin
val transformer = ... // Set up Transformer instance 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() val filePath = ... // Provide file path to save Composition transformer.start(composition, filePath)
Java
Transformer transformer = ... // Set up Transformer instance 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(); String filePath = ... // Provide file path to save Composition Composition composition = new Composition.Builder( videoSequence, backgroundAudioSequence) .build(); transformer.start(composition, filePath);
דוגמאות לתרחישי שימוש נתמכים
זוהי רשימה לא ממצה של תרחישי שימוש ש-Transformer API תומך בהם באמצעות Compositions:
- שילוב רציף של נכסי אודיו, תמונות ווידאו.
- הוספת אודיו לרקע של נכס וידאו.
- הוספת אפקטים ליצירה.
- מיפוי טונים של קלט HDR ל-SDR כדי ליצור פלט SDR באיכות חזותית טובה יותר.
מגבלות נוכחיות
רצפים בתוך קומפוזיציה חייבים לעמוד בתנאים שמפורטים במאמר Transformer.start().
בנוסף, הפעולות הבאות עדיין לא נתמכות כשעובדים עם יצירות מוזיקליות:
- הוספת אפקט Crossfade לרצועות וידאו או אודיו
בקשות להוספת תכונות
אם יש לכם בקשות לתכונות ב-Transformer API, אתם יכולים לדווח על בעיה במאגר Media3 ב-GitHub.