# Multimedia

Blocks for processing and manipulating video and audio files.

## Add Audio To Video

### What it is

Block to attach an audio file to a video file using moviepy.

### How it works

This block combines a video file with an audio file using the moviepy library. The audio track is attached to the video, optionally with volume adjustment via the volume parameter (1.0 = original volume).

Input files can be URLs, data URIs, or local paths. The output can be returned as either a file path or base64 data URI.

### Inputs

| Input                | Description                                                       | Type                        | Required |
| -------------------- | ----------------------------------------------------------------- | --------------------------- | -------- |
| video\_in            | Video input (URL, data URI, or local path).                       | str (file)                  | Yes      |
| audio\_in            | Audio input (URL, data URI, or local path).                       | str (file)                  | Yes      |
| volume               | Volume scale for the newly attached audio track (1.0 = original). | float                       | No       |
| output\_return\_type | Return the final output as a relative path or base64 data URI.    | "file\_path" \| "data\_uri" | No       |

### Outputs

| Output     | Description                                               | Type       |
| ---------- | --------------------------------------------------------- | ---------- |
| error      | Error message if the operation failed                     | str        |
| video\_out | Final video (with attached audio), as a path or data URI. | str (file) |

### Possible use case

**Add Voiceover**: Combine generated voiceover audio with video content for narrated videos.

**Background Music**: Add music tracks to silent videos or replace existing audio.

**Audio Replacement**: Swap the audio track of a video for localization or accessibility.

***

## Loop Video

### What it is

Block to loop a video to a given duration or number of repeats.

### How it works

This block extends a video by repeating it to reach a target duration or number of loops. Set duration to specify the total length in seconds, or use n\_loops to repeat the video a specific number of times.

The looped video is seamlessly concatenated and can be output as a file path or base64 data URI.

### Inputs

| Input                | Description                                                                            | Type                        | Required |
| -------------------- | -------------------------------------------------------------------------------------- | --------------------------- | -------- |
| video\_in            | The input video (can be a URL, data URI, or local path).                               | str (file)                  | Yes      |
| duration             | Target duration (in seconds) to loop the video to. If omitted, defaults to no looping. | float                       | No       |
| n\_loops             | Number of times to repeat the video. If omitted, defaults to 1 (no repeat).            | int                         | No       |
| output\_return\_type | How to return the output video. Either a relative path or base64 data URI.             | "file\_path" \| "data\_uri" | No       |

### Outputs

| Output     | Description                                                    | Type |
| ---------- | -------------------------------------------------------------- | ---- |
| error      | Error message if the operation failed                          | str  |
| video\_out | Looped video returned either as a relative path or a data URI. | str  |

### Possible use case

**Background Videos**: Loop short clips to match the duration of longer audio or content.

**GIF-Like Content**: Create seamlessly looping video content for social media.

**Filler Content**: Extend short video clips to meet minimum duration requirements.

***

## Media Duration

### What it is

Block to get the duration of a media file.

### How it works

This block analyzes a media file and returns its duration in seconds. Set is\_video to true for video files or false for audio files to ensure proper parsing.

The input can be a URL, data URI, or local file path. The duration is returned as a float for precise timing calculations.

### Inputs

| Input     | Description                                           | Type       | Required |
| --------- | ----------------------------------------------------- | ---------- | -------- |
| media\_in | Media input (URL, data URI, or local path).           | str (file) | Yes      |
| is\_video | Whether the media is a video (True) or audio (False). | bool       | No       |

### Outputs

| Output   | Description                              | Type  |
| -------- | ---------------------------------------- | ----- |
| error    | Error message if the operation failed    | str   |
| duration | Duration of the media file (in seconds). | float |

### Possible use case

**Video Processing Prep**: Get video duration before deciding how to loop, trim, or synchronize it.

**Audio Matching**: Determine audio length to generate matching-length video content.

**Content Validation**: Verify that uploaded media meets duration requirements.

***


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://agpt.co/docs/integrations/block-integrations/multimedia.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
