মিডিয়া আইটেমের কম্পোজিশন নির্ধারণ করা

Media3 Transformer লাইব্রেরি, মিডিয়া এডিট ও ম্যানিপুলেট করার জন্য টুলের একটি স্যুট প্রদান করে। একাধিক অ্যাসেট এডিট করার মূল কম্পোনেন্ট হল Composition API. এই API আপনাকে একাধিক ইনপুট মিডিয়া আইটেম, যেমন ভিডিও ক্লিপ, ছবি ও অডিও ট্র্যাককে একটি সুসংহত স্ট্রাকচারে সাজাতে দেয় যা পরে প্রসেস, প্রিভিউ বা এক্সপোর্ট করা যায়। Composition-কে এমন একটি টাইমলাইন হিসেবে বিবেচনা করা যেতে পারে যেখানে এক বা একাধিক মিডিয়া সিকোয়েন্স থাকে। প্রতিটি সিকোয়েন্সে (EditedMediaItemSequence দ্বারা সংজ্ঞায়িত) স্বতন্ত্র মিডিয়া আইটেম (EditedMediaItem ইনস্ট্যান্স হিসেবে সংজ্ঞায়িত) থাকে। ট্রান্সফর্মেশন ও এফেক্ট কোনও একটি EditedMediaItem অথবা সম্পূর্ণ Composition-এ প্রয়োগ করা যেতে পারে।

Composition অবজেক্টের গঠন
কম্পোজিশন অবজেক্টের গঠন

Composition হল Media3 Transformer-এর সাথে বিভিন্ন ধরনের ব্যবহারের ক্ষেত্রে আপনার এন্ট্রি পয়েন্ট, যেমন:

  • অডিও, ছবি ও ভিডিও অ্যাসেট পর পর যোগ করা।
  • একটি ভিডিওর উপরে অন্য একটি ভিডিও ওভারলে করা (পিকচার-ইন-পিকচার)।
  • ভিডিও সিকোয়েন্সের সাথে ব্যাকগ্রাউন্ড অডিও ট্র্যাক মেশানো।
  • সম্পূর্ণ এডিট করা পিস জুড়ে ভিজ্যুয়াল বা অডিও এফেক্ট প্রয়োগ করা।
  • HDR ভিডিও প্রসেসিংয়ের মতো জটিল পরিস্থিতি ম্যানেজ করা।

এই নির্দেশিকায় Composition অবজেক্ট কীভাবে ডিফাইন ও বিল্ড করতে হয় তা বলা হয়েছে। এর মধ্যে রয়েছে কোন কোন মূল ক্লাস ব্যবহার করা হয়, কীভাবে একটি বা একাধিক সিকোয়েন্সের মাধ্যমে সাধারণ ও আরও জটিল কম্পোজিশন তৈরি করতে হয় এবং কীভাবে বিভিন্ন লেভেলে এফেক্ট প্রয়োগ করতে হয়।

মূল ধারণা ও ক্লাস

Composition API কার্যকরভাবে ব্যবহার করতে, মিডিয়া কম্পোজিশন তৈরি করার সাথে যুক্ত প্রধান ক্লাসগুলি বোঝা গুরুত্বপূর্ণ:

Effects:

  • উদ্দেশ্য: Effects অবজেক্ট হল অডিও প্রসেসর ও ভিডিও এফেক্টের সংগ্রহ।
  • এটি কীভাবে ব্যবহার করা হয়: Composition-এর প্রসঙ্গে, নির্দিষ্ট ক্লিপ পরিবর্তন করতে ব্যক্তিগত EditedMediaItem ইনস্ট্যান্সে অথবা সম্পূর্ণ Composition-এ Effects সেট করা যেতে পারে (সাধারণত Presentation এফেক্টের জন্য যা ফাইনাল আউটপুটকে প্রভাবিত করে, যেমন ডিসপ্লে রেজোলিউশন বা ফ্রেম রেট অ্যাডজাস্ট করা)।
  • এটি কেন গুরুত্বপূর্ণ: Effects হল এমন একটি মেকানিজম যার মাধ্যমে আপনার মিডিয়াতে ট্রান্সফর্মেশন, ফিল্টার ও অন্যান্য প্রসেসিং প্রয়োগ করা হয়। এটি একক আইটেম লেভেল ও সামগ্রিক কম্পোজিশন লেভেল, দু'টি ক্ষেত্রেই করা হয়। আরও তথ্যের জন্য, Transformations দেখুন।

