For a typical SDR YouTube upload, choose the output resolution and frame rate to match your source and target, then use YouTube’s bitrate recommendation as an FFmpeg starting point. For example, 1080p at 24, 25, or 30 fps uses an 8 Mbps reference; at 48, 50, or 60 fps, the reference is 12 Mbps. YouTube describes these as recommendations, not required bitrate caps. Encode progressive H.264 video in MP4 with variable bitrate (VBR), 4:2:0 chroma, and BT.709 color for SDR. On a Hetzner VPS, measure your own encode time and verify the plan’s outgoing traffic allowance rather than assuming a particular speed or quota.
Choose resolution and bitrate from YouTube’s upload recommendations
The following SDR rates are YouTube’s published upload references, accessed in 2026. Standard frame rates mean 24, 25, or 30 fps; high frame rates mean 48, 50, or 60 fps. They are starting points for the upload file, not a guarantee of visual quality or a mandatory maximum.
| Output resolution | Standard frame rate | High frame rate |
|---|---|---|
| 720p | 5 Mbps | 7.5 Mbps |
| 1080p | 8 Mbps | 12 Mbps |
| 1440p | 16 Mbps | 24 Mbps |
| 2160p (4K) | 35–45 Mbps | 53–68 Mbps |
For instance, a 1080p30 source points to 8 Mbps; a 1080p60 source points to 12 Mbps. Choose based on the intended output and the source’s detail and motion. Increasing resolution or bitrate cannot recreate detail absent from the original. YouTube’s standard computer aspect ratio is 16:9, but its player adapts to vertical and square uploads, so do not force a widescreen output when the source is not widescreen.
YouTube’s upload encoding guidance specifies variable bitrate and says no bitrate limit is required, offering its rates for reference. A higher rate can increase file size and upload time; the visible benefit depends on the footage and encoding. Test a representative clip if you are unsure.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problems#1 Best Overall
Set up a compatible FFmpeg encode
Use a command that fits the source
Here is an example for a progressive 1920×1080, 30 fps SDR source that should remain at its original dimensions and frame rate. It uses FFmpeg’s libx264 encoder, a 2-second GOP, and a 48 kHz AAC audio track:
ffmpeg -i input.mp4 -c:v libx264 -preset medium -pix_fmt yuv420p -b:v 8M -maxrate 16M -bufsize 16M -g 60 -color_primaries bt709 -color_trc bt709 -colorspace bt709 -c:a aac -b:a 128k -ar 48000 -movflags +faststart output.mp4
This is an illustrative starting command, not a universal preset. The 8M value means 8 megabits per second; FFmpeg’s generic bitrate option uses bits per second, and its suffixes such as M make the value readable. Here, -maxrate and -bufsize shape rate control for this example; YouTube does not require these caps. Encoder-specific options and their behavior depend on the encoder and installed FFmpeg build. Check the FFmpeg codec documentation and your build’s available options before relying on an encoder-specific setting.
Rank #2
The -g 60 setting corresponds to a 2-second GOP at 30 fps. If you change frame rate, adjust the GOP accordingly if you want to retain that interval; do not copy it unchanged to every frame rate. The medium preset is a speed/encoding-efficiency trade-off: slower presets can take longer, and the right choice depends on your compute budget and quality needs. This example does not establish a benchmark for any Hetzner instance.
Scaling is source-dependent
The example deliberately does not scale: it assumes the input is already 1920×1080 and that preserving its dimensions is appropriate. If you need a different output size, inspect the input’s dimensions and aspect ratio first, then choose a scale expression that preserves the intended framing. A single scale expression is not safe for every landscape, portrait, square, or anamorphic source. Avoid stretching the picture to hit a target resolution.
Rank #3
Frame rate, scan type, color, and audio
- Frame rate: Keep the output frame rate the same as the recorded source when possible. Do not convert 30 fps footage to 60 fps simply to match a higher recommendation category.
- Interlacing: YouTube advises deinterlacing interlaced content before upload. The example assumes progressive input and does not deinterlace.
- Color: YouTube recommends BT.709 for SDR. The command marks BT.709 color metadata; that is not a substitute for correct color conversion if the source uses another color space. Conversion depends on source metadata and workflow. See YouTube’s color-space guidance.
- Container and chroma: The example creates MP4 with H.264 and 4:2:0 pixel format (
yuv420p). YouTube’s general upload guidance recommends MP4 and progressive video. - Audio: The example encodes AAC at 48 kHz. YouTube’s guidance lists AAC-LC or Opus and a 48 kHz sample rate. Confirm that the chosen encoder supports the required codec.
- Fast start:
-movflags +faststartmoves MP4 metadata to the beginning of the file, matching YouTube’s fast-start recommendation.
Adapt the bitrate to another target
For a 1080p60 SDR file, replace -b:v 8M with -b:v 12M. For other resolutions or frame-rate categories, use the corresponding table reference. For 4K, YouTube publishes a range rather than one figure; choose within the applicable range based on footage and file-size constraints, then evaluate the result. Keep any rate-control options appropriate to the selected encoder; the generic bitrate setting does not make every codec behave identically.
Run the encode and check the output
- Confirm FFmpeg and encoder availability: Run
ffmpeg -versionandffmpeg -encoderson the VPS. Verify that the build includes the encoder named in your command, such aslibx264. If it does not, use an available encoder and check its supported rate-control options. - Inspect the input: Use
ffprobe -v error -show_streams -show_format input.mp4to examine dimensions, frame rate, pixel format, color metadata, and audio streams. Decide whether to preserve dimensions and frame rate or deliberately convert them. - Encode a representative sample: Test footage with the motion and detail typical of your full video. Compare the result at the intended viewing size, check audio and color, and note encode time and output size.
- Encode the full file: Substitute the correct input, output, bitrate, and any source-specific filter or frame-rate decisions. Keep the shell’s working directory and available disk space in mind.
- Inspect the result: Run
ffprobeon the output and check that the video codec, dimensions, frame rate, audio, and container are as intended. Watch sections with motion, gradients, and fine detail before uploading. - Upload through YouTube Studio: Allow time for file transfer and YouTube processing. Processing availability and playback quality can take time after upload; the upload bitrate is not a promise of immediate playback at every resolution.
Estimate VPS encoding and upload constraints
Encoding time depends on the actual workload
Video encoding is CPU-intensive. Hetzner says shared-resource Cloud plans distribute CPU resources among instances and may burst above baseline. Its Cloud FAQ describes CCX dedicated-resource instances as providing exclusive CPU resources and recommends them for CPU-intensive applications or predictable production workloads. That distinction does not establish a fixed encode speed for a named plan: codec, preset, resolution, source complexity, concurrent work, and available CPU all affect elapsed time.
Rank #4
Benchmark a representative input on the exact VPS you plan to use. Record the encode duration and watch system load during the run. If repeated jobs miss your schedule, consider a faster preset, lower output resolution or frame rate when appropriate, or a plan with more predictable CPU allocation. Each choice trades encoding time, output size, quality, or cost; verify the result rather than assuming a particular improvement.
Check outbound traffic for the precise product and region
Encoding is only part of the job: the completed file must still reach YouTube. Hetzner’s traffic documentation lists different outgoing monthly allowances by Cloud product family and location. Its 2024 published figures list 20 TB for EU CX, CPX, and CAX Cloud Servers; CCX allowances vary by region and plan. These are not a universal allowance for every Hetzner VPS. Check the current terms for your exact product and location before planning repeated large uploads.
Estimate file size and transfer time
At a constant average video rate, approximate video size in decimal gigabytes as bitrate in Mbps × duration in seconds ÷ 8,000. A one-hour video at 8 Mbps is about 3.6 GB of video data before audio and container overhead. VBR output varies with the content, so this is an estimate, not a guaranteed size. Upload time also depends on the available outbound throughput and other traffic; leave headroom for retries and overhead.
Troubleshooting common problems
- “Unknown encoder” or an unavailable codec: The installed FFmpeg build may not include the requested encoder. Check
ffmpeg -encoders; install a build with the encoder or adapt the command to a supported one and verify its options. - Output is the wrong size or distorted: The input’s aspect ratio or dimensions may differ from the command’s assumptions. Inspect it with
ffprobe, then select a scale and crop/pad approach that preserves the intended framing rather than stretching. - Color looks washed out or shifted: A metadata flag alone does not convert source pixels. Check the input color characteristics and conversion filters or workflow; YouTube’s SDR recommendation is BT.709, but conversion behavior depends on the input.
- File is much larger or smaller than expected: VBR varies with image complexity, and bitrate is not an exact file-size target. Check the output’s actual average bitrate and duration, then adjust and test if needed.
- Encode takes too long: Preset, CPU availability, codec, resolution, and concurrent load can all contribute. Benchmark the same source and settings, then decide whether speed, output quality, or predictable CPU resources matter most.
- Upload is slow or stops: Check VPS network conditions, available disk space, and the outgoing traffic terms for the plan and location. A traffic allowance is not a throughput guarantee.
- YouTube rejects or processes the upload unexpectedly: Verify the container, codecs, scan type, frame rate, and color handling against YouTube’s upload encoding guidance. Do not treat a recommended bitrate as a required cap.
Copyright and channel-policy checks before uploading
Technical compliance does not grant rights to the footage, music, or other material in a video. Upload only content you own or are permitted to use, and review YouTube’s current copyright and channel monetization policies for your situation. Repeatedly uploading minimally changed or reused material can raise issues separate from bitrate, resolution, and encoding; no FFmpeg setting makes content policy-compliant.
Or let it run in the cloud
If your goal is to keep uploaded videos looping as a 24/7 YouTube live stream, that is a different workflow from preparing an upload file with FFmpeg. StreamNeo runs that stream in the cloud: upload your recording or build a playlist, add your YouTube stream key, and go live. Nothing has to stay on at home; it streams the uploaded quality up to 4K 60fps at one price per slot, and automatically recovers if YouTube drops the stream. The first day is free with no card. Monthly pricing is $9.99 per month. StreamNeo is YouTube-only and plays uploaded videos; it does not stream from a camera. See StreamNeo or start the free first day.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

