AgentSkillsCN

viral-video-platform-specs

为 TikTok、YouTube Shorts、Instagram Reels、Facebook Reels、Snapchat Spotlight 以及 Twitter/X 等平台制定完整的病毒式传播视频上传规范。主动启用以下功能:(1) 针对不同平台的视频编码;(2) 查找上传要求;(3) 多平台导出;(4) 优化文件大小;(5) 调整宽高比;(6) 限制视频时长;(7) 规定音频要求;(8) 明确字幕/标题规格;(9) 规定缩略图要求;(10) 权衡质量与兼容性。本指南提供:全面的规范表格、各平台的 FFmpeg 预设、最优编码设置、文件大小计算器、批量导出工作流程,以及 2025–2026 年各平台算法的独家洞察。

SKILL.md
--- frontmatter
name: viral-video-platform-specs
description: Complete platform upload specifications for viral video creation across TikTok, YouTube Shorts, Instagram Reels, Facebook Reels, Snapchat Spotlight, and Twitter/X. PROACTIVELY activate for: (1) Platform-specific video encoding, (2) Upload requirements lookup, (3) Multi-platform export, (4) File size optimization, (5) Aspect ratio conversion, (6) Duration limits, (7) Audio requirements, (8) Caption/subtitle specs, (9) Thumbnail requirements, (10) Quality vs compatibility trade-offs. Provides: Comprehensive spec tables, FFmpeg presets per platform, optimal encoding settings, file size calculators, batch export workflows, and 2025-2026 platform-specific algorithm insights.

CRITICAL GUIDELINES

Windows File Path Requirements

MANDATORY: Always Use Backslashes on Windows for File Paths

When using Edit or Write tools on Windows, you MUST use backslashes (\) in file paths, NOT forward slashes (/).

Documentation Guidelines

NEVER create new documentation files unless explicitly requested by the user.


Viral Video Platform Specifications (2025-2026)

Complete reference for all major short-form video platforms with FFmpeg encoding presets.

Quick Reference Table

PlatformAspectResolutionMax DurationMax SizeCodecAudio
TikTok9:161080x192010 min287 MBH.264AAC 128k
YouTube Shorts9:161080x192060 sec256 GBH.264/VP9AAC 192k
Instagram Reels9:161080x192090 sec4 GBH.264AAC 128k
Facebook Reels9:161080x192090 sec4 GBH.264AAC 128k
Snapchat Spotlight9:161080x192060 sec300 MBH.264AAC
Twitter/X9:161080x19202 min 20 sec512 MBH.264AAC 128k
Pinterest Idea Pins9:161080x192060 sec2 GBH.264AAC
LinkedIn9:16/1:11080x192010 min5 GBH.264AAC

TikTok Specifications

Technical Requirements (2025-2026)

SpecificationRequirementNotes
Aspect Ratio9:16 (vertical) - REQUIREDFills mobile screen
Resolution1080x1920 (recommended), min 720x1280TikTok compresses 4K anyway
Video CodecH.264 (required)HEVC transcoded to H.264
Audio CodecAACHigh-quality audio critical
Audio Bitrate128-192 kbpsHigher = better
Audio Sample Rate44100 Hz (48000 Hz accepted)44.1kHz standard
Audio Loudness-10 to -12 LUFSLouder wins on mobile
True Peak-1.5 dBTP maxPrevents distortion
Frame Rate24-60 fps (30 fps recommended)60fps for sports/action only
Pixel Formatyuv420p (required)8-bit color, Rec.709
Color SpaceRec.709 (SDR)Turn off HDR before upload
Max File Size287 MB (iOS), 72 MB (Android web)~500 MB desktop
Max Duration10 minutesOptimal: 21-34s
Optimal Duration21-34 secondsHighest completion rate
Min Duration3 secondsPlatform minimum
Keyframe Interval2 seconds (60-90 frames at 30fps)Every 2-3 seconds

Optimal Encoding Parameters (2025-2026)

Bitrate Recommendations (VBR):

  • 24 fps: 4-6 Mbps
  • 30 fps: 6-8.5 Mbps (sweet spot: 6-8 Mbps)
  • 60 fps: 8-12 Mbps

CRF Values:

  • CRF 21-23: Optimal quality/size balance
  • Below CRF 21: Diminishing returns (TikTok recompresses)
  • Above CRF 24: Noticeable quality loss on mobile