EditedMediaItem:

  • উদ্দেশ্য: এই ক্লাসটি মিডিয়ার একটি অংশ (যেমন, ভিডিও, ছবি বা অডিও ফাইল) এবং এতে প্রয়োগ করা এডিটকে উপস্থাপন করে।
  • এটি কীভাবে ব্যবহার করা হয়: EditedMediaItem একটি MediaItem (যা আসল মিডিয়া কন্টেন্টের দিকে পয়েন্ট করে) Effects অবজেক্টের সাথে গ্রুপ করে।
  • এটি কেন গুরুত্বপূর্ণ: এটি আপনার কম্পোজিশনের প্রাথমিক উপাদান। এটি আপনাকে ঠিক কোন মিডিয়া অন্তর্ভুক্ত করতে হবে এবং কীভাবে প্রতিটি স্বতন্ত্র অংশকে দেখতে ও শুনতে হবে তা নির্ধারণ করতে দেয়, তার আগে সেগুলিকে একটি সিকোয়েন্সে অন্যদের সাথে একত্রিত করা হয়।

EditedMediaItemSequence:

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

Composition:

  • উদ্দেশ্য: এটি হল সবচেয়ে উপরের লেভেলের অবজেক্ট যা প্রসেস করা মিডিয়ার সম্পূর্ণ টাইমলাইন কে উপস্থাপন করে। এটি সমস্ত মিডিয়া সিকোয়েন্স এবং সম্পূর্ণ আউটপুটে প্রযোজ্য যেকোনও গ্লোবাল সেটিংস বা এফেক্টের কন্টেনার হিসেবে কাজ করে।
  • এটি কীভাবে ব্যবহার করা হয়: একটি Composition-এ এক বা একাধিক EditedMediaItemSequence অবজেক্ট থাকে। এছাড়াও, আপনি কম্পোজিশন-ওয়াইড এফেক্ট প্রয়োগ করতে এবং Composition-এ সরাসরি HDR মোডের মতো গ্লোবাল কনফিগারেশন সেট করতে পারবেন। কোনও 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)

জাভা

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-এর সাথে কাজ করে এমন ব্যবহারের কেসগুলির একটি অসম্পূর্ণ তালিকা এখানে দেওয়া হল:

  • অডিও, ছবি ও ভিডিও অ্যাসেট পর পর যোগ করা।
  • ভিডিও অ্যাসেটে ব্যাকগ্রাউন্ড অডিও যোগ করা।
  • কম্পোজিশনে এফেক্ট যোগ করা।
  • আরও ভালো ভিজ্যুয়াল কোয়ালিটির SDR আউটপুট তৈরি করতে HDR ইনপুটকে SDR-এ টোন ম্যাপিং করা।

বর্তমান সীমাবদ্ধতা

কম্পোজিশনের মধ্যে থাকা সিকোয়েন্সকে অবশ্যই Transformer.start()-এ বর্ণিত শর্তাবলী পূরণ করতে হবে। এছাড়াও, কম্পোজিশনের সাথে কাজ করার সময় নিম্নলিখিত অপারেশন এখনও কাজ করে না:

  • ভিডিও বা অডিও ট্র্যাক ক্রসফেড করা

ফিচার সংক্রান্ত অনুরোধ

Transformer API-এর জন্য কোনও ফিচারের অনুরোধ থাকলে, Media3 GitHub রিপোজিটরিতে একটি সমস্যা ফাইল করুন।