تعریف «ترکیب» فایل‌های رسانه‌ای

کتابخانه 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 مشکل ثبت کنید.