Preset Selection:

  • fast: Quick encoding, good quality (recommended for batch)
  • medium: Better compression (default)
  • slow: Best quality (use for hero content)

FFmpeg Preset (Updated 2025-2026)

bash
# TikTok optimized encoding - 2025-2026 specs
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1,fps=30" \
  -c:v libx264 -preset medium -crf 22 -profile:v high -level 4.1 \
  -x264-params "keyint=60:min-keyint=30:scenecut=0" \
  -c:a aac -b:a 192k -ar 44100 -ac 2 \
  -af "loudnorm=I=-11:TP=-1.5:LRA=11" \
  -pix_fmt yuv420p \
  -movflags +faststart \
  -max_muxing_queue_size 1024 \
  -t 34 \
  output_tiktok.mp4

Two-Pass Encoding for Precise Bitrate Control

bash
# Pass 1
ffmpeg -y -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,fps=30" \
  -c:v libx264 -preset medium -b:v 7M -maxrate 8M -bufsize 16M \
  -profile:v high -level 4.1 -pass 1 -an -f null /dev/null

# Pass 2
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,fps=30" \
  -c:v libx264 -preset medium -b:v 7M -maxrate 8M -bufsize 16M \
  -profile:v high -level 4.1 -pass 2 \
  -c:a aac -b:a 192k -ar 44100 \
  -af "loudnorm=I=-11:TP=-1.5:LRA=11" \
  -pix_fmt yuv420p -movflags +faststart \
  output_tiktok.mp4

Algorithm Insights (2025-2026)

  • Hook Window: 1.3 seconds to capture attention
  • Optimal Length: 21-34 seconds for highest completion
  • Captions: 80% boost in engagement when visible
  • Trending Audio: 88% say it helps discoverability
  • Post Frequency: 1-3x daily for growth phase

YouTube Shorts Specifications

Technical Requirements (2025-2026)

SpecificationRequirementNotes
Aspect Ratio9:16 (vertical) - REQUIREDStrictly enforced for Shorts shelf
Resolution1080x1920 (recommended), min 1920px on short sideLimited to 1080p playback
Video CodecH.264, VP9, HEVC (VP9 preferred by algorithm)YouTube transcodes to VP9/AV1
Audio CodecAAC, Opus (Opus for VP9)AAC-LC most compatible
Audio Bitrate192-384 kbpsYouTube recommends 384k stereo
Audio Sample Rate48000 Hz preferredMatch video production standard
Audio Loudness-13 to -15 LUFSYouTube normalizes to -14 LUFS
True Peak-1 to -3 dBRecommended: -1.5 dBTP
Frame Rate24-60 fps (30 fps recommended)Upload at source frame rate
Pixel Formatyuv420p (SDR), yuv420p10le (HDR)Rec.709 color space for SDR
Max File Size256 GB (practical: 20-100 MB for Shorts)Higher bitrate = better post-compression quality
Max Duration60 seconds (HARD LIMIT)Strict enforcement
Optimal Duration50-60 secondsMaximizes watch time metric
Min Duration~15 seconds recommendedShorter = harder to rank
Color SpaceRec.709 (SDR), Rec.2100 (HDR only)Consistent colors across devices

Optimal Encoding Parameters (2025-2026)

Bitrate Recommendations (VBR):

  • 1080p30: 8 Mbps (YouTube official recommendation)
  • 1080p60: 12 Mbps

CRF Values:

  • CRF 18-20: High quality (hero content, archival)
  • CRF 20-22: Optimal quality/size (recommended)
  • CRF 23+: Acceptable for less critical content

Preset Selection:

  • slow: Best quality, longer encode (recommended for uploads)
  • medium: Good balance for batch processing
  • fast: Quick turnaround, slightly larger files

FFmpeg Preset - H.264 (Updated 2025-2026)

bash
# YouTube Shorts H.264 encoding - maximum compatibility
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1,fps=30" \
  -c:v libx264 -preset slow -crf 20 -profile:v high -level 4.2 \
  -x264-params "keyint=60:min-keyint=30:scenecut=40" \
  -c:a aac -b:a 192k -ar 48000 -ac 2 \
  -af "loudnorm=I=-14:TP=-1.5:LRA=11" \
  -pix_fmt yuv420p \
  -colorspace bt709 -color_primaries bt709 -color_trc bt709 \
  -movflags +faststart \
  -max_muxing_queue_size 1024 \
  -t 59 \
  -metadata title="Your Shorts Title" \
  -metadata comment="#Shorts" \
  output_shorts.mp4

