A video processing API takes a video file you already have and converts it: a different format, codec, resolution or bitrate (transcoding, also called encoding), plus jobs such as extracting audio, making thumbnails or burning in subtitles. In October 2026 the main options are AWS Elemental MediaConvert and Coconut, which charge per output minute (from $0.0075), and Rendi and Transloadit, which charge by gigabytes processed. Rendi is a true FFmpeg API: you send an FFmpeg command and it runs it for you.

This guide explains how processing differs from editing, compares the providers (prices checked on each vendor's page on 18 October 2026), weighs FFmpeg as a service against a declarative API and plain self-hosted FFmpeg, and shows the same three jobs both ways: the FFmpeg command and the JSON2Video JSON. It is one of the six kinds of video API.


Video processing vs video editing

Video processing API Video editing API
You sendA file and the target format, or an FFmpeg commandA description of the finished video: scenes, text, voice-over, captions, music
You getThe same video in another format, size or codec; or one or more renditions of itA new video composed from several assets
Typical jobsConvert MOV to MP4, resize to 720p, compress, extract audio, make HLS or DASH ladders, thumbnailsProduct videos, social clips, narrated videos, captioned videos, personalised videos
Billed byOutput minutes or gigabytes processedSeconds of video rendered

The boundary is blurry because both run on FFmpeg underneath. A useful rule: if the output is the same video in a different shape, you need processing; if it is a new video built from parts, you need editing.


Video processing and transcoding APIs compared

Provider What you send Price Free tier
AWS Elemental MediaConvertA job: input file plus output settings (formats, codecs, ladders)Per normalised output minute. Basic tier $0.0075, Professional tier $0.012 (first tier of each, US East Ohio). HD counts 2×, 4K counts 4×None stated on the pricing page
CoconutA job: input file plus output formatsPer output minute: SD $0.0075, HD $0.015, UHD $0.03, audio $0.00325Test plan: inputs up to 1 minute, one output at a time, no card
RendiAn FFmpeg command and the input file URLsBy data processed (input plus output size). Pro (4 vCPU, 10-minute runtime) $25 a month for 250 GB; $100 a month for 1 TB with unlimited runtime. No charge by codec, duration or resolution50 GB a month
Transloadit"Assemblies": steps such as import, encode, thumbnails, exportLite $29 a month for 15 GB ($2 per extra GB). Pro $54 a month billed yearly ($69 billed monthly) for 40 GB ($1.80 per extra GB)Community: 5 GB a month, processing stops at the limit
CloudinaryA video URL with transformation parametersCredits: 1 credit covers 1,000 transformations, 1 GB of storage or 1 GB of image bandwidth. Video delivery counts 2 GB per creditFree plan: 25 credits a month

Checked on 18 October 2026. Sources: AWS MediaConvert pricing, Coconut pricing, Rendi pricing, Transloadit pricing, Cloudinary pricing. Prices are in USD. MediaConvert has more tiers and regions than shown. Cloudinary's page gives no separate rate for video transformations, so check its dashboard for real usage.

What the prices mean. Converting 500 minutes of video to a single 1080p rendition costs about $7.50 on MediaConvert Basic (500 × $0.0075 × 2 for HD) and $7.50 on Coconut (500 × $0.015). The data-based plans are cheaper for short, light files and costlier for long, heavy ones, so estimate with your own file sizes before you choose.

Streaming ladders. If you need HLS or DASH with several bitrates (adaptive streaming), use MediaConvert, Coconut, Transloadit or a video hosting API such as Mux that encodes for you. See hosting APIs.

AI agents. JSON2Video has an official MCP server (the @json2video/cli package, started over stdio). Rendi publishes an MCP server for its documentation only. We found no official MCP server for MediaConvert or Coconut (checked 18 October 2026).


FFmpeg as a service vs a declarative API vs self-hosted FFmpeg

All three run FFmpeg or something like it. They differ in what you write and what you maintain.

Self-hosted FFmpeg FFmpeg as a service (Rendi) Declarative API (JSON2Video)
You writeFFmpeg commandsThe same FFmpeg commands, sent by APIJSON describing scenes and elements
You runServers, queues, scaling, updatesNothingNothing
CostSoftware is free; you pay for compute and engineering timeBy GB processedBy seconds of video rendered
ControlTotal: every codec, flag and filterTotal, within the service's FFmpeg build and runtime limitsThe options the JSON exposes
Best forTranscoding, compression, batch conversion, anything you already scriptTeams with working commands who do not want to host themComposed videos: scenes, text, voice-over, captions, music, templates
Weak spotOps work; complex filter graphs are hard to write and debugStill FFmpeg syntax; you build the composition logicNot a transcoder; no streaming ladders

Our honest guidance.

New to FFmpeg? Our free FFmpeg course starts with what FFmpeg is and how to install it, and the lesson on FFmpeg wrappers lists libraries for calling it from Python, Node.js, PHP, Java and .NET.


The same job in FFmpeg and in JSON2Video

Three common jobs, each as an FFmpeg command and as a JSON2Video movie. The commands were run with FFmpeg 9.0.1, except the subtitles one (see its note); the JSON passes json2video validate from @json2video/cli. The clips are samples on our CDN, and they have no audio track, which keeps the commands short.

1. Trim and join two clips

Take 5 seconds of one clip starting at second 2, then the first 4 seconds of another, and join them (9 seconds in total).

FFmpeg

ffmpeg \
  -ss 2 -t 5 -i beach-01.mp4 \
  -t 4 -i new-york-01.mp4 \
  -filter_complex "[0:v]fps=30,setsar=1[v0];[1:v]fps=30,setsar=1[v1];[v0][v1]concat=n=2:v=1:a=0[v]" \
  -map "[v]" -c:v libx264 -pix_fmt yuv420p \
  -y output.mp4

Here -ss and -t before -i set where each input starts and how long it lasts, fps and setsar make the two clips match, and the concat filter joins them. The clips must have the same resolution (add a scale filter if not). With audio you would also join the audio streams (a=1).

JSON2Video

{
  "resolution": "full-hd",
  "scenes": [
    {
      "elements": [
        { "type": "video", "src": "https://assets.json2video.com/assets/videos/beach-01.mp4", "seek": 2, "duration": 5 }
      ]
    },
    {
      "elements": [
        { "type": "video", "src": "https://assets.json2video.com/assets/videos/new-york-01.mp4", "duration": 4 }
      ]
    }
  ]
}

seek is the start point and duration the length; scenes play one after another. The resize property (cover or fit) sets how a clip of another size fills the frame. The output is a 1080p MP4 of 9 seconds. Add "transition": { "style": "fade", "duration": 0.5 } to the second scene for a cross-fade.

2. Burn subtitles into a video

FFmpeg

ffmpeg -i sample-house-drone.mp4 \
  -vf "subtitles=captions.srt:force_style='FontSize=24'" \
  -c:a copy \
  -y output.mp4

The subtitles filter draws an existing SRT, ASS or similar file on the picture. It needs an FFmpeg build with libass, and it does not create the captions: you need the .srt file already (FFmpeg docs: subtitles filter). We could not run this one on our test machine, whose FFmpeg was built without libass, so we checked the syntax against the FFmpeg documentation.

JSON2Video

{
  "resolution": "full-hd",
  "scenes": [
    {
      "elements": [
        { "type": "video", "src": "https://cdn.json2video.com/assets/videos/sample-house-drone.mp4" }
      ]
    }
  ],
  "elements": [
    {
      "type": "subtitles",
      "captions": "1\n00:00:01,000 --> 00:00:04,000\nA quiet house among the trees.\n\n2\n00:00:04,500 --> 00:00:07,500\nOpen for visits this weekend.\n",
      "settings": { "style": "classic", "position": "bottom-center" }
    }
  ]
}

This is the like-for-like version: you supply the SRT (as a URL or inline, as here). If you leave out captions, the subtitles element transcribes the movie's audio track automatically, which FFmpeg cannot do on its own. The sample clip is silent, so it needs the captions here. Styles include word-by-word highlighting.

3. Add background music

Put a quiet music track under a video, looped or cut to the video's length.

FFmpeg

ffmpeg \
  -i sample-house-drone.mp4 \
  -stream_loop -1 -i soft-piano.mp3 \
  -filter_complex "[1:a]volume=0.2[music]" \
  -map 0:v -map "[music]" \
  -c:v copy -shortest \
  -y output.mp4

-stream_loop -1 repeats the music indefinitely and -shortest stops at the end of the video; -c:v copy leaves the picture untouched. If the video already had a voice track, you would mix it with the music using amix; our lesson how to add audio to video with FFmpeg covers that case and more.

JSON2Video

{
  "resolution": "full-hd",
  "scenes": [
    {
      "elements": [
        { "type": "video", "src": "https://cdn.json2video.com/assets/videos/sample-house-drone.mp4" }
      ]
    }
  ],
  "elements": [
    { "type": "audio", "src": "https://cdn.json2video.com/assets/audios/soft-piano.mp3", "volume": 0.2, "loop": -1, "duration": -2 }
  ]
}

An audio element at movie level plays under all scenes; "loop": -1 with "duration": -2 repeats it for the length of the movie. Everything else you may add (a voice-over, captions) mixes in without audio filters.

What the comparison shows. For one operation on one file, FFmpeg is as short as the JSON and costs nothing. The JSON pulls ahead when jobs combine (trim, join, caption, add music and a voice-over in one video) and when the same layout is reused with new data, because you change values and not a filter graph.

Building videos instead of converting them? Describe the video in JSON and get an MP4 from one API call. The free account includes 600 credits (10 minutes of video, watermarked), no credit card. Get a free API key →


What JSON2Video does not do

JSON2Video is a video editing and rendering API, not a transcoder or packager. It does not create HLS or DASH streams, adaptive-bitrate ladders, DRM or multiple renditions of one file, and it is not meant for batch format conversion of files you simply want in another codec. For those jobs use MediaConvert or Coconut, a hosting API such as Mux that encodes on upload, or FFmpeg itself. If your pipeline also needs AI footage, see the AI video generation APIs guide.


Frequently asked questions

What is a video processing API?

A video processing API converts a video file you already have: a different format, codec, resolution or bitrate (transcoding or encoding), plus tasks such as extracting audio, creating thumbnails or burning in subtitles. You send the file and the settings, or an FFmpeg command, and download the result. AWS MediaConvert, Coconut, Rendi, Transloadit and Cloudinary are common choices.

What is the difference between transcoding and encoding?

Encoding turns raw or uncompressed video into a compressed format such as H.264. Transcoding converts video that is already compressed into another codec, size or bitrate. In practice, vendors use both words for the same service, and video transcoding and encoding APIs do both.

Is there an FFmpeg API?

FFmpeg itself is a command-line tool, not a web API. "FFmpeg as a service" products such as Rendi accept your FFmpeg command and input file URLs through an API, run them on their servers and return the output. Rendi's pricing (checked on 18 October 2026) starts with a free tier of 50 GB a month and Pro at $25 a month for 250 GB. You can also wrap FFmpeg in your own service; our FFmpeg wrappers lesson lists libraries for it.

What is an FFmpeg alternative for building videos?

For converting files, FFmpeg has no real rival: it is free and handles nearly every format. For composing videos (scenes, text, voice-over, captions, music, templates) a declarative video API such as JSON2Video replaces long FFmpeg filter graphs with JSON that describes the result. It does not replace FFmpeg for transcoding or streaming ladders.

How much does video transcoding cost?

On the per-minute services, an HD output minute costs $0.015 on Coconut and $0.015 on AWS MediaConvert Basic ($0.0075 with HD counting double), so 500 minutes cost about $7.50 on either. Data-based services charge by gigabytes processed instead: Rendi from $25 a month for 250 GB, Transloadit from $29 a month for 15 GB. Prices were checked on 18 October 2026. Self-hosted FFmpeg is free apart from your servers.

Can JSON2Video convert video formats or create HLS streams?

No. JSON2Video renders new videos from JSON (scenes, clips, text, voice-over, captions, music) as MP4. It does not produce HLS or DASH streams, bitrate ladders or format conversions of existing files. For those, use AWS MediaConvert, Coconut, a hosting API such as Mux, or FFmpeg.

Should I self-host FFmpeg or use an API?

Self-host when the jobs are simple, steady and already scripted: FFmpeg is free and gives you full control. Use an API when you would otherwise run and scale servers and queues, when load is bursty, or when you want to build composed videos without writing filter graphs.

More in this section: video APIs: the six types and how to choose, video editing API, AI video generation API and video hosting API. To learn FFmpeg itself, start the FFmpeg course or see how to crop a video and FFmpeg filters.

Published on October 18th, 2026

Author
Joaquim Cardona
Joaquim Cardona Senior Internet business executive with more than 20 years of broad experience in Internet business, media sector, digital marketing, online video and mobile technologies.