Files
wehub-resource-sync 8cb1f9f479
Publish SDK (PyPI) / publish (push) Has been cancelled
Publish SDK (npm) / publish (@aionui/officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (windows-latest) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/officecli-sdk) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/sdk) (push) Has been cancelled
Publish SDK (npm) / publish (officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (macos-latest) (push) Has been cancelled
SDK smoke / smoke (ubuntu-latest) (push) Has been cancelled
Skill parity / diff (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:09:29 +08:00

153 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. Each `officecli` call 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
```bash
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.
```bash
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.
```bash
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 0100. `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=` (0100), `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.
```bash
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 (02 seconds out of a 3-second video).
```bash
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 02s 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=** (0100) | 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
```bash
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]"
```