เมื่อใช้ Transformer คุณจะรวมชิ้นงานสื่อหลายรายการ เช่น วิดีโอ
รูปภาพ และไฟล์เสียง เพื่อสร้าง Composition ได้
การส่งออกคอมโพสิต
หากต้องการใช้การเปลี่ยนรูปแบบ
(เช่น เอฟเฟกต์หรือการตัดแต่ง) กับMediaItem คุณควรสร้าง
EditedMediaItem
เพื่อแสดงถึงชิ้นงานที่มีการใช้การเปลี่ยนรูปแบบ
จากนั้นจะนำออบเจ็กต์ EditedMediaItem มาต่อกันเพื่อสร้าง EditedMediaItemSequence
เช่น คุณสามารถสร้าง EditedMediaItemSequence ที่มีวิดีโอที่ตัดต่อแล้ว 2 รายการ รายการใน EditedMediaItemSequence จะเรียงตามลำดับและ
ไม่ทับซ้อนกัน
Composition คือการรวมออบเจ็กต์ EditedMediaItemSequence ตั้งแต่ 1 รายการขึ้นไป
EditedMediaItemSequenceออบเจ็กต์ทั้งหมดในCompositionจะผสมกัน
เพื่อให้คุณรวมเนื้อหาวิดีโอและเสียงได้
Composition สามารถส่งออกออบเจ็กต์ได้โดยใช้ Transformer
ตัวอย่างการสร้างและส่งออกเนื้อหาวิดีโอที่ประกอบด้วยวิดีโอคลิป 2 รายการที่ตัดต่อแล้ว โดยมีแทร็กเสียงซ้อนทับอยู่
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);
ตัวอย่างกรณีการใช้งานที่รองรับ
ต่อไปนี้เป็นรายการ Use Case โดยสังเขปที่ Transformer API รองรับด้วยการคอมโพส
- การรวมชิ้นงานเสียง รูปภาพ และวิดีโอตามลำดับ
- การเพิ่มเสียงพื้นหลังลงในชิ้นงานวิดีโอ
- การเพิ่มเอฟเฟกต์ลงในคอมโพสิต
- การแมปโทนอินพุต HDR เป็น SDR เพื่อสร้างเอาต์พุต SDR ที่มีคุณภาพของภาพดียิ่งขึ้น
ข้อจำกัดในปัจจุบัน
ลำดับภายในองค์ประกอบต้องเป็นไปตามเงื่อนไขที่ระบุไว้ใน
Transformer.start()
นอกจากนี้ ระบบยังไม่รองรับการดำเนินการต่อไปนี้เมื่อใช้
Compositions
- การครอสเฟดแทร็กวิดีโอหรือแทร็กเสียง
คำขอฟีเจอร์
หากมีคำขอฟีเจอร์สำหรับ Transformer API โปรดแจ้งปัญหาในที่เก็บ Media3 GitHub