Start with the destination

Choose the task before the bitrate.

For a local MP4 you want to watch or keep, our starting point is Everyday: H.264, x264 medium, CRF 21, and AAC stereo. Choose Sharing when a smaller file matters, Editing when you plan to export again, or Streaming for playback workflows that benefit from more frequent keyframes and a bitrate cap. Use CTV or Custom when a downstream system has a delivery requirement.

That distinction matters. An almost motionless chart and a shot of breaking waves may both be 1080p, yet need very different amounts of data. A single “high quality” bitrate cannot describe both efficiently. In our six-second static test, Everyday produced a 58 KB file; CTV produced about 1.82 MB because it also had to meet a minimum delivery rate.

The five automatic presets share a compatibility target: H.264 High profile, 8-bit yuv420p, MP4 faststart, and 48 kHz stereo audio. The automatic presets select a suitable available SDR source within your quality ceiling and keep its dimensions and aspect ratio. Selecting 4K does not upscale a smaller source. An HDR-only source needs a different, deliberately managed workflow; these presets do not claim HDR-to-SDR tone mapping.

Optimize for

Five presets. Custom when you need control.

Everyday is the default for a new profile. Existing Auto CBR preferences carry forward as CTV; existing manual settings become Custom. The task names describe the output you need, while the source still influences the result.

01

Everyday

Watch, keep, and reuse

The starting point when you want a useful MP4 without choosing a delivery bitrate. Simple scenes can stay small; motion and texture get more bits.

Video
CRF 21
Timing
5-second keyframes · source timing
Audio target
128–192 kbps AAC
02

Streaming

Playback and reaction workflows

For playback in a production workflow, including media used alongside a reaction or presentation. A source-dependent bitrate cap prevents difficult scenes from growing without a practical limit. This exports an MP4; it does not start a live stream.

Video
CRF 20 + bitrate cap
Timing
2-second keyframes · constant frame rate
Audio target
160–192 kbps AAC
03

Editing

Cut, remix, and export again

Keeps more of the source detail for another round of editing and encoding. More frequent keyframes support seeking, at a file-size cost. It is still compressed H.264, not a ProRes or DNxHR editing master.

Video
CRF 18
Timing
1-second keyframes · constant frame rate
Audio target
192–256 kbps AAC
04

Sharing

Send a smaller file

Trades some fine detail for a smaller file. Useful when transfer size matters more than retaining every texture. It does not promise a particular attachment size.

Video
CRF 25
Timing
5-second keyframes · source timing
Audio target
96–128 kbps AAC
05

CTV

Upload to a TV distribution workflow

An upload master for a network that will transcode it into its own versions. The 1080p tier targets 2.5–10 Mbps and must measure at least 2,000 kbps of video. This is a delivery constraint, not a universal rule for good-looking 1080p.

Video
Source-informed constrained CBR
Timing
2-second keyframes · constant frame rate
Audio target
Source-informed AAC
06

Custom

Match a known specification

Use this when an editor, client, or platform gives you a specific requirement. Our Custom benchmark is one example: 10 Mbps CBR with 320 kbps AAC. It does not represent every possible Custom configuration.

Video
CBR or CRF 1–51
Timing
User-selected encoder settings
Audio target
User-selected audio settings

The measurements below are CPU x264 results at medium speed. The automatic presets also honor the Windows NVIDIA preference using separately tuned NVENC settings: CQ 24 for Everyday, 23 for Streaming, 20 for Editing, and 27 for Sharing. The NVIDIA tuning report includes 115 calibration measurements and 50 accepted CPU/GPU exports, including a separate holdout scene. CQ and CRF are different quality scales, and the same task can produce different file sizes with each encoder. Custom quality remains an explicit x264 CRF setting; Custom CBR supports NVIDIA.

The settings underneath

CRF, CBR, and the size of an MP4.

CRF varies bitrate to pursue a quality level. With x264, a lower CRF generally preserves more detail and uses more data. Our Everyday, Editing, and Sharing choices are 21, 18, and 25. Those are tested starting points, not universal quality scores. Grain can be expensive even at a sensible CRF, and a static image can compress extremely well.

