Skip to main content
Configure transcoding output for your use case - streaming, archival, or web delivery.

Quick Example

from videodb import TranscodeMode, VideoConfig, AudioConfig, ResizeMode

job_id = conn.transcode(
    source="https://example.com/source.mov",
    callback_url="https://your-backend.com/webhooks",
    mode=TranscodeMode.lightning,
    video_config=VideoConfig(
        resolution=720,
        quality=23,
        framerate=30,
        resize_mode=ResizeMode.fit
    ),
    audio_config=AudioConfig(mute=False)
)

Output Formats

FormatUse Case
MP4Download, archival, playback
HLSAdaptive streaming, web players

Resolution Options

ResolutionDimensionsUse Case
360p (SD)640 × 360Mobile, low bandwidth
720p (HD)1280 × 720General web delivery
1080p (FHD)1920 × 1080High quality streaming

VideoConfig

FieldTypeDefaultNotes
resolutionint720Height in pixels (auto-calculates width)
qualityint23CRF (lower = better quality, larger file)
framerateintSourceTarget framerate (max 100 fps)
aspect_ratiostrSourcee.g., “16:9”, “1:1”, None for original
resize_modeResizeModecropHow to handle aspect ratio changes

Quality Presets (CRF)

QualityCRF RangeUse Case
Visually Lossless18–20Archival, editing source
Good Quality21–23General delivery
Lower Quality24–28Web previews, thumbnails
Lower CRF = better quality but larger file size. Default 23 is a good balance.

Framerate

Supported: 30fps and 60fps output.
VideoConfig(
    resolution=720,
    framerate=30  # or 60
)

Aspect Ratio Control

ResizeMode

ModeBehaviorVisual
cropCrop edges to fill targetNo black bars, content may be cut
fitScale uniformlyMay letterbox (black bars)
padAdd black barsContent preserved, bars added
from videodb import ResizeMode, VideoConfig

# Crop to fill (may lose edges)
VideoConfig(aspect_ratio="16:9", resize_mode=ResizeMode.crop)

# Fit with letterbox
VideoConfig(aspect_ratio="16:9", resize_mode=ResizeMode.fit)

# Pad with black bars
VideoConfig(aspect_ratio="1:1", resize_mode=ResizeMode.pad)

AudioConfig

FieldTypeDefaultNotes
muteboolfalsetrue removes audio track
from videodb import AudioConfig

# Keep audio
AudioConfig(mute=False)

# Remove audio
AudioConfig(mute=True)

Common Configurations

Web Delivery (720p, optimized)

VideoConfig(
    resolution=720,
    quality=23,
    framerate=30,
    resize_mode=ResizeMode.fit
)

Social Media Square (1:1)

VideoConfig(
    resolution=720,
    aspect_ratio="1:1",
    resize_mode=ResizeMode.crop
)

Archival (High Quality)

VideoConfig(
    resolution=1080,
    quality=18,
    framerate=60
)

Mobile Preview (Low Bandwidth)

VideoConfig(
    resolution=360,
    quality=28,
    framerate=30
)

Job Output Details

Completed jobs include detailed metadata:
{
  "job_id": "xxx",
  "status": "completed",
  "output": "https://transcoded-output.mp4",
  "input_details": {
    "resolution": "1920x1080",
    "framerate": 30,
    "duration": 634.53,
    "size": 263.34,
    "video_codec": "h264",
    "audio_codec": "mp3"
  },
  "output_details": {
    "resolution": "1920x1080",
    "framerate": 30,
    "duration": 635.06,
    "size": 253.84,
    "format": "mp4",
    "video_codec": "h264",
    "audio_codec": "aac"
  },
  "cost": 0.1058
}

Next Steps