Two-Pass Encoding for Optimal Quality

bash
# Pass 1 - Analysis
ffmpeg -y -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,fps=30" \
  -c:v libx264 -preset slow -b:v 8M -profile:v high -level 4.2 \
  -pass 1 -an -f null /dev/null

# Pass 2 - Encode
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,fps=30" \
  -c:v libx264 -preset slow -b:v 8M -profile:v high -level 4.2 \
  -pass 2 \
  -c:a aac -b:a 192k -ar 48000 \
  -af "loudnorm=I=-14:TP=-1.5:LRA=11" \
  -pix_fmt yuv420p -movflags +faststart \
  -metadata comment="#Shorts" \
  output_shorts.mp4

FFmpeg Preset (VP9 - Higher Quality)

bash
# YouTube Shorts VP9 encoding (preferred by YouTube)
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1" \
  -c:v libvpx-vp9 -crf 25 -b:v 0 -deadline good -cpu-used 2 \
  -c:a libopus -b:a 192k -ar 48000 \
  -row-mt 1 \
  -t 59 \
  output_shorts.webm

Algorithm Insights (2025-2026)

  • Completion Rate: 80-90% = algorithm boost
  • Optimal Length: 50-60 seconds maximizes watch time
  • First 3 Seconds: Critical for retention
  • Consistency: Daily posting recommended for growth
  • Thumbnail: Custom thumbnails increase CTR 30%+

Instagram Reels Specifications

Technical Requirements (2025-2026)

SpecificationRequirementNotes
Aspect Ratio9:16 (preferred), 4:5, 1:1 accepted9:16 fills screen, recommended
Resolution1080x1920 (recommended), min 720pNo 4K support
Video CodecH.264Instagram transcodes all uploads
Audio CodecAAC (AAC-LC preferred)Superior to MP3
Audio Bitrate128-192 kbpsHigher quality recommended
Audio Sample Rate44100-48000 Hz44.1kHz or 48kHz
Audio Loudness-10 to -12 LUFSLouder = better mobile experience
True Peak-1 dBTP recommendedPrevents clipping
Frame Rate30 fps recommended (max 60)30fps optimal for compatibility
Pixel Formatyuv420pSquare pixels, fixed frame rate
Max File Size650 MB (<10 min), 4 GB (longer)Practical: 50-200 MB
Max Duration15 minutes (uploaded), 3 min (in-app 2025)In-app recording: 90s before Jan 2025
Optimal Duration7-15 seconds (casual), 15-30s (tutorial)First 3 seconds critical
Min Duration3 secondsPlatform minimum
Cover Image1080x1920, JPEGCustom thumbnail increases engagement

Optimal Encoding Parameters (2025-2026)

Bitrate Recommendations (VBR):

  • Standard Quality: 3,500-5,000 kbps
  • High Quality: 5,000-10,000 kbps (recommended for best results)

CRF Values:

  • CRF 21-23: Optimal balance
  • CRF 20: High quality for hero content
  • CRF 24+: Avoid (visible compression on mobile)

Preset Selection:

  • fast: Quick batch encoding
  • medium: Recommended balance
  • slow: Best quality (diminishing returns after Instagram recompression)

Safe Zones (2025-2026)

  • Top safe zone: Keep text/graphics below top 14%
  • Bottom safe zone: Avoid bottom 35% (UI overlays)
  • Side safe zones: 6% margin on each side
  • Text placement: Upper middle 2/3 of frame safest

FFmpeg Preset (Updated 2025-2026)

bash
# Instagram Reels optimized encoding - high quality
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1,fps=30" \
  -c:v libx264 -preset medium -crf 22 -profile:v high -level 4.1 \
  -x264-params "keyint=60:min-keyint=30:scenecut=40" \
  -c:a aac -b:a 192k -ar 44100 -ac 2 \
  -af "loudnorm=I=-11:TP=-1.5:LRA=11" \
  -pix_fmt yuv420p \
  -movflags +faststart \
  -t 30 \
  output_reels.mp4