Constrained CBR works toward a rate contract. CTV supplies a video target, minimum, maximum, and buffer to the encoder. The measured average of a short file can still differ from the requested rate. That is why the output is measured after encoding instead of treating the command line as proof of success.

Streaming combines CRF with a ceiling. It uses CRF 20 plus a resolution- and frame-rate-dependent VBV limit: for example, 5 Mbps at 720p, 10 Mbps at 1080p30, and 14 Mbps at 1080p60, with a two-second buffer. This bounds difficult content without allocating the same number of bits to every scene. A short clip’s average can exceed the nominal cap because of buffer behavior; this is not a strict attachment-size control.

For a rough file-size estimate

File size ≈ duration × (video bitrate + audio bitrate) ÷ 8

For 60 seconds at 5,000 kbps video + 160 kbps audio: about 38.7 MB, before container overhead. Use measured averages for CRF exports. MB here means 1,000,000 bytes.

Keyframes and frame rate solve different problems. More frequent keyframes shorten the gap between independently decodable starting points, but can increase size. Streaming and CTV target roughly two seconds; Editing targets one; Everyday and Sharing allow about five. The first three request constant frame rate at the source’s nominal rate. That does not turn 30 fps into real 60 fps motion.

MP4 faststart moves playback metadata toward the beginning of the file. It helps progressive playback start without waiting for the end of a download; it does not increase visual quality. See the FFmpeg x264 options and MP4 muxer documentation for the underlying controls.

Measured, not assumed

Explore all 24 final exports.

Each scene was encoded with five automatic presets and one fixed-bitrate comparison. Compare within a scene: VMAF uses that scene’s decoded source as its reference. A higher score is not a percentage of original quality. Every result below passed the production output validator and a full decode.

Why include a fixed-bitrate reference? The 10 Mbps CBR video + 320 kbps AAC configuration was entered through Custom; it is not an automatic preset or a recommended maximum-quality setting. It lets you compare a fixed bitrate budget with the source-informed presets. A full bar means the largest file in that scene, not the best quality. Compare VMAF alongside file size to judge the tradeoff.

Ocean

1080p · approximately 30 fps · water and moving texture. Six-second sample.

Ocean: final production results
ConfigurationSize (MB)VMAFVideo (kbps)Max keyframe gap (s)
Everyday5.81194.5577285.005
Streaming6.47895.4386162.002
Editing8.09596.96107691.001
Sharing4.46390.5059325.005
CTV4.86691.7264692.002
10 Mbps CBR reference7.65096.95101776.000

Static chart

1080p · 30 fps · a repeated test-chart frame with silence. Six-second sample.

Static chart: final production results
ConfigurationSize (MB)VMAFVideo (kbps)Max keyframe gap (s)
Everyday0.05897.29655.000
Streaming0.07497.35862.000
Editing0.13097.361601.000
Sharing0.05197.01545.000
CTV1.82397.4224182.000
10 Mbps CBR reference7.26197.4296686.000

60 fps motion

720p · 60 fps · synthetic motion and a normal tone. Six-second sample.

60 fps motion: final production results
ConfigurationSize (MB)VMAFVideo (kbps)Max keyframe gap (s)
Everyday4.25295.8754955.000
Streaming4.35195.8856262.000
Editing5.78897.0375101.000
Sharing2.36293.2230065.000
CTV4.19995.7254242.000
10 Mbps CBR reference8.50798.09110934.167

Grain

720p · 24 fps · deterministic noise and very quiet audio. Six-second sample.

Grain: final production results
ConfigurationSize (MB)VMAFVideo (kbps)Max keyframe gap (s)
Everyday10.47998.71138064.958
Streaming4.29597.7255601.958
Editing29.23799.37387961.000
Sharing2.09896.5626634.958
CTV4.05497.5852381.958
10 Mbps CBR reference7.91098.09103454.833

