如何用Python提取视频文件的比特率及其他统计信息
我想从一个视频文件中提取出当前的比特率,比如一个.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
,然后做一些简单的数学运算,搞定了!这样就能得到比特率和时间的关系。