如何用Python提取视频文件的比特率及其他统计信息

0 投票
2 回答
5333 浏览
提问于 2025-04-16 05:01

我想从一个视频文件中提取出当前的比特率,比如一个.mkv格式的电影文件。我希望在正常播放的情况下,每隔1到10秒就能获取一次比特率。这种信息在vlc播放器的统计窗口中可以看到。

有没有人能推荐一个好的方法来开始编写这样的分析工具?有没有人知道可以提供这类信息的库?也许是一个针对ffmpeg的Python封装,或者其他类似的工具,可以处理视频文件并提取这些统计数据。

我真正想要的是一个CSV格式的文件,里面包含每秒的时间偏移和在那个时间点的平均比特率,单位是KiB/s。

更新:

我搭建了pyffmpeg,并写了以下代码:

import pyffmpeg

reader = pyffmpeg.FFMpegReader(False)
reader.open("/home/mark/Videos/BBB.m2ts", pyffmpeg.TS_VIDEO)
tracks=reader.get_tracks()

# Called for each frame
def obs(f):
  pass

tracks[0].set_observer(obs)
reader.run()

但是在回调中观察帧信息(f)似乎并没有给我计算每秒比特率的机会。实际上,pyffmpeg中的比特率计算是基于整个文件的(文件大小 / 时长),所以这个库的处理方式非常表面。显然,它的重点是提取I帧和其他帧/GOP特定的工作。

2 个回答

0

你可以使用gstreamer来实现这个功能。这里有一个简单的媒体播放器的例子,链接在这里:http://pygstdocs.berlios.de/pygst-tutorial/seeking.html。这个例子中,它会定期调用

pos_int = self.player.query_position(gst.FORMAT_TIME, None)[0]

。你只需要第二次调用 query_position(),并使用 gst.FORMAT_BYTES,然后做一些简单的数学运算,搞定了!这样就能得到比特率和时间的关系。

撰写回答