تعریف طرح‌بندی‌ها با تنظیمات سفارشی VideoCompositorSettings

کاربران ممکن است بخواهند چندین فایل رسانه‌ای را با هم ویرایش کنند تا بیش از یک آیتم رسانه‌ای به طور همزمان در ویدیوی نهایی ظاهر شود. این شامل چیدمان آیتم‌ها در طرح‌بندی‌هایی مانند تصویر در تصویر، کنار هم یا شبکه‌ای می‌شود. در اینجا چند نمونه از چنین پروژه‌هایی آورده شده است:

ویدئو با طرح تصویر در تصویر
اقلام رسانه‌ای که به صورت تصویر در تصویر چیده شده‌اند.
ویدئو با طرح شبکه‌ای
آیتم‌های رسانه‌ای در یک طرح شبکه‌ای ۲x۲ مرتب شده‌اند.

می‌توانید پیاده‌سازی این طرح‌بندی‌ها را در برنامه آزمایشی کامپوزیشن بررسی کنید.

پیاده‌سازی تنظیمات VideoCompositorSettings

رابط VideoCompositorSettings شامل دو متد است:

پیکربندی نمایش یک سکانس با OverlaySettings

پیاده‌سازی شما از getOverlaySettings() باید یک نمونه از رابط OverlaySettings را برای هر دنباله در پروژه شما برگرداند. پارامتر inputId مشخص می‌کند که تنظیمات روی کدام دنباله اعمال خواهند شد. برای ساخت یک نمونه، می‌توانید از کلاس StaticOverlaySettings موجود در Media3 استفاده کنید. برای مشاهده لیست کاملی از گزینه‌های پیکربندی، که شامل تغییرات بصری مانند شفافیت آلفا و روشنایی HDR، تغییرات موقعیتی مانند نقطه لنگر و مکان درون قاب و تبدیل‌هایی مانند چرخش و مقیاس است، به صفحه مرجع StaticOverlaySettings.Builder مراجعه کنید.

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()
  }
}

با استفاده از پارامتر presentationTimeUs از متد getOverlaySettings() ، می‌توانید این تنظیمات را بر اساس موقعیت ویدیو تغییر دهید، همانطور که در مثال تصویر در تصویر متحرک که قبلاً در این صفحه نشان داده شده است، نشان داده شده است.

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()
  }
}

بازخورد

اگر بازخورد یا درخواست ویژگی جدیدی برای موارد استفاده از ترکیب ویدیو دارید، می‌توانید مشکل خود را در مخزن گیت‌هاب مدیا۳ ثبت کنید.