Ffmpeg Api Merge Audio-Video Video to Video

fal-ai/ffmpeg-api/merge-audio-video
Merge videos with standalone audio files or audio from video files.
Inference
Commercial use

About

Combine

1. Calling the API#

Install the client#

The client provides a convenient way to interact with the model API.

npm install --save @fal-ai/client

Setup your API Key#

Set FAL_KEY as an environment variable in your runtime.

export FAL_KEY="YOUR_API_KEY"

Submit a request#

The client API handles the API submit protocol. It will handle the request status updates and return the result when the request is completed.

import { fal } from "@fal-ai/client";

const result = await fal.subscribe("fal-ai/ffmpeg-api/merge-audio-video", {
  input: {
    video_url: "https://storage.googleapis.com/falserverless/example_inputs/ffmpeg-video.mp4",
    audio_url: "https://storage.googleapis.com/falserverless/example_inputs/ffmpeg-audio.wav"
  },
  logs: true,
  onQueueUpdate: (update) => {
    if (update.status === "IN_PROGRESS") {
      update.logs.map((log) => log.message).forEach(console.log);
    }
  },
});
console.log(result.data);
console.log(result.requestId);

2. Authentication#

The API uses an API Key for authentication. It is recommended you set the FAL_KEY environment variable in your runtime when possible.

API Key#

In case your app is running in an environment where you cannot set environment variables, you can set the API Key manually as a client configuration.
import { fal } from "@fal-ai/client";

fal.config({
  credentials: "YOUR_FAL_KEY"
});

3. Queue#

Submit a request#

The client API provides a convenient way to submit requests to the model.

import { fal } from "@fal-ai/client";

const { request_id } = await fal.queue.submit("fal-ai/ffmpeg-api/merge-audio-video", {
  input: {
    video_url: "https://storage.googleapis.com/falserverless/example_inputs/ffmpeg-video.mp4",
    audio_url: "https://storage.googleapis.com/falserverless/example_inputs/ffmpeg-audio.wav"
  },
  webhookUrl: "https://optional.webhook.url/for/results",
});

Fetch request status#

You can fetch the status of a request to check if it is completed or still in progress.

import { fal } from "@fal-ai/client";

const status = await fal.queue.status("fal-ai/ffmpeg-api/merge-audio-video", {
  requestId: "764cabcf-b745-4b3e-ae38-1200304cf45b",
  logs: true,
});

Get the result#

Once the request is completed, you can fetch the result. See the Output Schema for the expected result format.

import { fal } from "@fal-ai/client";

const result = await fal.queue.result("fal-ai/ffmpeg-api/merge-audio-video", {
  requestId: "764cabcf-b745-4b3e-ae38-1200304cf45b"
});
console.log(result.data);
console.log(result.requestId);

4. Files#

Some attributes in the API accept file URLs as input. Whenever that's the case you can pass your own URL or a Base64 data URI.

Data URI (base64)#

You can pass a Base64 data URI as a file input. The API will handle the file decoding for you. Keep in mind that for large files, this alternative although convenient can impact the request performance.

Hosted files (URL)#

You can also pass your own URLs as long as they are publicly accessible. Be aware that some hosts might block cross-site requests, rate-limit, or consider the request as a bot.

Uploading files#

We provide a convenient file storage that allows you to upload files and use them in your requests. You can upload files using the client API and use the returned URL in your requests.

import { fal } from "@fal-ai/client";

const file = new File(["Hello, World!"], "hello.txt", { type: "text/plain" });
const url = await fal.storage.upload(file);

Read more about file handling in our file upload guide.

5. Schema#

Input#

video_url string* required

URL of the video file to use as the video track Default value: undefined

audio_url string* required

URL of the audio file to use as the audio track Default value: undefined

start_offset float

Offset in seconds for when the audio should start relative to the video Default value: 0

{
  "video_url": "https://storage.googleapis.com/falserverless/example_inputs/ffmpeg-video.mp4",
  "audio_url": "https://storage.googleapis.com/falserverless/example_inputs/ffmpeg-audio.wav"
}

Output#

video File* required

Output video with merged audio. Default value: undefined

