How to Upload & Optimize Reddit Videos | Best Formats & Compression
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.
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.
📋 Table of Contents
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.
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. |