6.0 KiB
Embedded Video (media)
This demo consists of three files that work together:
- video.py — Python build script that generates a synthetic MP4 video using
imageio, then builds a 4-slide PPTX with the video embedded. Eachofficeclicall is logged to stdout. - video.pptx — The generated 4-slide deck: title, embedded video, video stats with a chart, and loop/trim demo.
- video.md — This file. Maps each slide to the video-embedding features it demonstrates.
Regenerate
cd examples/ppt
pip install imageio imageio-ffmpeg numpy
python3 video.py
# → video.pptx
The script generates a 3-second 640×360 MP4 (animated gradient + moving circle), extracts its first frame as a cover PNG, embeds them into the PPTX, then removes the temp files.
Slides
Slide 1 — Title Slide
Radial gradient background applied to a layout=title slide with title and subtitle placeholders.
officecli add video.pptx / --type slide --prop layout=title
officecli set video.pptx /slide[1] --prop background=radial:1B2838-4472C4-bl
officecli set video.pptx /slide[1]/placeholder[ctrTitle] \
--prop text="Video Demo" --prop color=FFFFFF --prop size=44
officecli set video.pptx /slide[1]/placeholder[subTitle] \
--prop text="Embedded video with officecli" --prop color=B4C7E7 --prop size=20
Features: layout=title, background=radial:color1-color2-corner, placeholder[ctrTitle]/[subTitle], color=, size=
Slide 2 — Embedded Video with autoplay and volume
The primary video demo. The MP4 is embedded with a cover image (poster), positioned to fill most of the slide, with autoplay enabled.
officecli add video.pptx / --type slide --prop title="Animated Video"
officecli set video.pptx /slide[2] --prop background=0D1B2A
officecli set video.pptx /slide[2]/shape[1] --prop color=FFFFFF
officecli add video.pptx /slide[2] --type video \
--prop src="/path/to/demo.mp4" \
--prop poster="/path/to/cover.png" \
--prop x=2cm --prop y=4cm --prop width=22cm --prop height=12.5cm \
--prop volume=80 \
--prop autoplay=true
src= embeds the MP4 into the PPTX package. poster= sets the static cover image shown before playback. volume= accepts 0–100. autoplay=true starts the video as soon as the slide is displayed.
Features: --type video, src= (file path to embed), poster= (cover image path), x=/y=/width=/height= in cm, volume= (0–100), autoplay= (true/false)
Slide 3 — Video Stats with Chart
Demonstrates a text info box and a bar chart on the same slide as the embedded video.
officecli add video.pptx / --type slide --prop title="Video Properties"
officecli set video.pptx /slide[3] --prop background=1B2838
officecli set video.pptx /slide[3]/shape[1] --prop color=FFFFFF
# Info box: multi-line text with code-like font
officecli add video.pptx /slide[3] --type shape \
--prop text="Resolution: 640x360\nFPS: 30\nDuration: 3s\nFormat: MP4" \
--prop font=Consolas --prop size=16 --prop color=B4C7E7 \
--prop x=1cm --prop y=4cm --prop width=10cm --prop height=6cm \
--prop fill=0D1B2A --prop line=4472C4 --prop linewidth=1pt
# Bar chart — frame color analysis
officecli add video.pptx /slide[3] --type chart \
--prop chartType=bar \
--prop title="Frame Colors" \
--prop categories="Red,Green,Blue" \
--prop "series1=Start:20,30,200" \
--prop "series2=End:80,30,80" \
--prop colors=E74C3C,27AE60 \
--prop x=13cm --prop y=4cm --prop width=12cm --prop height=8cm
Features: --type shape multi-line text (\n), font=Consolas, line= / linewidth= shape border, --type chart with chartType=bar, series1=Name:v1,v2,…, categories=, colors= on the same slide as a video element
Slide 4 — loop / trimStart / trimEnd
Demonstrates playback control: the video loops continuously over a sub-range of the source (0–2 seconds out of a 3-second video).
officecli add video.pptx / --type slide --prop title="loop / trimStart / trimEnd"
officecli set video.pptx /slide[4] --prop background=0D1B2A
officecli set video.pptx /slide[4]/shape[1] --prop color=FFFFFF
officecli add video.pptx /slide[4] --type video \
--prop src="/path/to/demo.mp4" \
--prop poster="/path/to/cover.png" \
--prop x=2cm --prop y=4cm --prop width=22cm --prop height=12.5cm \
--prop volume=60 \
--prop autoplay=true \
--prop loop=true \
--prop trimStart=0 \
--prop trimEnd=2
# Annotation label
officecli add video.pptx /slide[4] --type shape \
--prop text="loop=true trimStart=0 trimEnd=2\nVideo loops continuously; playback is clipped to the 0–2s range." \
--prop size=14 --prop color=B4C7E7 \
--prop x=1cm --prop y=17cm --prop width=24cm --prop height=2cm
| Property | Type | Effect |
|---|---|---|
loop=true |
bool | video restarts after it reaches the end |
trimStart=N |
number (seconds) | playback starts at N seconds |
trimEnd=N |
number (seconds) | playback stops at N seconds |
trimStart/trimEnd are clamped to the actual video duration. Both combine with loop=true to create a looping sub-clip.
Features: loop= (true/false), trimStart= (seconds), trimEnd= (seconds), combining trim + loop
Complete Feature Coverage
| Feature | Slide |
|---|---|
| layout=title placeholder-based slide | 1 |
| background=radial: gradient | 1 |
| background= solid hex | 2, 3, 4 |
| placeholder[ctrTitle] / [subTitle] | 1 |
| --type video element | 2, 4 |
| src= embed MP4 into package | 2, 4 |
| poster= cover image | 2, 4 |
| volume= (0–100) | 2, 4 |
| autoplay= | 2, 4 |
| loop= | 4 |
| trimStart= / trimEnd= (seconds) | 4 |
| x=/y=/width=/height= in cm | 2, 3, 4 |
| --type shape with multi-line text (\n) | 3, 4 |
| font=Consolas monospace label | 3 |
| line= / linewidth= shape border | 3 |
| --type chart bar chart on video slide | 3 |
| series1=Name:v1,v2, colors= | 3 |
Inspect the Generated File
officecli query video.pptx slide
officecli get video.pptx /slide[2]
officecli get video.pptx "/slide[2]/video[1]"
officecli get video.pptx "/slide[4]/video[1]"