Nested Composition (Overlay + Background Replacement) - Content Management
Nested Composition (Overlay + Background Replacement)
The most advanced composition pattern: an avatar video recorded on green screen, with the green replaced by a custom background, then overlaid on a main B-roll video.
Architecture
flowchart TD
A[Main B-roll Video] --> B[KalturaOperationResource]
C[Avatar on Green Screen] --> D[KalturaOverlayAttributes]
E[Custom Background] --> F[KalturaReplaceBackgroundAttributes]
F --> D
D --> B
B --> G[Final Composed Output]
The nesting structure:
- Outer:
KalturaOperationResourcewith main video as source - Level 1:
KalturaOverlayAttributesinmediaCompositionAttributesArray— the avatar - Level 2:
KalturaReplaceBackgroundAttributesin the overlay'sresourceMediaCompositionAttributesArray— removes green from avatar and adds background
Full Example
curl -X POST "$KALTURA_SERVICE_URL/service/media/action/addContent" \
-d "ks=$KALTURA_KS" \
-d "format=1" \
-d "entryId=$KALTURA_ENTRY_ID" \
-d "resource[objectType]=KalturaOperationResource" \
-d "resource[resource][objectType]=KalturaEntryResource" \
-d "resource[resource][entryId]=$KALTURA_MAIN_BROLL_ENTRY_ID" \
-d "resource[resource][flavorParamsId]=0" \
-d "resource[operationAttributes][0][objectType]=KalturaClipAttributes" \
-d "resource[operationAttributes][0][offset]=0" \
-d "resource[operationAttributes][0][duration]=60000" \
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][objectType]=KalturaOverlayAttributes" \
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][resource][objectType]=KalturaEntryResource" \
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][resource][entryId]=$KALTURA_AVATAR_GREEN_SCREEN_ENTRY_ID" \
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][resource][flavorParamsId]=0" \
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][overlayPlacement]=8" \
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][overlayScalePercentage]=0.3" \
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][marginsPercentage]=0.05" \
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][overlayShape]=1" \
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][resourceMediaCompositionAttributesArray][0][objectType]=KalturaReplaceBackgroundAttributes" \
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][resourceMediaCompositionAttributesArray][0][resource][objectType]=KalturaUrlResource" \
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][resourceMediaCompositionAttributesArray][0][resource][url]=https://example.com/virtual-office.jpg" \
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][resourceMediaCompositionAttributesArray][0][backgroundColorCode]=0x6FED48" \
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][resourceMediaCompositionAttributesArray][0][foregroundScalePercentage]=1.0"
Audio in Nested Compositions
Audio flows from all layers. Use audioAttributes to control mixing:
-d "resource[operationAttributes][0][mediaCompositionAttributesArray][0][audioAttributes][volume]=0.7"
This sets the overlay (avatar) audio to 70% and the main video audio to 30% (complementary model: main = 1 - overlay volume).