মিডিয়া আইটেমগুলির একটি সংমিশ্রণ সংজ্ঞায়িত করুন

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

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

মিডিয়া৩ ট্রান্সফর্মার ব্যবহারের বিভিন্ন ক্ষেত্রে প্রবেশের জন্য একটি Composition হলো আপনার প্রাথমিক ধাপ, যেমন:

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

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

মূল ধারণা এবং শ্রেণী

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

Effects :

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

EditedMediaItem :

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

EditedMediaItemSequence :

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

Composition :

  • উদ্দেশ্য: এটি হলো শীর্ষ-স্তরের অবজেক্ট যা প্রক্রিয়াজাত করার জন্য মিডিয়ার সম্পূর্ণ টাইমলাইনকে উপস্থাপন করে। এটি সমস্ত মিডিয়া সিকোয়েন্স এবং সম্পূর্ণ আউটপুটে প্রযোজ্য যেকোনো গ্লোবাল সেটিংস বা ইফেক্টের জন্য একটি ধারক হিসেবে কাজ করে।
  • এর ব্যবহার: একটি Composition এক বা একাধিক EditedMediaItemSequence অবজেক্ট নিয়ে গঠিত। আপনি সরাসরি Composition উপর কম্পোজিশন-ব্যাপী ইফেক্ট প্রয়োগ করতে এবং HDR মোডের মতো গ্লোবাল কনফিগারেশন সেট করতে পারেন। যদি একটি Composition একাধিক EditedMediaItemSequence অবজেক্ট থাকে, তবে এই সিকোয়েন্সগুলোকে ক্রমানুসারে প্লে করার জন্য সাজানো যেতে পারে অথবা সময়ের সাথে ওভারল্যাপ করতে পারে, যা পিকচার-ইন-পিকচারের মতো ওভারলেড লেআউট বা একটি সিকোয়েন্স থেকে অন্যটিতে ট্রানজিশনের সুযোগ করে দেয়।
  • এর গুরুত্ব: একটি Composition প্রসেস করার জন্য ইনপুট মিডিয়ার সামগ্রিক কাঠামো নির্ধারণ করে, এবং এটি একটি সাধারণ অবজেক্ট যা আপনি CompositionPlayer দিয়ে এডিট প্রিভিউ করতে এবং Transformer ব্যবহার করে এডিটসহ আউটপুট ভিডিও এক্সপোর্ট করতে— উভয় ক্ষেত্রেই ব্যবহার করতে পারেন।

একটি Composition তৈরি এবং রপ্তানি করুন

এখানে দুটি সম্পাদিত ভিডিও ক্লিপের সমন্বয়ে, তার উপর একটি অডিও ট্র্যাক যুক্ত করে একটি ভিডিও অ্যাসেট তৈরি এবং তা এক্সপোর্ট করার একটি উদাহরণ দেওয়া হলো:

কোটলিন

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);

সমর্থিত ব্যবহারের ক্ষেত্রগুলির উদাহরণ

এটি Composition সাথে ট্রান্সফরমার এপিআই দ্বারা সমর্থিত ব্যবহারের ক্ষেত্রগুলোর একটি অসম্পূর্ণ তালিকা:

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

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

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

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

বৈশিষ্ট্য অনুরোধ

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