Bitrate-Controlled Encoding

bash
# Instagram Reels with precise bitrate (5-10 Mbps range)
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,fps=30" \
  -c:v libx264 -preset medium -b:v 8M -maxrate 10M -bufsize 20M \
  -profile:v high -level 4.1 \
  -c:a aac -b:a 192k -ar 44100 \
  -af "loudnorm=I=-11:TP=-1.5:LRA=11" \
  -pix_fmt yuv420p -movflags +faststart \
  output_reels_bitrate.mp4

Algorithm Insights (2025-2026)

  • Optimal Length: 7-15 seconds for casual, 15-30 for tutorial
  • First 3 Seconds: Must hook immediately
  • Trending Audio: Significant boost in reach
  • Hashtags: 3-5 relevant hashtags optimal
  • Post Time: When followers most active

Facebook Reels Specifications

Technical Requirements (2025-2026)

SpecificationRequirementNotes
Aspect Ratio9:16 (recommended), any supportedAll videos = Reels as of June 2025
Resolution1440x2560 (official), 1080x1920 (practical)Facebook recommends higher res
Video CodecH.264, H.265, VP9, AV1H.264 most compatible
CompressionH.264, Closed GOP (2-5s)Progressive scan, 4:2:0 chroma
Audio CodecAAC (stereo)AAC Low Complexity preferred
Audio Bitrate128 kbps minimum, 192k recommendedFacebook supports up to 384k
Audio Sample Rate48000 Hz48kHz official recommendation
Audio Loudness-13 LUFSFacebook normalizes to -13 LUFS
True Peak-1 dBTPPrevent distortion
Frame Rate30 fps or higher recommendedMatch source frame rate
Pixel Formatyuv420p8-bit color
Max File Size4 GBPractical: 50-300 MB
Max DurationNo limit (as of June 2025)Reels: 3-90 seconds optimal
Optimal Duration15-30 secondsEngagement sweet spot
Min Duration3 secondsReel minimum

Optimal Encoding Parameters (2025-2026)

Bitrate Recommendations:

  • 1080p H.264: 5-8 Mbps
  • 4K H.264: 35-45 Mbps (up to 45 Mbps supported)
  • Recommended for Reels: 6-10 Mbps at 1080p

CRF Values:

  • CRF 20-22: High quality
  • CRF 23: Good balance (recommended)
  • CRF 24+: Acceptable for casual content

Safe Zones:

  • Top: Leave 14% clear
  • Bottom: Avoid 35% (UI elements)
  • Sides: 6% margin each side

FFmpeg Preset (Updated 2025-2026)

bash
# Facebook Reels optimized encoding - 2025-2026
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1,fps=30" \
  -c:v libx264 -preset medium -crf 22 -profile:v high -level 4.1 \
  -x264-params "keyint=60:min-keyint=30:scenecut=40" \
  -c:a aac -b:a 192k -ar 48000 -ac 2 \
  -af "loudnorm=I=-13:TP=-1:LRA=11" \
  -pix_fmt yuv420p \
  -movflags +faststart \
  -t 30 \
  output_fb_reels.mp4

High-Quality Preset (Bitrate-Controlled)

bash
# Facebook Reels - high quality with bitrate control
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,fps=30" \
  -c:v libx264 -preset medium -b:v 8M -maxrate 10M -bufsize 20M \
  -profile:v high -level 4.1 \
  -c:a aac -b:a 192k -ar 48000 -ac 2 \
  -af "loudnorm=I=-13:TP=-1:LRA=11" \
  -pix_fmt yuv420p -movflags +faststart \
  output_fb_reels_hq.mp4

Algorithm Insights (2025-2026)

  • Cross-Post: Instagram Reels can be shared to Facebook
  • Original Content: Watermark-free content preferred
  • Engagement: Comments boost reach significantly
  • Optimal Length: 15-30 seconds

Snapchat Spotlight Specifications

Technical Requirements

SpecificationRequirement
Aspect Ratio9:16 (required)
Resolution1080x1920
Video CodecH.264
Audio CodecAAC
Frame Rate24-30 fps
Pixel Formatyuv420p
Max File Size300 MB
Max Duration60 seconds
Min Duration5 seconds

FFmpeg Preset

