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

如何使用FFmpeg获取视频流FPS及转码时写入清单的相关问题

如何使用FFmpeg获取视频流FPS及转码时写入清单的相关问题

从你贴的代码console.log(this.dsh.getBitrateInfoListFor('video'))和截图来看,你现在尝试用dashjs获取视频流的比特率信息,但没找到帧率(FPS)相关字段对吧?我来一步步帮你解决这个问题:

一、先查看现有视频流的FPS

如果你只是想确认源视频或已转码视频的帧率,可以用FFmpeg的配套工具ffprobe来快速获取:

  • 查看详细的视频流信息(包含帧率):
    ffprobe -i input.mp4
    
    输出里找到Stream #0:0(视频流)那一行,会有类似30 fps, 30 tbr, 1k tbn, 60 tbc的内容,这里的30 fps就是视频帧率。
  • 直接输出帧率数值,更简洁:
    ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 input.mp4
    
    这个命令会直接返回类似30/1的结果,代表30帧每秒。

二、转码时将FPS写入DASH清单(MPD)

你猜的没错——要让dashjs能通过getBitrateInfoListFor拿到FPS,必须在转码生成DASH清单(MPD文件)时,让FFmpeg把帧率元数据写入到清单里。

基础FFmpeg转码生成DASH的命令

下面是一个标准的转码命令,会自动把源视频的帧率信息写入到MPD中:

ffmpeg -i input.mp4 \
  -c:v libx264 -crf 23 -preset medium \
  -c:a aac -b:a 128k \
  -f dash -use_timeline 1 -use_template 1 \
  output.mpd

关键参数说明:

  • -f dash:指定输出格式为DASH标准
  • -use_timeline 1和-use_template 1:生成符合规范的DASH清单结构,确保元数据被正确包含

强制指定固定帧率(可选)

如果你的源视频帧率不稳定,或者想要强制设置一个固定帧率,可以加上-r参数,同时显式添加帧率元数据:

ffmpeg -i input.mp4 \
  -r 30 \
  -c:v libx264 -crf 23 -preset medium \
  -c:a aac -b:a 128k \
  -f dash -use_timeline 1 -use_template 1 \
  -metadata:s:v:0 fps=30 \
  output.mpd

这里的-metadata:s:v:0 fps=30是显式给视频流添加帧率元数据,进一步确保MPD里会包含这个信息。

三、用dashjs获取FPS信息

当MPD里正确包含帧率信息后,你再调用this.dsh.getBitrateInfoListFor('video'),返回的每个比特率信息对象里应该会有frameRate属性,示例代码:

const bitrateInfoList = this.dsh.getBitrateInfoListFor('video');
bitrateInfoList.forEach(info => {
  console.log(`分辨率: ${info.width}x${info.height}, 帧率: ${info.frameRate}`);
});

这样就能轻松拿到每个视频流的FPS啦!

备注:内容来源于stack exchange,提问作者Дмитрий

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:38:06