You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

hls.js码率单位解析:与在线计算工具的差异原因、转换方法及FFmpeg视频码率匹配方案

HLS Levels码率单位差异与转换方案

问题核心拆解

你遇到的码率数值量级差异,本质就是计量单位不同——我给你理清楚来龙去脉:

为什么数值差这么多?

hls.js和Flow Player返回的bitrate字段,单位是bps(比特/秒);而那些在线工具默认展示的是kbps(千比特/秒),1 kbps = 1000 bps。

拿你提供的数据验证下:

  • 第1级240P码率:655336 bps ÷ 1000 ≈ 655 kbps
  • 第5级1080P码率:5295051 bps ÷ 1000 ≈ 5295 kbps,和你自有视频里的appleBitrate16x9: 6000/7800属于同量级的合理范围

怎么转换?

直接做除法就行,简单粗暴:

// 把bps转成常用的kbps,保留整数方便后续使用
const convertBpsToKbps = (bpsValue) => Math.round(bpsValue / 1000);

针对FFmpeg制作HLS视频的落地建议

既然要匹配Flow Player的码率,按这个流程来:

  1. 先把Flow Player返回的bps码率转成kbps(比如1283444 → 1283 kbps)
  2. 在FFmpeg命令里用-b:v 1283k这种格式设置对应分辨率的视频码率
  3. 如果后续停用Flow Player,直接用你现有qualities数组里的数值就行——calcBitrate4x3、appleBitrate16x9本身就是kbps单位,不需要额外转换

给你贴个FFmpeg生成多码率HLS的示例片段:

ffmpeg -i input.mp4 \
  # 240P层级
  -filter:v "scale=-2:240" -b:v 655k -c:v libx264 -preset medium -crf 23 \
  # 360P层级
  -filter:v "scale=-2:360" -b:v 1283k -c:v libx264 -preset medium -crf 23 \
  # 720P层级
  -filter:v "scale=-2:720" -b:v 2703k -c:v libx264 -preset medium -crf 23 \
  -master_pl_name master.m3u8 \
  -hls_segment_filename "level_%v/segment_%03d.ts" \
  -hls_list_size 0 \
  level_%v/stream.m3u8

内容的提问来源于stack exchange,提问作者danday74

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 20:22:49