bash
# Snapchat Spotlight optimized encoding
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1,fps=30" \
  -c:v libx264 -preset fast -crf 24 -profile:v main -level 4.0 \
  -c:a aac -b:a 128k -ar 44100 -ac 2 \
  -pix_fmt yuv420p \
  -movflags +faststart \
  -fs 300M \
  -t 60 \
  output_spotlight.mp4

Twitter/X Video Specifications

Technical Requirements

SpecificationRequirement
Aspect Ratio9:16, 16:9, 1:1
Resolution1080x1920 (9:16), 1920x1080 (16:9)
Video CodecH.264
Audio CodecAAC
Audio Bitrate128 kbps
Audio Sample Rate44100 Hz
Frame Rate30-60 fps (40 max for 1080p)
Pixel Formatyuv420p
Max File Size512 MB
Max Duration2 min 20 sec (140 seconds)

FFmpeg Preset

bash
# Twitter/X optimized encoding
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,setsar=1,fps=30" \
  -c:v libx264 -preset fast -crf 23 -profile:v high -level 4.1 \
  -c:a aac -b:a 128k -ar 44100 -ac 2 \
  -pix_fmt yuv420p \
  -movflags +faststart \
  -fs 512M \
  -t 140 \
  output_twitter.mp4

Multi-Platform Export Script

bash
#!/bin/bash
# export_all_platforms.sh - Export video for all platforms at once

INPUT="$1"
BASENAME=$(basename "$INPUT" .mp4)

echo "Exporting $INPUT for all platforms..."

# TikTok
ffmpeg -i "$INPUT" \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black" \
  -c:v libx264 -preset fast -crf 23 \
  -c:a aac -b:a 128k -ar 44100 \
  -pix_fmt yuv420p -movflags +faststart \
  -t 60 \
  "${BASENAME}_tiktok.mp4" &

# YouTube Shorts
ffmpeg -i "$INPUT" \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black" \
  -c:v libx264 -preset fast -crf 22 \
  -c:a aac -b:a 192k -ar 48000 \
  -pix_fmt yuv420p -movflags +faststart \
  -t 59 \
  "${BASENAME}_shorts.mp4" &

# Instagram Reels
ffmpeg -i "$INPUT" \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,fps=30" \
  -c:v libx264 -preset fast -crf 23 \
  -c:a aac -b:a 128k -ar 44100 \
  -pix_fmt yuv420p -movflags +faststart \
  -t 90 \
  "${BASENAME}_reels.mp4" &

# Snapchat Spotlight
ffmpeg -i "$INPUT" \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,fps=30" \
  -c:v libx264 -preset fast -crf 24 \
  -c:a aac -b:a 128k -ar 44100 \
  -pix_fmt yuv420p -movflags +faststart \
  -fs 300M -t 60 \
  "${BASENAME}_spotlight.mp4" &

# Twitter/X
ffmpeg -i "$INPUT" \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,fps=30" \
  -c:v libx264 -preset fast -crf 23 \
  -c:a aac -b:a 128k -ar 44100 \
  -pix_fmt yuv420p -movflags +faststart \
  -t 140 \
  "${BASENAME}_twitter.mp4" &

wait
echo "All platform exports complete!"
ls -lh "${BASENAME}_*.mp4"

File Size Optimization

Calculate Target Bitrate for File Size

bash
# Formula: bitrate = (target_size_MB * 8192) / duration_seconds - audio_bitrate

# Example: 50MB file, 60 seconds, 128kbps audio
# Video bitrate = (50 * 8192) / 60 - 128 = 6697 kbps

ffmpeg -i input.mp4 \
  -vf "scale=1080:1920" \
  -c:v libx264 -b:v 6500k -maxrate 7000k -bufsize 14000k \
  -c:a aac -b:a 128k \
  -pix_fmt yuv420p -movflags +faststart \
  output_sized.mp4

Two-Pass Encoding for Exact Size

bash
# Pass 1
ffmpeg -y -i input.mp4 \
  -vf "scale=1080:1920" \
  -c:v libx264 -b:v 6500k -pass 1 -an -f null /dev/null

# Pass 2
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920" \
  -c:v libx264 -b:v 6500k -pass 2 \
  -c:a aac -b:a 128k \
  -movflags +faststart \
  output_2pass.mp4

Platform Comparison: Algorithm Factors

