با استفاده از Transformer، میتوانید چندین فایل رسانهای مانند ویدیوها، تصاویر و فایلهای صوتی را برای ایجاد یک Composition ترکیب کنید.
اکسپورت کردن یک کامپوزیشن
برای اعمال تبدیلات (مانند افکتها یا ویرایشهای برش) به یک MediaItem ، باید یک EditedMediaItem ایجاد کنید تا نشاندهندهی داراییای باشد که تبدیلات روی آن اعمال شده است.
سپس میتوان اشیاء EditedMediaItem را به هم پیوند داد تا یک EditedMediaItemSequence ایجاد شود. برای مثال، میتوانید یک EditedMediaItemSequence با دو ویدیوی ویرایش شده ایجاد کنید. آیتمهای داخل یک EditedMediaItemSequence به صورت متوالی مرتب شدهاند و از نظر زمانی همپوشانی ندارند.
یک Composition ترکیبی از یک یا چند شیء EditedMediaItemSequence است. تمام اشیاء EditedMediaItemSequence در Composition با هم ترکیب میشوند و به شما امکان میدهند فایلهای ویدیویی و صوتی را با هم ترکیب کنید.
اشیاء Composition را میتوان با استفاده از Transformer صادر کرد.
در اینجا مثالی از ایجاد و خروجی گرفتن از یک فایل ویدیویی که شامل دو کلیپ ویدیویی ویرایش شده است، که با یک آهنگ صوتی پوشانده شده است، آورده شده است:
کاتلین
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)
جاوا
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() را داشته باشند. علاوه بر این، عملیات زیر هنوز هنگام کار با کامپوزیشنها پشتیبانی نمیشوند:
- محو شدن متقاطع آهنگهای ویدیویی یا صوتی
درخواستهای ویژگی
اگر درخواست هرگونه ویژگی برای API Transformer دارید، مشکل خود را در مخزن گیتهاب Media3 ثبت کنید.