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