---
title: "Image to Video"
description: "Free image-to-video tool. Upload an image, pick a duration, add an optional caption, and download a shareable MP4. Rendered server-side with ffmpeg via a Pixeltable computed column."
keywords:
  - image to video
  - photo to video
  - turn image into video
  - mp4 from image
  - add text to image video
url: "https://pixeltable.com/tools/image-to-video"
---

# Image to Video

Free image-to-video tool. Upload an image, pick a duration, add an optional caption, and download a shareable MP4. Rendered server-side with ffmpeg via a Pixeltable computed column.

Free online tool by Pixeltable. Run it at https://pixeltable.com/tools/image-to-video (interactive, no sign-up).

## Features

- Image to MP4
- Optional caption
- H.264 download
- Free

## FAQ

### What formats can I upload?

JPG, PNG, or WebP up to 50 MB. The clip is exported as an MP4 (H.264).

### How long can the clip be?

Up to 15 seconds. Pick 3, 5, or 10 seconds for a quick share-ready loop.

### How is the caption added?

The caption is rendered onto the frame before encoding, so it works without any special fonts and looks consistent everywhere.


## Fact sheet

Last updated 2026-09-23.

| Fact | Value |
| --- | --- |
| Modality | Video |
| Inputs | Image or text prompt |
| Outputs | Generated video |
| Computed column | Video computed column; frames via frame_iterator |
| What updates | A new or changed row recomputes only that row. Unchanged rows stay cached. |
| Canonical doc | [Extract video frames](https://docs.pixeltable.com/howto/cookbooks/video/video-extract-frames) |

```python
import pixeltable as pxt
from pixeltable.functions.video import frame_iterator

TableModel = pxt.model_base()

class Videos(TableModel, name='videos'):
    video: pxt.Video

class Frames(
    TableModel,
    name='frames',
    base=Videos,
    iterator=frame_iterator(Videos.video, fps=1),
):
    pass
```