FactorTikTokShortsReelsPriority
Hook (1-3s)CriticalCriticalCritical#1
Completion RateHighHighestHigh#1
Watch TimeHighHighestMedium#2
SharesHighMediumHigh#3
CommentsHighMediumHigh#3
SavesMediumMediumHigh#4
LikesMediumLowMedium#5
Captions80% boostHelpfulImportantMust-have
Trending AudioEssentialN/AImportantPlatform-specific
Original ContentPreferredRequiredPreferredImportant
Posting Frequency1-3x/dayDailyDailyConsistency

Verification Commands

bash
# Verify platform compliance
verify_platform() {
    local file=$1
    echo "=== Checking: $file ==="
    ffprobe -v error -select_streams v:0 \
      -show_entries stream=width,height,codec_name,pix_fmt,r_frame_rate,bit_rate \
      -show_entries format=duration,size,bit_rate \
      -of default=noprint_wrappers=1 "$file"

    # File size in MB
    size_mb=$(ls -l "$file" | awk '{print $5/1024/1024}')
    echo "File Size: ${size_mb}MB"
}

verify_platform output_tiktok.mp4

Codec Comparison for Short-Form Video (2025-2026)

H.264 vs H.265 vs AV1 Decision Matrix

CodecCompressionEncoding SpeedPlatform SupportRecommendation
H.264BaselineFastUniversalPrimary choice - all platforms transcode to H.264 anyway
H.26540-50% better5-10x slowerLimited mobileAvoid - platforms transcode, licensing issues
AV150-60% better5-10x slowerGrowing (YouTube, Netflix)Future-proof for web, not for social uploads
VP940% betterSlowerYouTube preferredOnly for YouTube Shorts WebM uploads

Platform Codec Recommendations

PlatformUpload CodecPlatform Transcodes ToBest Practice
TikTokH.264H.264Always H.264
YouTube ShortsH.264 or VP9VP9, AV1, H.264H.264 for compatibility, VP9 for quality
InstagramH.264H.264H.264 only
FacebookH.264H.264, VP9H.264 most reliable

Key Insight: All platforms re-encode uploads. Upload high-quality H.264 to give platform encoders the best source material. H.265/AV1 add encoding time with no benefit for social media.


Color Grading for Viral Appeal (2025-2026)

Mobile-Optimized Color Parameters

Research-backed findings: Bold, saturated colors perform 2-3x better on mobile screens.

ParameterConservativeViral-OptimizedBold/Stylized
Saturation1.0-1.11.1-1.21.3-1.5
Contrast1.0-1.11.15-1.251.3-1.4
Brightness0 to +0.05-0.02 to 0-0.05 (cinematic)
SharpnessUnsharp 5:5:0.3Unsharp 5:5:0.6Unsharp 5:5:1.0

Viral Color Grading Presets

1. Bold & Eye-Popping (Maximum Engagement)

bash
# High saturation, punchy contrast for maximum mobile impact
ffmpeg -i input.mp4 \
  -vf "eq=saturation=1.2:contrast=1.2:brightness=-0.02,unsharp=5:5:0.8" \
  -c:v libx264 -preset medium -crf 22 \
  output_bold.mp4

2. Orange & Teal (Cinematic Viral Look)

bash
# Popular cinematic color grade - orange in highlights, teal in shadows
ffmpeg -i input.mp4 \
  -vf "\
    eq=contrast=1.15:saturation=1.1:brightness=-0.02,\
    colorbalance=rs=0.12:gs=-0.04:bs=-0.15:rm=0.08:gm=-0.02:bm=-0.08:rh=0.08:gh=-0.03:bh=-0.12,\
    curves=all='0/0.02 0.5/0.5 1/0.98',\
    unsharp=5:5:0.6\
  " \
  -c:v libx264 -preset medium -crf 22 \
  output_orange_teal.mp4

3. Vibrant Social Media Look

bash
# Optimized for TikTok/Reels - saturated, sharp, mobile-friendly
ffmpeg -i input.mp4 \
  -vf "\
    eq=saturation=1.25:contrast=1.18:brightness=0.01:gamma=1.05,\
    colorbalance=rs=0.05:bs=-0.05,\
    unsharp=5:5:0.7\
  " \
  -c:v libx264 -preset medium -crf 22 \
  output_vibrant.mp4

