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

如何用ffmpeg/ffprobe获取HLS音视频流的CODECS字符串

如何从ffprobe元数据生成HLS主播放列表的CODECS值

我来帮你解决这个问题——手动生成HLS主播放列表时需要的CODECS值,其实完全可以从你已经拿到的ffprobe元数据里拼接出来,不用额外找工具。下面分步骤拆解:

一、先搞懂CODECS的格式要求

HLS里的CODECS值是视频编码标识符和音频编码标识符的组合,用逗号分隔,格式类似:"avc1.XXXXXX,mp4a.YY.Z"。

二、从你的ffprobe元数据生成对应值

1. 视频流部分(以你提供的H.264为例)

你的视频元数据里有三个关键字段:

  • codec_tag_string: avc1(这是H.264的标准前缀)
  • profile: High(对应十六进制值64;Baseline是42,Main是4D)
  • level: 30(转十六进制是1E)

按照avc1.<profile-hex>00<level-hex>的规则拼接,结果就是:avc1.64001e

2. 音频流部分(以你提供的AAC LC为例)

你的音频元数据关键字段:

  • codec_tag_string: mp4a(AAC的标准前缀)
  • profile: LC(对应object type值2)

HLS里AAC LC的标准写法是mp4a.40.2(40是固定的描述符,2对应LC profile),所以音频部分就是:mp4a.40.2

3. 组合最终的CODECS值

把视频和音频部分用逗号连起来,加上引号,就是你需要的:
"avc1.64001e,mp4a.40.2"

三、用ffprobe自动化生成(避免手动计算)

如果不想手动拼接十六进制,可以用ffprobe配合awk直接输出格式化后的CODECS值:

生成视频编码标识符:

ffprobe -v error -select_streams v:0 -show_entries stream=codec_tag_string,profile,level -of csv=p=0 input.mp4 | awk -F',' '{ 
    profile_map["Baseline"]="42"; profile_map["Main"]="4D"; profile_map["High"]="64"; 
    printf "%s.%s00%X\n", $1, profile_map[$2], $3 
}'

生成音频编码标识符:

ffprobe -v error -select_streams a:0 -show_entries stream=codec_tag_string,profile -of csv=p=0 input.mp4 | awk -F',' '{ 
    if ($2 == "LC") printf "%s.40.2\n", $1 
}'

把两个命令的结果用逗号拼接,就是完整的CODECS值了。

验证一下

你给出的示例主播放列表里的CODECS值,和我们用你的元数据生成的完全一致,说明这个方法是对的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:23:43