The library and the three viewing levels
Fifty hours is 3,000 minutes of finished video. Services price in one of two ways: per minute stored and delivered (Cloudflare Stream, Mux), or per gigabyte stored and delivered (Bunny Stream). Per-minute pricing ignores resolution; per-gigabyte pricing depends on how many megabits each minute carries.
Pick the viewing level closest to your numbers by multiplying active students by minutes each watches in a month. 500 students watching 100 minutes is 50,000 minutes; 2,500 students at 100 minutes is 250,000.
| Level | Minutes delivered per month | Example |
|---|---|---|
| Low | 50,000 | 500 active students watching about 100 minutes each |
| Medium | 250,000 | 2,500 active students at 100 minutes |
| High | 1,000,000 | 5,000 active students at 200 minutes |
Published rates used
| Service | Storage | Delivery | Encoding | Notes |
|---|---|---|---|---|
| Cloudflare Stream | $5 per 1,000 minutes stored, prepaid monthly increments | $1 per 1,000 minutes delivered | Free | Delivery counted by video segment requests; browser-cache playback not billed |
| Mux (1080p basic) | $0.003 per minute per month | $0.001 per minute after 100,000 free minutes a month | Free on basic | Listed as starting-at first-tier rates; pay-as-you-go includes a $20 monthly usage credit |
| Bunny Stream | From $0.01 per GB per month (one Standard region) | $0.01 per GB Europe and North America; $0.03 Asia and Oceania; volume network $0.005 | Free | $1 monthly minimum |
Annual cost at each level
Cloudflare: 3,000 minutes is three storage blocks, $15 a month or $180 a year. Delivery is $50, $250 or $1,000 a month at the three levels.
Mux: storage is 3,000 x $0.003 = $9 a month, $108 a year. Delivery is free up to 100,000 minutes a month, then $0.001 a minute: $0 at low, 150,000 x $0.001 = $150 a month at medium, and 900,000 x $0.001 = $900 a month at high. The $20 monthly usage credit on pay-as-you-go would reduce these further; it is left out here to keep the comparison conservative.
Bunny: assume an average delivered bitrate of 3 Mbps, which is 22.5 MB per minute, and 150 GB stored across all renditions (3 GB per hour of video). Both are assumptions, not Bunny figures. Storage at $0.01 per GB is $1.50 a month. Delivery is 1,125 GB, 5,625 GB or 22,500 GB a month, priced here at bunny.net's standard-network rate of $0.01 per GB for a North American and European audience. The Stream page advertises delivery from $0.005 per GB, the volume-network rate, so these figures are the higher of the two published rates.
| Service | Low: 50,000 min/mo | Medium: 250,000 min/mo | High: 1,000,000 min/mo |
|---|---|---|---|
| Cloudflare Stream | $180 + $600 = $780 | $180 + $3,000 = $3,180 | $180 + $12,000 = $12,180 |
| Mux, basic | $108 + $0 = $108 | $108 + $1,800 = $1,908 | $108 + $10,800 = $10,908 |
| Bunny Stream, NA/EU at 3 Mbps | $18 + $135 = $153 | $18 + $675 = $693 | $18 + $2,700 = $2,718 |
| Bunny Stream, Asia/Oceania at 3 Mbps | $18 + $405 = $423 | $18 + $2,025 = $2,043 | $18 + $8,100 = $8,118 |
Where Vimeo fits, and why it does not belong on the WordPress host
Vimeo prices by plan rather than by usage, so it does not fit the per-minute table. What matters for a course library is its bandwidth threshold. Vimeo's help center lists 2 TB of monthly bandwidth on Starter, Standard and Advanced, and storage of 2 TB, 4 TB and 7 TB respectively. It does not stop streaming at the threshold, but reaches out if an account exceeds 2 TB a month at least twice in 12 months or 10 TB once, and an unresolved account can be temporarily suspended.
At the 3 Mbps assumption, 2 TB is about 89,000 minutes a month. The low level fits; medium and high would exceed the threshold every month. Check Vimeo's current plan prices on its pricing page before comparing.
Serving video from managed WordPress hosting is the expensive option. Kinsta lists server bandwidth overage at $0.50 per GB and CDN overage at $0.05 per GB. At the medium level, 5,625 GB a month of CDN overage alone would be about $281 a month, before any plan allowance, and video files also count against disk space.
Choosing by audience and use
- Low viewing, mostly one region: Mux's free delivery allowance or Bunny's per-GB rates keep the bill close to storage cost.
- High viewing in North America and Europe: Bunny's per-GB pricing is the cheapest at these assumptions, but recompute with your real bitrate; at 6 Mbps its delivery cost doubles.
- Audience in Asia, South America or Africa: Bunny's regional rates rise to $0.03 to $0.06 per GB, which narrows the gap with per-minute services.
- Need simple, predictable invoices: per-minute pricing does not change with resolution, which makes budgeting easier.
- Paid content: Cloudflare Stream supports signed URLs and an allowed-origins list; Bunny Stream supports embed view token authentication. Turn these on before launch.
Worksheet: compute your own number
- Minutes in library x storage rate x 12 = annual storage.
- Active students x minutes watched per month = minutes delivered.
- For per-GB services: minutes delivered x MB per minute (Mbps x 7.5) / 1,000 = GB delivered.
- Subtract any free allowance, multiply by the delivery rate, then by 12.
- Add encoding if your service charges for it; the three above list it as free for on-demand.
Questions before you decide
What is the cheapest way to host 50 hours of course video?
At low viewing, Mux's published rates come to about $108 a year because its first 100,000 delivered minutes a month are free. At high viewing in North America and Europe, Bunny Stream is cheapest at a 3 Mbps assumption, about $2,718 a year.
Does storage or delivery cost more?
Delivery. Storing 3,000 minutes costs $108 to $180 a year on Mux or Cloudflare Stream, while delivering a million minutes a month costs $10,800 to $12,000 a year on the same services.
Can I use Vimeo for a busy course library?
Vimeo's help center lists a 2 TB monthly bandwidth threshold on Starter, Standard and Advanced and contacts accounts that exceed it repeatedly. At 3 Mbps that is roughly 89,000 minutes a month.
Is encoding extra?
Cloudflare Stream says ingress and encoding are free, Bunny Stream lists encoding as free, and Mux lists free input for 1080p basic quality, with plus quality charged per minute.
Sources & verification
Product details and prices can change. Check the linked provider before buying.
- Cloudflare Stream: pricing Accessed 30 Oct 2026
- Cloudflare Stream: securing your stream Accessed 30 Oct 2026
- Mux: pricing Accessed 30 Oct 2026
- Bunny Stream: pricing Accessed 30 Oct 2026
- bunny.net: CDN pricing Accessed 30 Oct 2026
- bunny.net: storage pricing Accessed 30 Oct 2026
- bunny.net: Stream security Accessed 30 Oct 2026
- Vimeo Help Center: About Vimeo plans Accessed 30 Oct 2026
- Vimeo Help Center: Bandwidth on Vimeo Accessed 30 Oct 2026
- Kinsta: overages Accessed 30 Oct 2026
Sources link directly to providers. Product buttons may use separately labeled affiliate links. Read our disclosure.