4. Moody & Dramatic (Storytelling)

bash
# Lower saturation, higher contrast, lifted blacks
ffmpeg -i input.mp4 \
  -vf "\
    eq=saturation=0.95:contrast=1.25:brightness=-0.03,\
    curves=all='0/0.05 0.5/0.48 1/0.95',\
    colorbalance=bs=0.08:bh=-0.05,\
    unsharp=5:5:0.5\
  " \
  -c:v libx264 -preset medium -crf 22 \
  output_moody.mp4

Using LUTs for Consistent Branding

bash
# Apply a .cube LUT file for professional color grading
ffmpeg -i input.mp4 \
  -vf "lut3d=file=cinematic.cube,unsharp=5:5:0.6" \
  -c:v libx264 -preset medium -crf 22 \
  output_lut.mp4

Popular LUT sources:

  • CapCut built-in LUTs (export as .cube)
  • DaVinci Resolve free LUTs
  • RocketStock free LUTs

Color Grading Best Practices

  1. Test on mobile first: View on phone before posting
  2. Avoid over-saturation: >1.3 saturation looks artificial
  3. Check dark scenes: Compression artifacts most visible in shadows
  4. Platform compression: Colors shift slightly after upload - compensate with +5% saturation
  5. Consistent branding: Use same LUT across all videos for recognition

Text & Caption Parameters for Mobile Readability (2025-2026)

Font Size Guidelines (1080x1920 vertical)

Content TypeMinimum SizeRecommended SizeMaximum Size
Body text/captions48px52-60px72px
Titles/hooks64px72-80px120px
Secondary text36px40-48px56px

Rule of thumb: For 1080x1920, minimum 48px for readability on all devices.

Safe Zones for Text Placement

code
┌─────────────────────┐
│   14% TOP MARGIN    │ ← Username, UI elements
├─────────────────────┤
│                     │
│   SAFE TEXT ZONE    │ ← Place all text here
│   (upper 2/3)       │
│                     │
├─────────────────────┤
│                     │
│  35% BOTTOM MARGIN  │ ← Captions, buttons, likes
└─────────────────────┘
    6%         6%
  ← margin  margin →

Best text placement: Upper-middle area (20-60% from top)

FFmpeg Text Overlay Parameters

Optimal Readability Settings

bash
# Maximum mobile readability - white text, thick black outline
ffmpeg -i input.mp4 \
  -vf "drawtext=text='YOUR TEXT':fontsize=56:fontcolor=white:borderw=4:bordercolor=black:x=(w-tw)/2:y=h*0.15" \
  -c:v libx264 -preset medium -crf 22 \
  output_text.mp4

High-Contrast Combinations (Best Performing)

Text ColorOutline ColorBackgroundReadability Score
WhiteBlack (4px)Any95%
YellowBlack (4px)Dark93%
BlackWhite (3px)Light92%
RedWhite (4px)Any88%

Text Animation for Engagement

bash
# Fade-in text (2-second duration)
ffmpeg -i input.mp4 \
  -vf "drawtext=text='STOP SCROLLING':fontsize=72:fontcolor=yellow:borderw=5:bordercolor=black:x=(w-tw)/2:y=h*0.15:alpha='if(lt(t,1),t,1)':enable='between(t,0,2)'" \
  -c:v libx264 -preset medium -crf 22 \
  output_fade_text.mp4

Caption Best Practices (2025-2026)

Research findings:

  • Captions increase engagement by 80% (TikTok)
  • 94% of Reels watched on mobile with sound off
  • Maximum 30 characters per line for readability
  • Maximum 3 lines of text on screen simultaneously
  • Minimum 2.3 seconds display time for 30-character line

Recommended caption style:

bash
# Auto-caption burn-in (CapCut style)
-vf "subtitles=captions.srt:force_style='\
FontName=Arial Black,\
FontSize=52,\
PrimaryColour=&HFFFFFF,\
OutlineColour=&H000000,\
Outline=4,\
Shadow=0,\
Bold=1,\
Alignment=2,\
MarginV=250'"

Related Skills

  • ffmpeg-viral-tiktok - TikTok-specific viral optimization
  • ffmpeg-viral-shorts - YouTube Shorts optimization
  • viral-video-hook-templates - 10 proven hook patterns
  • viral-video-animated-captions - CapCut-style captions