ऐसा हो सकता है कि उपयोगकर्ता एक साथ कई मीडिया ऐसेट में बदलाव करना चाहें, ताकि फ़ाइनल वीडियो में एक से ज़्यादा मीडिया आइटम एक साथ दिखें. इसमें आइटम को लेआउट में व्यवस्थित करना शामिल है. जैसे, पिक्चर-इन-पिक्चर, साइड-बाय-साइड या ग्रिड. इस तरह के प्रोजेक्ट के कुछ उदाहरण यहां दिए गए हैं:
इन लेआउट को लागू करने के बारे में जानने के लिए, कंपोज़िशन डेमो ऐप्लिकेशन देखें.
VideoCompositorSettings लागू करना
VideoCompositorSettings इंटरफ़ेस में दो तरीके होते हैं:
getOutputSize(List<Size> inputSizes), जिसका इस्तेमाल हर इनपुटEditedMediaItemSequenceका साइज़ तय करने के लिए किया जा सकता हैgetOverlaySettings(int inputId, long presentationTimeUs), इसमें यह तय किया जा सकता है कि हर सीक्वेंस फ़्रेम में कैसे दिखेगा
OverlaySettings की मदद से, किसी क्रम के प्रज़ेंटेशन को कॉन्फ़िगर करना
आपके प्रोजेक्ट में मौजूद हर सीक्वेंस के लिए, getOverlaySettings() को OverlaySettings इंटरफ़ेस का एक इंस्टेंस दिखाना चाहिए. inputId पैरामीटर से यह पता चलता है कि सेटिंग किस क्रम में लागू होंगी.
कोई इंस्टेंस बनाने के लिए, Media3 में शामिल StaticOverlaySettings क्लास का इस्तेमाल किया जा सकता है. कॉन्फ़िगरेशन के विकल्पों की पूरी सूची देखने के लिए, StaticOverlaySettings.Builder रेफ़रंस पेज देखें. इसमें विज़ुअल में किए जाने वाले बदलाव शामिल हैं. जैसे, ऐल्फ़ा ट्रांसपैरेंसी और एचडीआर ल्यूमिनेंस. साथ ही, इसमें पोज़िशन में किए जाने वाले बदलाव भी शामिल हैं. जैसे, ऐंकर पॉइंट और फ़्रेम में जगह. इसके अलावा, इसमें रोटेशन और स्केल जैसे ट्रांसफ़ॉर्मेशन भी शामिल हैं.
override fun getOverlaySettings(inputId: Int, presentationTimeUs: Long): OverlaySettings { return when (inputId) { // Position the first sequence in the top-left 0 -> { StaticOverlaySettings.Builder() // Scale the video down to 1/4th the size of the frame .setScale(0.5f, 0.5f) // Anchor the sequence in the middle of frame .setOverlayFrameAnchor(0f, 0f) // Position the video in the top-left section of the frame .setBackgroundFrameAnchor(-0.5f, 0.5f) .build() } // Add more cases for remaining input sequences else -> StaticOverlaySettings.Builder().build() } }
getOverlaySettings() तरीके के presentationTimeUs पैरामीटर का इस्तेमाल करके, वीडियो की जगह के हिसाब से इन सेटिंग में बदलाव किया जा सकता है. जैसा कि इस पेज पर पहले, मूविंग पिक्चर-इन-पिक्चर के उदाहरण में दिखाया गया है.
override fun getOverlaySettings(inputId: Int, presentationTimeUs: Long): OverlaySettings { return if (inputId == 0) { // Use the first sequence as the overlay val cycleRadians = 2 * PI * (presentationTimeUs.toDouble() / cycleTimeUs) StaticOverlaySettings.Builder() // Scale the overlay down .setScale(0.35f, 0.35f) // Anchor the overlay in the top-middle of the frame .setOverlayFrameAnchor(0f, 1f) // Move the overlay over time .setBackgroundFrameAnchor(sin(cycleRadians).toFloat() * 0.5f, -0.2f) // Rotate the overlay over time .setRotationDegrees(cos(cycleRadians).toFloat() * -10f) .build() } else { // Present the second sequence in the background as normal StaticOverlaySettings.Builder().build() } }
सुझाव/राय दें या शिकायत करें
अगर आपको वीडियो कंपोज़िटिंग के इस्तेमाल के उदाहरणों के बारे में कोई सुझाव/राय देनी है या सुविधा का अनुरोध करना है, तो Media3 GitHub रिपॉज़िटरी पर समस्या दर्ज करें.