मीडिया आइटम की कंपोज़िशन तय करना

Media3 Transformer लाइब्रेरी, मीडिया में बदलाव करने और उसे मैनेज करने के लिए टूल का सुइट उपलब्ध कराती है. एक से ज़्यादा ऐसेट में बदलाव करने के लिए, Composition एपीआई एक मुख्य कॉम्पोनेंट है. इस एपीआई की मदद से, इनपुट के तौर पर इस्तेमाल किए जाने वाले कई मीडिया आइटम को एक साथ व्यवस्थित किया जा सकता है. जैसे, वीडियो क्लिप, इमेज, और ऑडियो ट्रैक. इसके बाद, इन्हें प्रोसेस किया जा सकता है, इनकी झलक देखी जा सकती है या इन्हें एक्सपोर्ट किया जा सकता है. Composition को एक टाइमलाइन के तौर पर देखा जा सकता है, जिसमें मीडिया के एक या उससे ज़्यादा क्रम शामिल हो सकते हैं. हर क्रम (EditedMediaItemSequence से तय किया जाता है) में अलग-अलग मीडिया आइटम (EditedMediaItem इंस्टेंस के तौर पर तय किए जाते हैं) शामिल होते हैं. बदलाव और इफ़ेक्ट किसी एक EditedMediaItem या पूरे Composition पर लागू किए जा सकते हैं.

कंपोज़िशन ऑब्जेक्ट का स्ट्रक्चर
Composition ऑब्जेक्ट का स्ट्रक्चर

Media3 Transformer के साथ, Composition का इस्तेमाल कई तरीकों से किया जा सकता है. जैसे:

  • ऑडियो, इमेज, और वीडियो ऐसेट को क्रम से जोड़ना.
  • किसी वीडियो के ऊपर दूसरा वीडियो जोड़ना (पिक्चर-इन-पिक्चर).
  • वीडियो क्रम के साथ बैकग्राउंड ऑडियो ट्रैक मिक्स करना.
  • एडिट किए गए पूरे वीडियो पर विज़ुअल या ऑडियो इफ़ेक्ट लागू करना.
  • जटिल स्थितियों को मैनेज करना, जैसे कि एचडीआर वीडियो को प्रोसेस करना.

इस गाइड में, Composition ऑब्जेक्ट तय करने और बनाने का तरीका बताया गया है. इसमें शामिल मुख्य क्लास, एक या एक से ज़्यादा क्रम वाले सामान्य और ज़्यादा जटिल कंपोज़िशन बनाने का तरीका, और अलग-अलग लेवल पर इफ़ेक्ट लागू करने का तरीका शामिल है.

मुख्य कॉन्सेप्ट और क्लास

Composition एपीआई का बेहतर तरीके से इस्तेमाल करने के लिए, मीडिया कंपोज़िशन बनाने में शामिल मुख्य क्लास को समझना ज़रूरी है:

Effects:

  • मकसद: Effects ऑब्जेक्ट, ऑडियो प्रोसेसर और वीडियो इफ़ेक्ट का कलेक्शन होता है.
  • इसे इस्तेमाल करने का तरीका: Composition के संदर्भ में, Effects को EditedMediaItem के अलग-अलग इंस्टेंस पर सेट किया जा सकता है, ताकि खास क्लिप में बदलाव किया जा सके. इसके अलावा, इसे पूरे Composition पर भी सेट किया जा सकता है. आम तौर पर, ऐसा Presentation इफ़ेक्ट के लिए किया जाता है. इससे फ़ाइनल आउटपुट पर असर पड़ता है. जैसे, डिसप्ले रिज़ॉल्यूशन या फ़्रेम रेट को अडजस्ट करना.
  • यह क्यों ज़रूरी है: Effects की मदद से, मीडिया में बदलाव, फ़िल्टर, और अन्य प्रोसेसिंग लागू की जा सकती है. ऐसा, आइटम लेवल और कंपोज़िशन लेवल, दोनों पर किया जा सकता है. ज़्यादा जानकारी के लिए, देखें Transformations.

EditedMediaItem:

  • मकसद: यह क्लास, मीडिया के एक आइटम (जैसे, वीडियो, इमेज या ऑडियो फ़ाइल) और उसमें किए जाने वाले बदलावों को दिखाती है.
  • इसे इस्तेमाल करने का तरीका: EditedMediaItem MediaItem (जो असल मीडिया कॉन्टेंट की ओर इशारा करता है) को Effects ऑब्जेक्ट के साथ ग्रुप करता है.
  • यह क्यों ज़रूरी है: यह आपके कंपोज़िशन का बुनियादी बिल्डिंग ब्लॉक है. इससे यह तय किया जा सकता है कि कौनसे मीडिया को शामिल करना है और क्रम में शामिल करने से पहले, हर आइटम कैसा दिखना और सुनाई देना चाहिए.

