YouTube Live 1080p30 H.264 bitrate: 5 to 14 Mbps, GB per hour

YouTube Live recommends 5 to 14 Mbps for 1080p30 H.264, with 2 B-frames and a 2-second keyframe. The gigabytes per hour for each rung, and what Sume cannot set.

4 min readSume
All posts

For 1080p at 30 fps with H.264, YouTube's live page gives a minimum of 5 Mbps and a recommended 14 Mbps. At 14 Mbps a one-hour stream moves 6.3 GB, and at 5 Mbps it moves 2.25 GB. Sume's Timeline has no bitrate, keyframe or B-frame field, so those live in the encoder you stream from.

H.264 ranges at 30 fps

YouTube's table gives separate ranges for AV1 and H.265 versus H.264. The rows here use the H.264 columns only. Gigabytes are decimal and computed as megabits per second times 3,600 seconds, divided by 8, divided by 1,000.

YouTube Live bitrates, H.264, with data per hour (read 2026-10-04)
IngestMinimumRecommendedGB per hour at minimumGB per hour at recommended
720p @30fps3 Mbps8 Mbps1.35 GB3.60 GB
1080p @30fps5 Mbps14 Mbps2.25 GB6.30 GB
1440p @30fps7 Mbps21 Mbps3.15 GB9.45 GB
2160p (4K) @30fps11 Mbps42 Mbps4.95 GB18.90 GB

The encoder settings

YouTube lists RTMP or RTMPS for protocol, up to 60 fps, a recommended keyframe interval of 2 seconds that must not exceed 4, constant bitrate encoding, and AAC or MP3 audio. Its recommended advanced settings are progressive scan, 2 B-frames, 1 reference frame, CABAC, a square pixel aspect ratio and Rec. 709 color for SDR.

What the Live Control Room needs

YouTube says that in the Live Control Room you only need to specify resolution, frame rate and bitrate in your encoder, because it detects the rest. It also says low latency is not available at 4K, so every 4K stream uses normal latency optimized for quality.

Run the arithmetic

import asyncio

# YouTube recommended H.264 ranges, 30 fps: (minimum Mbps, recommended Mbps)
RATES = {"720p": (3, 8), "1080p": (5, 14), "1440p": (7, 21), "4K": (11, 42)}

def gb_per_hour(mbps):
    return mbps * 1_000_000 * 3600 / 8 / 1_000_000_000

async def main():
    for name, (low, high) in RATES.items():
        print(name, round(gb_per_hour(low), 2), round(gb_per_hour(high), 2))

asyncio.run(main())

Where Sume fits

Timeline 1.0 can fix width, height and frame rate (24, 25, 30 or 60) of a pre-rendered MP4 up to 1800 seconds, but it rejects codec and crf keys, so bitrate and B-frame structure are not yours to choose there. For a 30-minute pre-recorded segment, the live encoder's bitrate decides the data sent, not the MP4.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume