Why HeyGen videos need post-processing for Reels
HeyGen generates solid talking-head avatar videos. But uploading them directly to Instagram Reels creates problems:
16:9 output in a 9:16 world. The video shows up with black bars or gets awkwardly auto-cropped.
Inconsistent audio levels. HeyGen's TTS often lands at -18 to -22 LUFS, while Reels content targets -14 LUFS, so your video sounds quiet next to everything else.
No background music. Reels with music get more distribution, and HeyGen outputs speech only.
No brand elements. No intro, no outro, no logo.
Together, these make your HeyGen video look like a raw AI export that users scroll past. The fix is a post-processing pipeline. FFmpeg handles every step, and RenderIO runs it through a single API call.
HeyGen output vs Instagram Reels requirements
Aspect ratio
HeyGen outputs at 1920x1080 (16:9). Instagram Reels is 1080x1920 (9:16). Since HeyGen videos are talking heads with the avatar centered, you can crop to portrait and keep the speaker in frame. If your avatar is off-center, you'll need to adjust the crop offset (more on that below).
Audio levels
HeyGen's text-to-speech audio varies in loudness depending on the voice model and content length. Reels targets -14 LUFS. HeyGen output often lands at -18 to -22 LUFS, making it sound quiet next to native Reels content. The loudnorm filter fixes this in one pass.
Instagram Reels upload requirements
Before processing, know what Instagram accepts:
Resolution: 1080x1920 preferred, minimum 600px wide
Aspect ratio: 9:16 (tolerance for 4:5 and 1:1, but 9:16 gets full-screen treatment)
Duration: 3 seconds to 3 minutes (under 90 seconds performs best for discovery)
File size: 250 MB max
Codec: H.264 video, AAC audio
Frame rate: 23-60 fps (30fps recommended)
Pixel format: yuv420p
If any of these are wrong, Instagram either rejects the upload silently or re-encodes it in a way that kills quality.
FFmpeg pipeline for converting HeyGen video to Instagram Reels
Step 1: crop to portrait (center on speaker)
This crops a 9:16 region from the center of the 16:9 frame. Since HeyGen centers the avatar, this captures the speaker.
If the speaker is off-center, adjust the x offset:
Step 2: normalize audio
Step 3: add background music
The volume=0.12 keeps music at about 12% volume, enough to fill silence without competing with speech. duration=first ensures the music track matches the video length. If the music is shorter than your video, it'll cut off. Use a track that's at least as long as your content, or loop it with -stream_loop -1 on the music input.
Step 4: add brand intro
If you have a 2-3 second brand intro video:
Make sure the intro is the same resolution (1080x1920) and frame rate as the main video. Mismatched specs cause concat to fail or produce glitchy output.
Step 5: add logo watermark
Places an 80x80 logo in the top-right corner, 20 pixels from the edge. Avoid the bottom-right because Instagram's UI elements overlap there.
Combined pipeline (single command)
For the core processing (crop, normalize, music) in one command:
Automate HeyGen to Reels with RenderIO API
For the video-only processing (no external music file):
With background music (using two input files):
For the full API reference, see the FFmpeg API complete guide.
Batch processing HeyGen exports
If you have a batch of HeyGen videos to convert, process them all in parallel:
For multi-platform output from the same HeyGen batch, see batch processing AI videos for social media. If you're building a full pipeline from generation to distribution, the AI UGC video processing pipeline guide covers the complete architecture.
Engagement tips for HeyGen Reels
Post-processing gets the video technically right. These things help it perform:
Keep it under 30 seconds. Instagram pushes shorter Reels harder in Explore. 15-30 seconds is the sweet spot for avatar content. Longer works if the content is genuinely engaging, but most HeyGen talking-head videos aren't holding attention past 30 seconds.
Add captions. A huge percentage of Reels are watched on mute. Use FFmpeg's drawtext filter or a tool like Kapwing to burn in captions. This alone can double your watch time.
First 3 seconds matter. If the first frame is the avatar standing still before speaking, you've already lost viewers. Trim the silent intro: add -ss 0.5 to skip HeyGen's default half-second lead-in.
Post between 9-11 AM or 7-9 PM in your target audience's timezone. Instagram's algorithm gives new Reels a distribution window, and posting during peak hours maximizes that window.
Troubleshooting HeyGen to Reels conversion
Video looks blurry after cropping. HeyGen's 1920x1080 output only has 1080 pixels of height. Cropping to 9:16 gives you a 607x1080 crop area that gets upscaled to 1080x1920. The upscaling causes softness. Fix: use HeyGen's portrait mode if available, or add a sharpening filter: -vf "crop=...,scale=1080:1920,unsharp=5:5:0.8".
Audio clicks or pops at the start. HeyGen's TTS sometimes has a click at the beginning of the audio. Add a short fade-in: -af "afade=t=in:ss=0:d=0.1,loudnorm=I=-14:TP=-2:LRA=7".
Instagram shows "couldn't process video." Usually a pixel format issue. Add -pix_fmt yuv420p to your command. HeyGen occasionally outputs in yuv444p which Instagram doesn't accept.
Weekly content workflow
A practical weekly workflow for HeyGen + Reels:
Monday: Write 5 scripts for the week
Tuesday: Generate 5 HeyGen videos (10 min of work)
Tuesday: Batch post-process all 5 through RenderIO (5 API calls, done in minutes)
Wednesday-Sunday: Schedule one Reel per day
Total hands-on time: about 30 minutes per week for 5 Reels. The processing step takes under a minute per video through the API.
At 20 Reels per month, you're using 20 API commands. The Starter plan (29/month, 1,000 commands) gives you more headroom. For teams producing at scale, see the AI UGC video processing pipeline for volume pricing.
To make the output look less AI-generated, check our guide on making AI video look natural, which covers grain, color grading, and metadata stripping in detail. You can also compress the final video if file sizes are running close to Instagram's 250 MB limit.
FAQ
Can I use this pipeline with other AI avatar tools (Synthesia, D-ID)?
Yes. The FFmpeg commands work with any 16:9 MP4 input. The only HeyGen-specific part is the crop positioning (centered avatar). If your tool places the avatar differently, adjust the crop offset in the -vf filter.
Does this work for Instagram Stories too?
Stories have the same 9:16 aspect ratio as Reels, so the same commands work. The difference is duration: Stories cap at 60 seconds per segment. Add -t 60 to your command if your video is longer.
How do I choose the right background music?
Use royalty-free music that matches your content tone. Epidemic Sound and Artlist have large libraries. Keep the tempo moderate for talking-head content since high-energy music competes with speech. Start with volume=0.12 and adjust up or down based on how it sounds.
Can I automate the Instagram upload too?
Instagram doesn't have a public video upload API for Reels (as of March 2026). You can use the Instagram Graph API's Content Publishing endpoint, but it requires a Business or Creator account and Facebook app review. Most teams use scheduling tools like Later, Planoly, or Buffer that handle the upload through official integrations.
What if my HeyGen video is already in portrait mode?
Skip the crop step. Go straight to audio normalization and music. Your FFmpeg command simplifies to: -i {{in_video}} -af "loudnorm=I=-14:TP=-2:LRA=7" -c:v copy -c:a aac -movflags +faststart {{out_video}}.