کتابخانه Media3 Transformer مجموعهای از ابزارها را برای ویرایش و دستکاری رسانه ارائه میدهد. یکی از عناصر اصلی برای ویرایش چند دارایی،
Composition API است. این API به شما امکان میدهد چندین عنصر رسانهای ورودی،
مانند کلیپهای ویدیویی، تصاویر، و قطعههای صوتی را در یک ساختار منسجم
ترتیب دهید که سپس میتواند پردازش، پیشنمایش، یا صادر شود. Composition را میتوان بهعنوان خط زمانی درنظر گرفت که یک یا چند توالی رسانهای را در خود جای میدهد. هر توالی (تعریفشده توسط EditedMediaItemSequence) شامل عناصر رسانهای جداگانه (تعریفشده بهعنوان نمونههای EditedMediaItem) است.
تبدیلها و جلوهها را میتوان روی یک EditedMediaItem
یا روی کل Composition اعمال کرد.
Composition نقطه ورود شما برای انواع موارد استفاده با Media3
Transformer است، ازجمله:
- ترکیب متوالی داراییهای صوتی، تصویری و ویدیویی.
- روپوش کردن یک ویدیو روی ویدیو دیگر (تصویردرتصویر).
- ترکیب یک قطعه پسزمینه با یک توالی ویدیو.
- اعمال جلوههای دیداری یا صوتی در کل قطعه ویرایششده.
- مدیریت سناریوهای پیچیده مانند پردازش ویدیو HDR.
این راهنما بر نحوه تعریف و ساختن اشیای Composition تمرکز دارد، ازجمله
کلاسهای کلیدی درگیر، نحوه ایجاد ترکیبهای پایه و پیچیدهتر
با یک یا چند توالی، و نحوه اعمال جلوهها در سطوح مختلف.
مفاهیم و کلاسهای کلیدی
برای استفاده مؤثر از Composition API، مهم است که با کلاسهای اصلی
درگیر در ساختن ترکیب رسانهای آشنا باشید:
Effects:
- هدف: شیء
Effectsمجموعهای از پردازشگرهای صوتی و جلوههای ویدیویی است. - نحوه استفاده: در زمینه
Composition، یکEffectsمیتواند روی نمونههایEditedMediaItemجداگانه تنظیم شود تا کلیپهای خاصی را تغییر دهد، یا رویCompositionبهطور کلی (معمولاً برای جلوههایPresentationکه بر برونداد نهایی تأثیر میگذارند، مانند تنظیم وضوح نمایشگر یا نرخ فریم). - چرا مهم است:
Effectsسازوکار اعمال تبدیلها، فیلترها، و پردازشهای دیگر روی رسانههای شما در هر دو سطح مورد فردی و سطح ترکیب کلی است. برای اطلاعات بیشتر، بهTransformationsمراجعه کنید.
EditedMediaItem:
- هدف: این کلاس نشاندهنده یک قطعه رسانه (مثل ویدیو، تصویر، یا فایل صوتی) و ویرایشهایی است که باید روی آن اعمال شود.
- نحوه استفاده:
EditedMediaItemیکMediaItem(که به محتوای رسانهای واقعی اشاره میکند) را با یکEffectsشیء گروهبندی میکند. - چرا مهم است: این عنصر سازنده اساسی ترکیب شما است. این ویژگی به شما امکان میدهد دقیقاً مشخص کنید کدام رسانهها باید اضافه شوند و هر قطعه چگونه باید بهنظر برسد و صدا دهد قبلاز اینکه با قطعات دیگر در یک توالی ترکیب شود.
EditedMediaItemSequence:
- هدف: نشاندهنده یک توالی خطی از
EditedMediaItemشیء است که قرار است یکی پساز دیگری پخش شوند. - نحوه استفاده:
EditedMediaItemSequenceبا فهرستی ازEditedMediaItemاشیا ساخته میشود. هر توالی درCompositionشبیه به یک قطعه یا لایه در خط زمان ویرایش ویدیو چندقطعهای است. برای مثال، یک توالی ممکن است شامل کلیپهای ویدیویی اصلی شما باشد، درحالیکه توالی دیگر، که ازنظر زمانی همپوشانی دارد، ممکن است شامل کلیپهای ویدیویی باشد که روی توالی اول پوشانده میشوند، و توالی دیگر ممکن است فقط شامل یک قطعه صوتی برای موسیقی پسزمینه باشد. - چرا مهم است:
EditedMediaItemSequenceگروههای رسانهای مرتبط مواردی که باید مستقیماً از یکدیگر پیروی کنند. بااستفاده از چندین توالی، میتوانید چیدمانهای پیچیدهتری ایجاد کنید، مانند لایهبندی صدا یا ایجاد رونهادهای تصویری.
Composition:
- هدف: این شیء سطح بالایی است که کل خط زمان رسانهای را که باید پردازش شود نشان میدهد. این عنصر بهعنوان ظرفی برای همه توالیهای رسانهای و هرگونه تنظیمات یا جلوههای سراسری که بر کل برونداد اعمال میشود عمل میکند.
- نحوه استفاده:
Compositionاز یک یا چندEditedMediaItemSequenceشیء تشکیل شده است. همچنین میتوانید جلوههایی در کل ترکیب اعمال کنید و پیکربندیهای سراسری مثل حالت HDR را مستقیماً درCompositionتنظیم کنید. اگر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);
نمونههایی از موارد استفاده پشتیبانیشده
این فهرست غیرجامعی از موارد استفادهای است که Transformer API با Composition پشتیبانی میکند:
- ترکیب متوالی داراییهای صوتی، تصویری و ویدیویی.
- افزودن صدای پسزمینه به دارایی ویدیویی.
- درحال افزودن جلوهها به «قطعه».
- نگاشت رنگ ورودی HDR به SDR برای تولید برونداد SDR با کیفیت دیداری بهتر.
محدودیتهای فعلی
توالیهای درون یک «قطعه» باید شرایط ذکرشده در
Transformer.start() را برآورده کنند.
بهعلاوه، هنگام کار با «قطعات موسیقی»، از عملیات زیر هنوز پشتیبانی نمیشود:
- محو کردن متقاطع قطعههای ویدیو یا صدا
درخواستهای ویژگی
اگر درخواست ویژگی برای Transformer APIs دارید، در مخزن Media3 GitHub مشکل ثبت کنید.