{
  "video": {
    "url": "",
    "content_type": "image/png",
    "file_name": "z9RV14K95DvU.png",
    "file_size": 4404019
  }
}

Other types#

Track#

id string* required

Unique identifier for the track Default value: undefined

type string* required

Type of track ('video' or 'audio') Default value: undefined

keyframes list<Keyframe>* required

List of keyframes that make up this track Default value: undefined

Audio#

media_type string

Type of media (always 'audio') Default value: "audio"

url string* required

URL where the media file can be accessed Default value: undefined

content_type string* required

MIME type of the media file Default value: undefined

file_name string* required

Original filename of the media Default value: undefined

file_size integer* required

Size of the file in bytes Default value: undefined

duration float* required

Duration of the media in seconds Default value: undefined

bitrate integer* required

Overall bitrate of the media in bits per second Default value: undefined

codec string* required

Codec used to encode the media Default value: undefined

container string* required

Container format of the media file (e.g., 'mp4', 'mov') Default value: undefined

channels integer* required

Number of audio channels Default value: undefined

sample_rate integer* required

Audio sample rate in Hz Default value: undefined

Keyframe#

timestamp float* required

The timestamp in milliseconds where this keyframe starts Default value: undefined

duration float* required

The duration in milliseconds of this keyframe Default value: undefined

url string* required

The URL where this keyframe's media file can be accessed Default value: undefined

Video#

media_type string

Type of media (always 'video') Default value: "video"

url string* required

URL where the media file can be accessed Default value: undefined

content_type string* required

MIME type of the media file Default value: undefined

file_name string* required

Original filename of the media Default value: undefined

file_size integer* required

Size of the file in bytes Default value: undefined

duration float* required

Duration of the media in seconds Default value: undefined

bitrate integer* required

Overall bitrate of the media in bits per second Default value: undefined

codec string* required

Codec used to encode the media Default value: undefined

container string* required

Container format of the media file (e.g., 'mp4', 'mov') Default value: undefined

fps integer* required

Frames per second Default value: undefined

frame_count integer* required

Total number of frames in the video Default value: undefined

timebase string* required

Time base used for frame timestamps Default value: undefined

resolution Resolution* required

Video resolution information Default value: undefined

format VideoFormat* required

Detailed video format information Default value: undefined

audio AudioTrack

Audio track information if video has audio Default value: undefined

start_frame_url string

URL of the extracted first frame Default value: undefined

end_frame_url string

URL of the extracted last frame Default value: undefined

File#

url string* required

The URL where the file can be downloaded from. Default value: undefined

content_type string

The mime type of the file. Default value: undefined

file_name string

The name of the file. It will be auto-generated if not provided. Default value: undefined

file_size integer

The size of the file in bytes. Default value: undefined

Image#

url string* required

The URL where the file can be downloaded from. Default value: undefined

content_type string

The mime type of the file. Default value: undefined

file_name string

The name of the file. It will be auto-generated if not provided. Default value: undefined

file_size integer

The size of the file in bytes. Default value: undefined

width integer

The width of the image in pixels. Default value: undefined

height integer

The height of the image in pixels. Default value: undefined

Resolution#

aspect_ratio string* required

Display aspect ratio (e.g., '16:9') Default value: undefined

width integer* required

Width of the video in pixels Default value: undefined

height integer* required

Height of the video in pixels Default value: undefined

VideoFormat#

container string* required

Container format of the video Default value: undefined

video_codec string* required

Video codec used (e.g., 'h264') Default value: undefined

profile string* required

Codec profile (e.g., 'main', 'high') Default value: undefined

level float* required

Codec level (e.g., 4.1) Default value: undefined

pixel_format string* required

Pixel format used (e.g., 'yuv420p') Default value: undefined

bitrate integer* required

Video bitrate in bits per second Default value: undefined

AudioTrack#

codec string* required

Audio codec used (e.g., 'aac', 'mp3') Default value: undefined

channels integer* required

Number of audio channels Default value: undefined

sample_rate integer* required

Audio sample rate in Hz Default value: undefined

bitrate integer* required

Audio bitrate in bits per second Default value: undefined

Related Models