تعديل مواد عرض متعددة

باستخدام 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 مع التركيبات:

  • الجمع بين مواد عرض الصوت والصورة والفيديو بشكل تسلسلي
  • إضافة مقطع صوتي في الخلفية إلى مادة عرض فيديو
  • إضافة تأثيرات إلى التركيبة
  • تحويل إدخال HDR إلى SDR لإنشاء إخراج SDR بجودة مرئية أفضل

القيود الحالية

يجب أن تستوفي التسلسلات ضِمن التركيبة الشروط الموضّحة في Transformer.start(). بالإضافة إلى ذلك، لا تتوفّر العمليات التالية بعد عند العمل باستخدام التركيبات:

  • تلاشي الفيديو أو المقاطع الصوتية

طلبات الميزات

إذا كانت لديك أي طلبات ميزات لواجهة برمجة التطبيقات Transformer API، يمكنك الإبلاغ عن مشكلة في مستودع Media3 على GitHub.