You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用FFmpeg从TS文件的指定帧索引中提取PTS(时间戳)?

如何使用FFmpeg从TS文件的指定帧索引中提取PTS(时间戳)?

嘿,我来帮你搞定这个问题!你原来的命令有几个小问题,导致没有输出,咱们一步步修正过来:

首先,你的命令里混用了一些更适配ffprobe的参数,而且select滤镜的逻辑可以更精准——你要的是特定索引的单帧,而不是从该索引开始的所有帧。另外FFmpeg的参数顺序很关键,输出相关的参数得放在正确位置。

方法1:用FFmpeg直接提取(适合快速验证)

调整后的命令会精准选中目标帧,只输出它的PTS时间:

ffmpeg -i 0.ts -vf "select=eq(n\,5)" -vframes 1 -show_entries frame=pkt_pts_time -v quiet -of csv=p=0

关键改动说明:

  • eq(n\,5)n代表帧索引(从0开始计数),eq表示只选中索引等于5的帧,比你原来用的gte更精准,不会输出后续多余帧
  • -vframes 1:告诉FFmpeg只处理1帧,避免不必要的计算
  • 去掉了output.txt-stats-y这些无关参数,直接把结果输出到控制台;如果要保存到文件,在命令末尾加> output.txt即可

运行后你会得到类似15.000000的纯数字结果,完全符合你要的简洁输出形式。

方法2:用ffprobe提取(更高效,推荐)

其实用ffprobe来提取帧元数据会更直接,不需要解码整个视频,大文件场景下速度快很多:

ffprobe -i 0.ts -select_streams v:0 -show_entries frame=pkt_pts_time,frame_index -v quiet -of csv=p=0 | grep ",5$" | cut -d',' -f1

逻辑拆解:

  • -select_streams v:0:指定只处理视频流,避免音频流的干扰
  • -show_entries frame=pkt_pts_time,frame_index:同时输出帧索引和对应的PTS时间
  • grep ",5$"筛选出索引为5的那一行,再用cut提取出PTS时间部分

同样能得到你需要的纯数字结果,性能表现更优。

最后提醒下:帧索引是从0开始计数的!如果你要的是第6帧(从1开始数),那索引就是5,和你原来的设置一致;如果是第5帧(从1数),记得把数字改成4哦。

备注:内容来源于stack exchange,提问作者Aven

火山引擎 最新活动