Scroll the table horizontally for all measurements. Bars use a separate zero-based scale for each scene. Custom here means 10 Mbps CBR + 320 kbps AAC. Values are measured video bitrate, not requested bitrate or total file bitrate.

Downloads contain all 48 calibration and final records. The chart shows only the 24 final production exports. Personal filesystem paths have been replaced with portable input/output paths.

What the first pass taught us

The tests changed the presets.

CTV needed headroom above its measured minimum.

Our network workflow needs at least 2,000 kbps of measured video at the 1080p tier. An initial 2,000 kbps target fell below that minimum on the short static sample. We kept the acceptance threshold and raised the target floor to 2.5 Mbps. The final static export measured 2,418 kbps.

For other 1080p-tier sources, the policy adds 25% target headroom to its source-derived estimate, rounded to existing bitrate steps and bounded between 2.5 and 10 Mbps. The ocean target moved from 5 to 6 Mbps: its source-relative VMAF moved from 87.65 in calibration to 91.72 in the final production export. More bits helped preserve this texture, but a minimum bitrate cannot repair a poor source.

Streaming needed a limit for difficult scenes.

The uncapped grain candidate produced a 17.49 MB file. After adding Streaming’s VBV constraint and running the final production policy, it was 4.29 MB with VMAF 97.72. Editing intentionally allowed more data for that same scene: 29.24 MB. The final production pass also changed timing and source-informed audio, so this is a comparison of configurations rather than a single-variable laboratory experiment.

Sharing made a useful, visible tradeoff.

On the ocean sample, Sharing was 4.46 MB versus Everyday’s 5.81 MB: about 23% smaller. VMAF moved from 94.55 to 90.50. Editing used 8.09 MB and scored 96.96. We kept those CRF choices because they create useful size and detail tradeoffs for different tasks.

The lesson is practical: choose a representative stretch of your own footage, export it, and inspect both the result and its size. Water, foliage, noise, and fast motion can behave very differently from slides or a talking head.

Audio deserves its own checks

A quiet track can have a tiny bitrate.

An almost silent ocean source exposed a faulty assumption in our earlier validation. AAC targeted at 160 kbps measured about 2.274 kbps in that separate full-source reproduction. Treating any result below 40% of the target as broken rejected valid quiet audio.

We removed that arbitrary floor, while retaining checks for a real audio stream, codec, duration, sample rate, channel count, and valid measured rate. The regression corpus independently decodes silence, very quiet tones, and ordinary tones and checks their signal energy. Eighteen real-encoder cases cover those three audio conditions across the six presets.

Increasing an audio target cannot recover information that the source has already lost. The automatic presets use source-informed targets rather than assigning maximum audio bitrate to every download. That is a different decision from blindly accepting a corrupt or missing audio stream.

For people who use the command line

Where yt-dlp ends and FFmpeg begins.

VODForge uses yt-dlp to work with the available source formats, FFmpeg to encode the selected export, and ffprobe plus validation to inspect the result. Source selection and output encoding are separate decisions.

With yt-dlp, -F lists available formats and -f chooses streams. Requesting an MP4 merge container alone does not define an H.264 quality level or a CBR delivery contract. The yt-dlp format-selection documentation explains those choices.

yt-dlp -F "VIDEO_URL"

For an existing suitable SDR file, this illustrates the core Everyday encoding choices. The application also calculates keyframe limits, selects streams, handles cancellation, and validates the completed file; this short example is not the complete app pipeline.

ffmpeg -i input.mp4 -map 0:v:0 -map "0:a:0?" \
  -c:v libx264 -preset medium -crf 21 \
  -profile:v high -pix_fmt yuv420p \
  -force_key_frames "expr:gte(t,n_forced*5)" \
  -c:a aac -b:a 160k -ar 48000 -ac 2 \
  -movflags +faststart output.mp4

For exact settings from these runs, the JSON download includes each executed FFmpeg argument list with portable path names. Do not compare x264 CRF directly with another encoder’s quality scale. If a platform specifies CBR, profile, resolution, or audio format, use that specification rather than substituting a similarly named quality option.

How to read the evidence

