কাস্টম VideoCompositorSettings সহ লেআউট নির্ধারণ করা

ব্যবহারকারীরা একসাথে একাধিক মিডিয়া অ্যাসেট এডিট করতে চাইতে পারেন, যাতে ফাইনাল ভিডিওতে একই সাথে একাধিক মিডিয়া আইটেম দেখা যায়। এর মধ্যে রয়েছে পিকচার-ইন-পিকচার, পাশাপাশি বা গ্রিডের মতো লেআউটে আইটেম সাজানো। এই ধরনের প্রোজেক্টের কিছু উদাহরণ এখানে দেওয়া হল:

পিকচার-ইন-পিকচার লেআউট সহ ভিডিও
পিকচার-ইন-পিকচার লেআউটে সাজানো মিডিয়া আইটেম।
ভিডিওতে গ্রিড লেআউট
২x২ গ্রিড লেআউটে সাজানো মিডিয়া আইটেম।

আপনি কম্পোজিশন ডেমো অ্যাপে এইসব লেআউটের প্রয়োগ এক্সপ্লোর করতে পারবেন।

VideoCompositorSettings প্রয়োগ করুন

VideoCompositorSettings ইন্টারফেসে ২টি পদ্ধতি আছে:

  • getOutputSize(List<Size> inputSizes), যা আপনি প্রতিটি ইনপুটের সাইজ নির্দিষ্ট করতে ব্যবহার করতে পারবেন EditedMediaItemSequence
  • getOverlaySettings(int inputId, long presentationTimeUs), যেখানে আপনি নির্দিষ্ট করতে পারবেন যে প্রতিটি সিকোয়েন্স কীভাবে ফ্রেমে দেখানো হবে

OverlaySettings-এর মাধ্যমে কোনও সিকোয়েন্সের প্রেজেন্টেশন কনফিগার করা

আপনার getOverlaySettings()-এর প্রয়োগের ফলে আপনার প্রোজেক্টের প্রতিটি সিকোয়েন্সের জন্য OverlaySettings ইন্টারফেসের একটি ইনস্ট্যান্স রিটার্ন করা উচিত। সেটিংস কোন সিকোয়েন্সে প্রয়োগ করা হবে তা inputId প্যারামিটার শনাক্ত করে। ইনস্ট্যান্স তৈরি করতে, আপনি Media3-এ অন্তর্ভুক্ত StaticOverlaySettings ক্লাস ব্যবহার করতে পারবেন। কনফিগারেশন বিকল্পের সম্পূর্ণ তালিকার জন্য StaticOverlaySettings.Builderরেফারেন্স পৃষ্ঠা দেখুন, এতে ভিজ্যুয়াল পরিবর্তন যেমন আলফা ট্রান্সপারেন্সি ও HDR লুমিন্যান্স, পজিশনাল পরিবর্তন যেমন অ্যাঙ্কর পয়েন্ট ও ফ্রেমের মধ্যে লোকেশন এবং ট্রান্সফর্মেশন যেমন রোটেশন ও স্কেল অন্তর্ভুক্ত।

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 রিপোজিটরিতে একটি ইস্যু ফাইল করুন।