Hardware-accelerated video transcoding with fine-grained control over codecs, Constant Rate Factor (CRF), target bitrates, frame rates, and audio tracks.
Need general upload and polling mechanics?
See File Conversion for multipart upload (POST /api/uploads), polling intervals, and download token authentication.
OrbConvert enforces strict container-codec pairings at request time. Requesting an encoder incompatible with your target container is rejected immediately with a 400 status:
| UI Codec | FFmpeg Encoder | Compatible Target Containers | Use Case |
|---|---|---|---|
| h264 | libx264 | mp4, mov, mkv, flv, avi, wmv, 3gp | Universal compatibility across all browsers and devices. |
H.264 is the only encoder the codec field offers. The h265 and vp9 rows that used to sit here were removed from the product on 2026-09-21 with the rest of the expensive end of the settings: measured that day, a 5-second clip at 2160p cost 7–14× the CPU of the same clip at its native size and wrote a 3.7× larger file for detail the source did not have (see the progress log, docs/converters/06-PROGRESS-LOG.md §S4.1).
WebM is deliberately absent from this table. It is written, but with VP8 through the container's own default rather than a user-selectable encoder — leave codec unset (the "Auto" choice) and the muxer supplies it.
{
"fileId": "<FILE_ID>",
"toFormat": "webm",
"options": {
"crf": 28,
"resolution": "1080p",
"bitrate": 2500,
"audioBitrate": 128
}
}| Parameter | Type | Required | Description |
|---|---|---|---|
| fileId | string | Yes | The storage key returned by POST /api/uploads. |
| toFormat | string | Yes | Target video container (e.g. 'mp4', 'webm', 'mov', 'mkv', 'avi'). Accepted: "mp4" | "webm" | "mov" | "mkv" | "avi" |
| options.codec | string | No | Video encoder. Must match the container compatibility matrix above; omit it to use the container's own default. Accepted: "h264" |
| options.crf | integer | No | Constant Rate Factor. Lower produces higher quality. 23 is standard default; 28 produces smaller web files. Accepted: 0 – 51 |
| options.bitrate | integer | No | Target video bitrate cap in kbps. Accepted: 100 – 100,000 |
| options.resolution | string | No | Target vertical height. Aspect ratio is preserved automatically. Accepted: "720p" | "1080p" |
| options.framerate | string | No | Output video framerate (frames per second). Accepted: "24" | "30" |
| options.audioBitrate | integer | No | Audio stream bitrate in kbps. Accepted: 8 – 512 |
| options.stripAudio | boolean | No | Removes all audio streams to produce a silent video. Accepted: true | false |
• Heavy Job Classification: Video encoding is classified as a CPU/GPU intensive job. Free tier users are allocated 1 serial heavy job at a time; Pro users are allocated 2 concurrent heavy jobs.
• Queue Backpressure: When the system queue is at capacity, requests return 503 Service Unavailable with a retryAfter seconds recommendation.
• Storage Warnings: Under severe server storage pressure, heavy video processing is temporarily throttled while automated cleanup routines reclaim disk space.
| HTTP | Error Code | Cause & Resolution |
|---|---|---|
| 400 | INVALID_OPTIONS | Requested codec is incompatible with container (e.g. h264 with webm). |
| 413 | FILE_TOO_LARGE | Video file exceeds upload size limit (Guest: 25 MB, Free: 100 MB, Pro: 2 GB, Business: 5 GB). |
| 429 | QUEUE_FULL_USER | Active video job queue limit reached for current user. |
| 503 | STORAGE_WARNING_HEAVY | Server disk pressure; large video encoding temporarily throttled. |
# Transcode to WebM at 1080p with the codec left unset, so the container applies its own default (VP8)
curl -X POST "https://api.orbconvert.com/api/conversions" \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"fileId": "<FILE_ID>",
"toFormat": "webm",
"options": {
"crf": 28,
"resolution": "1080p",
"bitrate": 2500,
"audioBitrate": 128
}
}'Was this page helpful?