> ## Documentation Index
> Fetch the complete documentation index at: https://docs.convertly.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Video transforms

> Extract poster frames, trim clips, transcode to MP4/WebM, generate animated GIFs, and build spritesheets for scrub previews.

Stored **video** files in Convertly Storage, or video fetched from a configured **HTTPS or private-bucket origin**, use the same CDN URL pattern as images. Pass poster or image-format params to extract a frame, video output formats to trim and transcode, or spritesheet/VTT formats for timeline hover previews.

Use **Image CDN → Transform Lab** in the dashboard to preview posters, clips, and GIF output against stored files or library paths before you ship URLs to production.

<Frame caption="Poster frame. `?t=3.5&w=800&format=webp`.">
  <img src="https://cdn.convertly.sh/cvly/o/convertly-site/docs/cdn-transforms/examples/video-poster.webp?v=docs-20260717&format=auto&q=auto:eco" alt="Video poster frame example" className="w-full rounded-xl" />
</Frame>

<Frame caption="Animated GIF. `?format=gif&so=1&du=3&w=480&fps=12`.">
  <img src="https://mintcdn.com/convertly-0a879af2/EZtYBiBD1X2nxlKB/public/docs/cdn-transforms/examples/video-gif.gif?s=ff31715ddc2373f1ce62723c1724ab97" alt="Video to GIF example" className="w-full rounded-xl" width="480" height="270" data-path="public/docs/cdn-transforms/examples/video-gif.gif" />
</Frame>

<Frame caption="Spritesheet grid. `?format=spritesheet&w=140&cols=4&interval=3&du=20`.">
  <img src="https://cdn.convertly.sh/cvly/o/convertly-site/docs/cdn-transforms/examples/video-spritesheet.webp?v=docs-20260717&format=auto&q=auto:eco" alt="Video spritesheet example" className="w-full rounded-xl" />
</Frame>

<Frame caption="Trimmed clip preview. `?format=mp4&w=1280&so=0&du=30`.">
  <img src="https://cdn.convertly.sh/cvly/o/convertly-site/docs/cdn-transforms/examples/video-mp4.webp?v=docs-20260717&format=auto&q=auto:eco" alt="Trimmed video clip example" className="w-full rounded-xl" />
</Frame>

## Poster frames

Extract a raster frame, then run the normal image pipeline (resize, format negotiation, smart crop):

```
https://cdn.convertly.sh/{endpointNamespace}/{videoFileId}?t=3.5&w=800&format=webp
https://cdn.convertly.sh/{endpointNamespace}/{videoFileId}?poster=1&w=1200&format=auto
```

| Param                            | Purpose                                        |
| -------------------------------- | ---------------------------------------------- |
| `t` or `time`                    | Timestamp in seconds for the frame to extract. |
| `poster=1`                       | Explicit poster mode (useful with presets).    |
| `w`, `h`, `format`, `gravity`, … | Same image params as raster sources.           |

Without poster, spritesheet, VTT, GIF, or video-format params, bare video URLs redirect to a signed download (`302`).

## Animated GIF

Transcode a clip segment to an animated GIF on the CDN edge:

```
https://cdn.convertly.sh/{endpointNamespace}/{videoFileId}?format=gif&so=1&du=3&w=480&fps=12
```

| Param                   | Purpose                                               |
| ----------------------- | ----------------------------------------------------- |
| `format=gif` or `gif=1` | GIF output mode.                                      |
| `so` / `start` / `ss`   | Clip start time in seconds.                           |
| `du` / `duration`       | Clip length in seconds (max 300).                     |
| `w`                     | Output width in pixels (height follows aspect ratio). |
| `fps`                   | Frame rate (`4`–`24`, default `12`).                  |

## Spritesheets and trick play (VTT)

Generate a contact-sheet grid of sampled frames for scrub-bar hover previews:

```
https://cdn.convertly.sh/{endpointNamespace}/{videoFileId}?format=spritesheet&w=160&cols=6&interval=2
https://cdn.convertly.sh/{endpointNamespace}/{videoFileId}?format=vtt&w=160&cols=6&interval=2
```

| Param                | Aliases                                              | Purpose                                                                   |
| -------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------- |
| `format=spritesheet` | `format=sprite`, `spritesheet=1`                     | Single grid image of sampled frames.                                      |
| `format=vtt`         | `vtt=1`                                              | WebVTT file mapping timestamps → `#xywh=` regions on the spritesheet URL. |
| `w`                  | `spriteW`, `video-spritesheet-w`                     | Thumbnail tile width in pixels (default `160`).                           |
| `h`                  | `spriteH`, `video-spritesheet-h`                     | Optional fixed tile height.                                               |
| `cols`               | `columns`, `spriteCols`, `video-spritesheet-columns` | Grid columns (`auto` ≈ square grid).                                      |
| `interval`           | `spriteInterval`, `video-spritesheet-interval`       | Seconds between sampled frames (default `2`).                             |
| `frames`             | `spriteFrames`                                       | Max frames in the grid (default `36`, max `120`).                         |
| `spriteFormat`       | `video-spritesheet-format`                           | Spritesheet image format: `jpg`, `webp`, `png`.                           |
| `so`, `du`, `eo`     |                                                      | Optional clip window (same as clip delivery).                             |

Point a `<video>` metadata track or player thumbnail plugin at the VTT URL. Each cue references the spritesheet image at the same transform params with a `#xywh=x,y,w,h` fragment:

```html theme={"system"}
<video controls src="https://cdn.convertly.sh/{endpointNamespace}/{videoFileId}?format=mp4&w=1280">
  <track kind="metadata" src="https://cdn.convertly.sh/{endpointNamespace}/{videoFileId}?format=vtt&w=160&cols=6&interval=2" />
</video>
```

For one-off contact sheets without VTT, the Media API [`POST /api/media/storyboard`](/docs/media-tools) remains available. CDN spritesheets use the same FFmpeg tile engine with interval-based sampling.

## Clip delivery

Use video output formats (`mp4`, `webm`, `mov`, `gif`) to trim, resize, and transcode:

```
https://cdn.convertly.sh/{endpointNamespace}/{videoFileId}?format=mp4&w=1280&q=80
https://cdn.convertly.sh/{endpointNamespace}/{videoFileId}?format=webm&so=5&du=15&mute=1
https://cdn.convertly.sh/{endpointNamespace}/{videoFileId}?format=gif&so=2&du=4&w=480&fps=12
```

| Param                 | Purpose                                                                 |
| --------------------- | ----------------------------------------------------------------------- |
| `format` / `f` / `fm` | Output container: `mp4`, `webm`, `mov`, `gif`, `spritesheet`, or `vtt`. |
| `so` / `start` / `ss` | Clip start time in seconds.                                             |
| `du` / `duration`     | Clip length in seconds (max 300).                                       |
| `eo` / `end`          | Clip end time in seconds.                                               |
| `w`, `h`              | Scale output (maintains aspect ratio).                                  |
| `q`                   | Encode quality hint (`20`–`100`).                                       |
| `mute=1` / `an=1`     | Strip audio track.                                                      |
| `fps`                 | GIF frame rate (`4`–`24`, default `12`).                                |

```html theme={"system"}
<video src="https://cdn.convertly.sh/marketing/demo-clip?format=mp4&w=1280&so=0&du=30" controls />
```

For full async video pipelines (audio extract, streaming packaging), use the [media tools API](/docs/media-tools) or [video streaming](/docs/video-streaming) product.
