如何在python-vlc中获取比特率、采样率和每个样本的比特数
How to obtain bitrate, sample rate and bits per sample in python-vlc
我正在尝试使用 python-vlc 获取音频文件每个样本的比特率、采样率实际比特数。
我看到我们可以使用 libvlc_media_tracks_get()
到 ,但我不确定如何获得其他的。
但是即使这个方法可以获取所有3个信息,我仍然无法使该方法起作用。它需要 2 个参数 p_md
和 tracks
。我不明白什么是tracks
。它说它需要一个 LP_LP_MediaTrack
的实例,但我无法以某种方式找到它的含义。
比特率:
# This allocates a double pointer and a MediaTrack object in RAM, then points to
# it, but no value is assigned to this double pointer or the MediaTrack object.
mediaTrack_pp = ctypes.POINTER(vlc.MediaTrack)()
# Assigns the MediaTrack in the double pointer to the values stored in `media`,
# returning the amount of media tracks as `n`
n = vlc.libvlc_media_tracks_get(media, ctypes.byref(mediaTrack_pp))
# Converts the double pointer to `POINTER` class that Python understands. We can
# then get the value the pointer is pointing at.
info = ctypes.cast(mediaTrack_pp, ctypes.POINTER(ctypes.POINTER(vlc.MediaTrack) * n))
# This gets the actual value of the double pointer i.e. value of MediaTrack
media_tracks = info.contents[0].contents
采样率(附加上述代码):
# According to the API doc, MediaTrack class has an `u` field which has an
# `audio` field, containing the audio track.
audio = ctypes.cast(media_tracks.u.audio, ctypes.POINTER(vlc.AudioTrack))
# The AudioTrack class has a `rate` field, which is the sample rate.
sample = audio.contents.rate
我无法获取码率的主要原因是因为我不了解如何获取数据类型LP_LP_MediaTrack
。这是 MediaTrack 实例的双指针。
当vlc.libvlc_media_tracks_get(media, ctypes.byref(mediaTrack_pp))
运行时,我认为库只是将media
中的MediaTrack实例复制到mediaTrack_pp
指向
的实际内存位置
然后我们可以使用 ctypes.cast()
方法获取 Python 中的实际对象。该算法应适用于所有使用 LP_xxx
数据类型的 Python 代码,甚至适用于其他库。
解决了这个问题后,剩下的就是处理 API 文档。
VLC MediaTrack class documentation
我正在尝试使用 python-vlc 获取音频文件每个样本的比特率、采样率实际比特数。
我看到我们可以使用 libvlc_media_tracks_get()
到
但是即使这个方法可以获取所有3个信息,我仍然无法使该方法起作用。它需要 2 个参数 p_md
和 tracks
。我不明白什么是tracks
。它说它需要一个 LP_LP_MediaTrack
的实例,但我无法以某种方式找到它的含义。
比特率:
# This allocates a double pointer and a MediaTrack object in RAM, then points to
# it, but no value is assigned to this double pointer or the MediaTrack object.
mediaTrack_pp = ctypes.POINTER(vlc.MediaTrack)()
# Assigns the MediaTrack in the double pointer to the values stored in `media`,
# returning the amount of media tracks as `n`
n = vlc.libvlc_media_tracks_get(media, ctypes.byref(mediaTrack_pp))
# Converts the double pointer to `POINTER` class that Python understands. We can
# then get the value the pointer is pointing at.
info = ctypes.cast(mediaTrack_pp, ctypes.POINTER(ctypes.POINTER(vlc.MediaTrack) * n))
# This gets the actual value of the double pointer i.e. value of MediaTrack
media_tracks = info.contents[0].contents
采样率(附加上述代码):
# According to the API doc, MediaTrack class has an `u` field which has an
# `audio` field, containing the audio track.
audio = ctypes.cast(media_tracks.u.audio, ctypes.POINTER(vlc.AudioTrack))
# The AudioTrack class has a `rate` field, which is the sample rate.
sample = audio.contents.rate
我无法获取码率的主要原因是因为我不了解如何获取数据类型LP_LP_MediaTrack
。这是 MediaTrack 实例的双指针。
当vlc.libvlc_media_tracks_get(media, ctypes.byref(mediaTrack_pp))
运行时,我认为库只是将media
中的MediaTrack实例复制到mediaTrack_pp
指向
然后我们可以使用 ctypes.cast()
方法获取 Python 中的实际对象。该算法应适用于所有使用 LP_xxx
数据类型的 Python 代码,甚至适用于其他库。
解决了这个问题后,剩下的就是处理 API 文档。
VLC MediaTrack class documentation