A useful benchmark, with a defined scope.

  1. Build four six-second references. An actual downloaded ocean clip supplies natural moving texture. FFmpeg generates a static chart, a 720p60 motion pattern, and seeded 720p24 grain. References are stored losslessly as FFV1 with PCM audio after decoding; this does not undo compression in the downloaded ocean source.
  2. Calibrate, then use the application pipeline. We compared 24 initial candidates, tuned the policies, and ran 24 final exports through the production planner, command builder, and validator. The ocean source-rate hint was 4 Mbps; the synthetic fixtures used explicit compressed-source hints for the source-informed policies.
  3. Measure the output. Receipts retain bytes, measured video bitrate, maximum keyframe gap, encoding time, and source-relative VMAF. Frame indices are aligned for VMAF to remove millisecond container-timebase differences. An earlier misaligned attempt was discarded.
  4. Check beyond a score. All final files passed full decoding and production validation. Keyframe gaps matched their requested intervals within one frame. Separate worker tests covered encoding, validation, committing valid output, and reusing it safely.

Netflix’s VMAF project provides the perceptual comparison tool. These measurements are relative fidelity checks, not a viewer study. They do not establish performance on every computer, codec, length, or type of footage. Encoding times are included as receipts, but calibration used a different thread configuration; they are not a controlled speed benchmark.

CTV means an upload master here. It does not create an HLS rendition ladder, align segments across renditions, or certify playback on every Roku, Fire TV, or Apple TV. Device support varies, and the network’s final ingest specification was unavailable. We considered the Roku media documentation, Apple HLS authoring guidance, and Fire TV device specifications. Actual network-ingest and physical-device testing remain separate work.

Likewise, Streaming is not an OBS certification and Editing is not an NLE performance benchmark. For OBS, consult its media-source documentation and test playback on the machine that will use the file. Above-1080p H.264 masters do not imply universal direct 4K playback.

Common questions

MP4 export settings FAQ.

What are good MP4 export settings for 1080p?

For VODForge’s tested Everyday preset, the starting point is H.264 High, yuv420p, x264 medium, CRF 21, and source-informed AAC stereo at 48 kHz. There is no single bitrate that suits every 1080p scene. Use a delivery bitrate when your destination requires one; compare a representative export before processing a large batch.

Is CRF better than CBR for MP4?

CRF is useful when you want the encoder to vary bitrate with scene complexity. CBR is useful when a delivery workflow requires a constrained rate. Neither is universally better: VODForge uses CRF for Everyday, Streaming, Editing, and Sharing, and constrained CBR for CTV.

Does a higher bitrate improve a downloaded video?

A higher output bitrate can reduce additional compression damage, but it cannot restore detail missing from the downloaded source. A larger file is not proof of a better source or a better export.

Does yt-dlp’s MP4 option guarantee H.264 video?

MP4 is a container. Choosing a merge container does not by itself define a video codec, quality level, or delivery bitrate. Select the available source streams deliberately, and use encoding settings when you need a specific H.264 output.

Is the Streaming preset an OBS or live-stream encoder?

It produces a local MP4 intended for playback workflows. It does not configure OBS, send a live stream, or generate HLS segments. OBS playback performance still depends on the computer and media-source configuration; these measurements are not an OBS certification.

Does VMAF 95 mean 95 percent original quality?

No. VMAF is a perceptual quality metric comparing an export with a reference. Our numbers measure fidelity to the decoded test source. They are not a percentage of original camera quality or a guarantee that every viewer will prefer one export.

Why can AAC measure far below its target bitrate?

Nearly silent audio can require very few bits. A low measured average alone does not prove corruption. VODForge checks the audio stream’s other properties, and the regression tests independently decode silence, quiet tones, and normal tones.

Meet VODForge

Use the tools. Skip the repeated setup.

VODForge is a free, open-source desktop app for downloading video and audio locally on Mac and Windows. It brings source selection, FFmpeg processing, output inspection, and a Library into one workflow.

The new presets described here are in development. You can use the current public app today and follow the changelog for their release.