EditedMediaItemSequence:

  • मकसद: यह EditedMediaItem ऑब्जेक्ट का एक क्रम दिखाता है, जिसे एक के बाद एक चलाया जाना चाहिए.
  • इसे इस्तेमाल करने का तरीका: EditedMediaItemSequence को EditedMediaItem ऑब्जेक्ट की सूची से बनाया जाता है. Composition में मौजूद हर क्रम, मल्टी-ट्रैक वीडियो एडिटिंग टाइमलाइन में मौजूद ट्रैक या लेयर की तरह होता है. उदाहरण के लिए, एक क्रम में आपकी मुख्य वीडियो क्लिप शामिल हो सकती हैं. वहीं, दूसरे क्रम में, पहली वीडियो क्लिप पर ओवरले की जाने वाली वीडियो क्लिप शामिल हो सकती हैं. इसके अलावा, तीसरे क्रम में सिर्फ़ बैकग्राउंड संगीत के लिए ऑडियो ट्रैक शामिल हो सकता है.
  • यह क्यों ज़रूरी है: EditedMediaItemSequence एक-दूसरे से जुड़े मीडिया आइटम को ग्रुप करता है, जिन्हें एक के बाद एक चलाया जाना चाहिए. एक से ज़्यादा क्रम का इस्तेमाल करके, ज़्यादा जटिल व्यवस्थाएं बनाई जा सकती हैं. जैसे, ऑडियो को लेयर करना या विज़ुअल ओवरले बनाना.

Composition:

  • मकसद: यह टॉप-लेवल ऑब्जेक्ट है, जो प्रोसेस किए जाने वाले मीडिया की पूरी टाइमलाइन दिखाता है. यह सभी मीडिया क्रमों और उन सभी ग्लोबल सेटिंग या इफ़ेक्ट के लिए कंटेनर के तौर पर काम करता है जो पूरे आउटपुट पर लागू होते हैं.
  • इसे इस्तेमाल करने का तरीका: एक Composition में एक या उससे ज़्यादा EditedMediaItemSequence ऑब्जेक्ट शामिल होते हैं. इसके अलावा, Composition पर कंपोज़िशन-वाइड इफ़ेक्ट लागू किए जा सकते हैं और ग्लोबल कॉन्फ़िगरेशन सेट किए जा सकते हैं. जैसे, एचडीआर मोड. अगर किसी Composition में एक से ज़्यादा EditedMediaItemSequence ऑब्जेक्ट शामिल हैं, तो इन क्रमों को क्रम से चलाने के लिए व्यवस्थित किया जा सकता है. इसके अलावा, इन्हें एक साथ भी चलाया जा सकता है. इससे ओवरले किए गए लेआउट बनाए जा सकते हैं. जैसे, पिक्चर-इन-पिक्चर या एक क्रम से दूसरे क्रम में ट्रांज़िशन.
  • यह क्यों ज़रूरी है: Composition प्रोसेस किए जाने वाले इनपुट मीडिया का पूरा स्ट्रक्चर तय करता है. यह एक सामान्य ऑब्जेक्ट है, जिसका इस्तेमाल बदलावों की झलक देखने के लिए CompositionPlayer और बदलावों के साथ आउटपुट वीडियो एक्सपोर्ट करने के लिए Transformer का इस्तेमाल करके, दोनों के लिए किया जा सकता है.

Composition बनाना और एक्सपोर्ट करना

यहां एक वीडियो ऐसेट बनाने और उसे एक्सपोर्ट करने का उदाहरण दिया गया है. इसमें, एडिट की गई दो वीडियो क्लिप शामिल हैं. साथ ही, इन पर एक ऑडियो ट्रैक ओवरले किया गया है:

Kotlin

val video1 = EditedMediaItem.Builder(MediaItem.fromUri(video1Uri)).build()

val video2 = EditedMediaItem.Builder(MediaItem.fromUri(video2Uri)).build()

val videoSequence = EditedMediaItemSequence.withAudioAndVideoFrom(listOf(video1, video2))

val backgroundAudio = EditedMediaItem.Builder(MediaItem.fromUri(audioUri)).build()

val backgroundAudioSequence =
  EditedMediaItemSequence.withAudioFrom(listOf(backgroundAudio))
    .buildUpon()
    .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 =
    EditedMediaItemSequence.withAudioAndVideoFrom(ImmutableList.of(video1, video2));

EditedMediaItem backgroundAudio =
    new EditedMediaItem.Builder(MediaItem.fromUri(audioUri)).build();

EditedMediaItemSequence backgroundAudioSequence =
    EditedMediaItemSequence.withAudioFrom(ImmutableList.of(backgroundAudio))
        .buildUpon()
        .setIsLooping(true) // Loop audio track through duration of videoSequence
        .build();

Composition composition =
    new Composition.Builder(videoSequence, backgroundAudioSequence).build();

transformer.start(composition, filePath);

इस्तेमाल के उदाहरण

यहां, इस्तेमाल के उन उदाहरणों की पूरी सूची नहीं दी गई है जिनमें Transformer API, Composition के साथ काम करता है:

  • ऑडियो, इमेज, और वीडियो ऐसेट को क्रम से जोड़ना.
  • वीडियो ऐसेट में बैकग्राउंड ऑडियो जोड़ना.
  • किसी कंपोज़िशन में इफ़ेक्ट जोड़ना.
  • बेहतर विज़ुअल क्वालिटी वाला एसडीआर आउटपुट जनरेट करने के लिए, एचडीआर इनपुट को एसडीआर में टोन मैप करना.

मौजूदा सीमाएं

किसी कंपोज़िशन में मौजूद क्रमों को, Transformer.start() में बताई गई शर्तों को पूरा करना होगा. इसके अलावा, कंपोज़िशन के साथ काम करते समय, फ़िलहाल ये कार्रवाइयां नहीं की जा सकतीं:

  • वीडियो या ऑडियो ट्रैक को क्रॉसफ़ेड करना

सुविधा के अनुरोध

अगर आपके पास Transformer API के लिए कोई सुविधा का अनुरोध है, तो Media3 GitHub रिपॉज़िटरी पर कोई समस्या दर्ज करें.