How it works

What PostCrisp does to your video, and why.

Short-form apps re-encode every upload at a tight bitrate. You can't skip that encode, but you control what goes into it. PostCrisp runs one FFmpeg pass that removes what the app's encoder handles badly (noise, odd sizes, variable frame rate, HDR) and strengthens what it tends to lose (edges).

  1. Step 01

    Constant frame rate

    fps=<nearest standard rate>, max 60

    Phones record variable frame rate. Apps re-time VFR on ingest, which shows up as micro-stutter. Conforming to the nearest broadcast rate (29.97, 30, 59.94, 60...) keeps motion as recorded; 120 and 240 fps captures are brought down to 60.

  2. Step 02

    Built for where you post

    TikTok & Reels: 1080p · YouTube Shorts: 2160×3840

    TikTok and Reels play nothing above 1080p, so that's the target. YouTube is different: it gives 4K uploads its better codecs, so the Shorts option finishes your video at 1080p quality and delivers it as 4K to reach that tier.

  3. Step 03

    Resize to 1080p ourselves, in your video's orientation

    scale, Lanczos; 1080×1920 vertical, 1920×1080 landscape, no bars

    Anything that isn't 1080p gets rescaled by the app with a fast, soft filter. Doing it here with Lanczos keeps edges, and a 1080p upload is eligible for the apps' 1080p playback tier. Landscape stays landscape: letterboxing it into a vertical frame would make the app serve the picture itself at as little as 576 pixels wide, where a 1920×1080 upload is served landscape and can be watched full screen. Nothing is ever cropped.

  4. Step 04

    Predictable colour

    BT.709, limited range; HDR tone-mapped with Hable

    iPhone HDR (HLG/Dolby Vision) and HDR10 uploads are displayed inconsistently and often come out washed out. A controlled tone map to standard dynamic range looks the same everywhere. Untagged HD sources are read as BT.709, the way players read them, so colours don't shift.

  5. Step 05

    Denoise

    hqdn3d 1.5 / 1.5 / 3 / 3 (Crisp: 2 / 4 / 3 / 5)

    Sensor noise is random detail an encoder must spend bits on. At the bitrates short-form apps use, it turns into crawling blocks. A temporal denoise removes it before the app sees it. Crisp cleans colour noise harder, because its colour boost and sharpening would otherwise turn compression noise in dark areas into coloured speckles.

  6. Step 06

    Edge-aware sharpening

    Contrast Adaptive Sharpening (CAS), 0.3 (Crisp: 0.75 after two unsharp passes)

    The app's encode softens fine detail. CAS sharpens each area in proportion to the contrast already there, so text, line art and reflections stay clean with no halos. In our benchmark it beat the classic unsharp mask by 1.7 points and beat no sharpening at all, after a TikTok-style re-encode.

  7. Step 07

    Your look: Crisp, Vivid or Natural

    Crisp: S-curve contrast, +32% colour, two-scale sharpening · Vivid: gentle lift · Natural: untouched

    Crisp is the high-definition edit look, tuned on faces, cartoons, anime edits and low-resolution clips until the difference is obvious on a phone after the app's compression, without halos or overcooked skin. Its S-curve adds midtone contrast while blacks and whites stay put, so shadows and highlights keep their detail. Vivid is a gentler lift that suits faces. Natural keeps your grade exactly as you made it. All three change brightness and colour separately, so hues stay true and brand colours or anime palettes don't drift.

  8. Step 08

    High-quality H.264

    libx264 slow, CRF 18, VBV max 12 Mbps (16 at 60 fps), 2 s GOP

    All three apps accept H.264 High universally. CRF 18 keeps quality high and constant, so the detail the look adds reaches the app intact; the VBV cap only bounds noisy peaks. Long clips get a lower cap so the file stays under Instagram's 300 MB limit. Two-second keyframes match how short-form players seek and start.

  9. Step 09

    Clean container

    AAC 192 kbps 48 kHz stereo, faststart, metadata stripped

    48 kHz AAC is what the apps output, so there's no resample on their side. The MP4 index goes to the front so previews start instantly, and location and device tags are removed.

The benchmark

We score files the way the apps treat them: each candidate goes through a modelled platform re-encode (1080×1920, x264, CRF 23 capped at 2 Mbps), then gets compared with SSIM, PSNR and VMAF NEG, the version of VMAF that doesn't reward sharpening for its own sake.

  • Landscape clips are delivered at 1920×1080. After a 720p-class platform encode the picture keeps 1280 pixels of width, against 720 for the same clip letterboxed into a vertical frame.
  • A 16 Mbps phone-style test clip came out 21% smaller at CRF 18.
  • A 60 fps 10-bit HLG HEVC clip came out 10% smaller and tone-mapped to SDR.
  • On real phone footage, the Natural look scored 87.5 VMAF NEG after the modelled re-encode, against 86.6 for the same encode without cleanup and 86.5 for our first, stronger sharpen.
  • An already-compressed 2 Mbps 720p clip came out about 4.6 times larger: it is rebuilt at full 1080p at CRF 18, and quality comes first. The result screen always shows the real change.

Sharpening costs a little on pixel-exact metrics (SSIM and PSNR measure closeness to the source, and a sharpened frame is by design not identical). Natural keeps it mild because it wins on the perceptual score after the app's compression; Crisp goes further because it is judged by eye on a phone, which is where your video is watched.

Try it on your next post