Skip to main content
When you upload content, shortkit’s transcoding pipeline processes it into multiple formats optimized for adaptive streaming across all devices and network conditions.

What gets generated

For every uploaded video, the pipeline produces:
Asset TypeDescription
ABR ladderMultiple quality renditions in H.264 and AV1
HLS manifests.m3u8 master and variant playlists
DASH manifests.mpd manifest files
Progressive MP4Single-file download for short content
First-frame thumbnailsPer-rendition quality
Preview GIF/WebPAnimated 3-second loop
Storyboard spritesScrubber thumbnail strip
Auto-captionsServer-side speech-to-text (if enabled)

ABR rendition ladder

The adaptive bitrate ladder ensures smooth playback across varying network conditions:
RenditionResolutionH.264 BitrateAV1 BitrateSegment Duration
1080p1920×1080~4,500 kbps~2,500 kbps4 seconds
720p1280×720~2,500 kbps~1,500 kbps4 seconds
480p854×480~1,200 kbps~700 kbps4 seconds
360p640×360~700 kbps~400 kbps4 seconds
240p426×240~400 kbps~250 kbps4 seconds
144p256×144~200 kbps~120 kbps4 seconds
AV1 provides ~40% better compression than H.264 at equivalent quality. The SDK automatically selects AV1 on devices with hardware decode support.

Codec selection

Both codecs are generated by default:
  • H.264 (AVC): Universal compatibility, supported everywhere
  • AV1: Better compression, hardware decode on newer devices (iPhone 15+, Pixel 6+, etc.)
The SDK handles codec selection automatically based on device capabilities.

Encoding settings

Video encoding

SettingH.264AV1
ProfileHighMain
Level4.15.1
Presetmedium6
GOP size2 seconds2 seconds
B-frames33
Rate controlCRF (quality-based)CRF

Audio encoding

SettingValue
CodecAAC-LC
Bitrate128 kbps (stereo)
Sample rate48 kHz
ChannelsStereo (or source)

Short content optimization

For videos under 15 seconds, the pipeline additionally generates a progressive MP4:
  • Resolution: 720p
  • Single file: No segmentation overhead
  • Faster startup: No manifest negotiation required
The SDK automatically uses progressive MP4 for short content when network conditions allow.

Thumbnail generation

First-frame thumbnails

Generated at each rendition’s resolution to prevent quality mismatch when transitioning from thumbnail to video:
RenditionThumbnail Size
1080p1920×1080
720p1280×720
480p854×480
360p640×360

Preview GIF/WebP

Animated preview of the first 3 seconds:
  • Resolution: 360p
  • Frame rate: 10 fps
  • Looped: Yes
  • Format: WebP (with GIF fallback)
Used for entry widget previews and hover states.

Storyboard sprites

A sprite sheet of frames at regular intervals for scrubber thumbnail preview:
  • Interval: Every 2 seconds
  • Thumbnail size: 160×90
  • Format: JPEG sprite sheet + VTT timing file

Auto-captioning

Server-side speech-to-text generates caption tracks automatically:

Supported languages

English, Spanish, French, German, Italian, Portuguese, Dutch, Polish, Russian, Japanese, Korean, Chinese (Simplified), Chinese (Traditional), Arabic, Hindi, and more.

Custom vocabulary

Improve accuracy for domain-specific terms:
# Add custom vocabulary phrases
curl -X POST https://api.shortkit.dev/v1/transcription-vocabulary \
  -H "Authorization: Bearer sk_live_your_secret_key" \
  -H "Content-Type: application/json" \
  -d '{
    "phrases": [
      "shortkit",
      "ABR",
      "TikTok",
      "CNN",
      "specific-product-name"
    ]
  }'
  • Maximum 1,000 phrases per organization
  • Managed via Admin Portal (Settings → Transcription Vocabulary) or API

Caption output

Generated as VTT format, synchronized with video timing:
WEBVTT

00:00:00.000 --> 00:00:02.500
Welcome to today's breaking news coverage.

00:00:02.500 --> 00:00:05.000
We're following a developing story...

4K and HDR

When source content is 4K or HDR:

4K content

  • Top rendition preserves 4K resolution (3840×2160)
  • Lower renditions scaled as normal

HDR content (HDR10/Dolby Vision)

  • HDR metadata preserved in top rendition
  • SDR renditions generated for non-HDR devices
  • Manifest includes HDR capability flags

Watermarking

Optional watermarking applied during transcoding:

Visible watermark

curl -X PUT https://api.shortkit.dev/v1/config/watermark \
  -H "Authorization: Bearer sk_live_your_secret_key" \
  -H "Content-Type: application/json" \
  -d '{
    "visible": {
      "enabled": true,
      "text": "© Your Company",
      "position": "bottomRight",
      "opacity": 0.7,
      "fontSize": 14
    }
  }'

Forensic watermark

Invisible watermark for tracking unauthorized distribution:
curl -X PUT https://api.shortkit.dev/v1/config/watermark \
  -H "Authorization: Bearer sk_live_your_secret_key" \
  -H "Content-Type: application/json" \
  -d '{
    "forensic": {
      "enabled": true
    }
  }'
Configure in Admin Portal: Settings → Watermarking

Processing times

Content DurationTypical Time
< 30 seconds1-2 minutes
1 minute2-3 minutes
5 minutes5-8 minutes
10 minutes10-15 minutes
Includes full ABR ladder (H.264 + AV1), all thumbnails, preview GIF, storyboard, and auto-captions.

Priority processing

For time-sensitive content (breaking news), use priority processing:
curl -X POST https://api.shortkit.dev/v1/uploads \
  -H "Authorization: Bearer sk_live_your_secret_key" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Breaking News",
    "priority": "high"
  }'
Priority levels:
  • normal (default): Standard queue
  • high: Expedited processing
  • urgent: Immediate processing (additional charges may apply)

Error handling

If transcoding fails, the content enters error status:
{
  "event": "content.errored",
  "data": {
    "contentId": "cnt_abc123",
    "error": {
      "code": "TRANSCODE_FAILED",
      "message": "Video codec not supported",
      "details": {
        "sourceCodec": "unknown",
        "stage": "decode"
      }
    }
  }
}
Common errors:
ErrorCauseSolution
UNSUPPORTED_CODECSource uses unsupported codecRe-encode source to H.264/H.265
CORRUPT_FILEFile is corrupted or incompleteRe-upload file
AUDIO_MISSINGNo audio track foundAdd audio track or accept silent video
RESOLUTION_TOO_HIGHExceeds 4K limitScale down source
Failed jobs can be retried from the Admin Portal or API:
curl -X POST https://api.shortkit.dev/v1/content/{contentId}/retry \
  -H "Authorization: Bearer sk_live_your_secret_key"

Next steps