March 28, 2025

How to Upload & Optimize Reddit Videos | Best Formats & Compression

Reddit API Documentation & Encoding Limitations (2025)

Reddit API Documentation & Encoding Limitations

Learn how Reddit handles video uploads via API, from supported formats and compression rules to rate limits, FFmpeg commands, and common error fixes.

MP4 / H.264 Only fully supported upload format
1 GB Approximate max video file size
1080p / 30fps Reddit’s practical quality ceiling
Quick Overview

The Reddit API lets you upload, process, and publish videos programmatically, but it enforces strict encoding rules around MP4/H.264, resolution, frame rate, and file size. This guide walks through supported formats, the three-step media upload flow, how Reddit compresses videos, FFmpeg and HandBrake presets that match Reddit’s expectations, and how to stay within API rate limits when automating posts.

1. Supported Video Formats & Encoding Restrictions

Reddit’s video pipeline effectively expects MP4 containers using H.264 video and AAC audio; anything else is either rejected or forcefully re‑encoded, often with noticeable quality loss. Starting from compliant source files gives you much better control over final quality than letting Reddit transcode from formats like WebM, MOV, or AVI.

Format Video Codec Audio Codec Supported? Compression Applied?
MP4 H.264 AAC Yes Yes (re‑encoded by Reddit)
WebM VP8/VP9 Opus No Not supported
MOV H.264 AAC No Must convert to MP4 first
AVI DivX/Xvid MP3 No Must convert to MP4 first

Key Encoding Constraints

  • Max file size around 1 GB.
  • Max effective resolution around 1080p; higher uploads are downscaled.
  • Max frame rate about 30 fps; higher frame rates are capped.
  • Dynamic bitrate compression applied on Reddit’s side.
Why These Constraints Matter

If your master file exceeds these limits, Reddit will aggressively re‑encode it, often causing blurry or blocky visuals, crushed detail, and more heavily compressed audio than you intended.

2. Reddit API Media Upload Process

The Reddit API uses a staged upload flow, where you first request a signed media upload URL, then PUT the binary video to that URL, and finally create the post referencing the uploaded media asset. This pattern mirrors other S3‑backed upload systems and keeps large file transfers off the core API domain.

Step 1: Request an Upload URL

Call the media asset upload endpoint with the filename and MIME type for your MP4 video.

POST https://www.reddit.com/api/media_asset_upload_request
{
  "filepath": "video.mp4",
  "mimetype": "video/mp4"
}

The response includes a signed S3 URL you will use to upload the actual video file.

Step 2: Upload the Video to the Signed URL

Use a raw HTTP PUT with the correct content type and binary data to send the file to the signed URL.

curl -X PUT \
  -H "Content-Type: video/mp4" \
  --data-binary "@video.mp4" \
  "SIGNED_URL_FROM_STEP_1"

Step 3: Submit the Video Post

After the upload completes, submit the post via the standard submit endpoint, passing the media asset URL or identifier.

POST https://www.reddit.com/api/submit
{
  "kind": "video",
  "url": "MEDIA_ASSET_URL",
  "title": "My Reddit Video",
  "sr": "subreddit_name"
}

3. Encoding Limitations & How Reddit Compresses Videos

Regardless of input, Reddit runs uploaded videos through its own transcoding pipeline, which typically reduces bitrate, caps resolution to around 1080p, and enforces a 30 fps ceiling. Audio is also recompressed, usually at moderate AAC bitrates to balance clarity and size.

Factor Impact Recommended Approach
Bitrate reduction Reddit compresses aggressively, especially on long clips. Upload at a slightly higher bitrate (for example, 4–6 Mbps at 1080p) so post‑compression quality remains acceptable.
Resolution downscaling 2K and 4K uploads are downscaled to 1080p variants. Export at 1080p to avoid unnecessary scaling and softer results.
Frame rate cap Higher frame rates are capped or converted to around 30 fps. Transcode your source to 30 fps yourself to control motion and cadence.
Audio compression AAC tracks may be recompressed to lower bitrates. Use at least 128 kbps AAC in your master so re‑encoding has more headroom.

In practice, you get better visual stability by matching Reddit’s target profile in your export, rather than pushing high‑end specs that will only be dialed back later in the pipeline.

4. How to Optimize Videos for Reddit Using FFmpeg & HandBrake

Before hitting the API, it is worth normalizing your videos with FFmpeg or HandBrake so they comply with Reddit’s expectations and do not trigger avoidable errors or heavy transcoding. The goal is MP4, H.264, AAC, 1080p, 30 fps, and a moderate bitrate.

FFmpeg Command for Optimizing Reddit Videos

ffmpeg -i input.mp4 \
  -c:v libx264 -crf 23 -preset fast \
  -c:a aac -b:a 128k \
  -r 30 \
  -vf "scale=1920:-2" \
  output.mp4

Here, the CRF value around 23 balances size and visual quality, the “fast” preset speeds up encoding, the 128 kbps AAC track preserves acceptable audio, the 30 fps frame rate matches Reddit’s cap, and the scaling filter constrains resolution around 1080p.

HandBrake Settings for Reddit Video Uploads

  • Format: MP4 container, with “Web Optimized” enabled.
  • Video codec: H.264, constant frame rate at 30 fps.
  • Quality: RF around 22–24 for general content.
  • Audio: AAC at 128–160 kbps, stereo mix.

Using these targets keeps your uploads within Reddit’s comfort zone while retaining as much detail as the platform’s compression allows.

5. Reddit API Rate Limits & Workarounds

Reddit enforces both general API request quotas and more practical limits on media uploads per account over a short period to prevent abuse. In many automation setups, sticking to a handful of video uploads per hour per user and spacing out calls keeps you clear of errors.

Limit Type Typical Restriction Practical Workaround
Uploads per hour A small number of video uploads per user before throttling. Distribute posts across multiple authorized accounts or schedule uploads over a longer window.
Max request size Approximate 1 GB file size ceiling. Compress or trim long clips and avoid near‑limit files in automation.
Call frequency Short‑term request limits per minute for authenticated clients. Introduce short sleeps between API calls and back off when headers show remaining quota dropping.

When you design scripts, monitoring response headers and logging rate‑limit responses makes it easier to tune intervals before users encounter hard failures.

6. Common Reddit API Video Upload Errors & Fixes

Most upload failures come from unsupported formats, oversized files, expired signed URLs, or hitting implicit rate limits. Mapping your error handling to these categories helps keep automation resilient.

Error Likely Cause How to Fix
“Media type not supported” Uploading WebM, MOV, AVI, or incompatible codecs. Transcode to MP4 with H.264 video and AAC audio before calling the API.
“File too large” Video exceeds the approximate 1 GB size limit. Re‑encode using higher CRF or RF values, or trim the clip into shorter segments.
“Upload URL expired” Delay between requesting the signed URL and performing the PUT upload. Request a fresh media_asset_upload_request just before uploading, then retry.
“Rate limit exceeded” Too many uploads or API calls in a short window. Pause for 15–30 minutes, implement exponential backoff, and spread uploads over time.

Reddit API Documentation & Encoding Limitations – 2025 Guide