最近做一個項目,前端由於兼容性問題,無法獲取正在播放的音頻時長,所以只好由後端返回音頻時順便把音頻長度一起返回給前端。
使用的是 eyeD3,python2.7。
首先安裝eyeD3
pip install eyeD3==0.8.10
然後
import os
import eyed3
def get_voice_time_secs(file_data, file_name):
"""
獲取音頻文件時長
:param file_data 文件的二進制流
:param file_name 文件名
"""
# 先把文件保存在本地,我試過很多包,都需要先把文件保存在本地後才能獲取音頻長度,初步猜測是因爲這些包的代碼讀取的是文件本地的信息
with open(file_name, 'w+') as f:
f.write(file_data)
# 加載本地文件
voice_file = eyed3.load(file_name)
# 獲取音頻時長
secs = int(voice_file.info.time_secs)
# 刪除本地文件
os.remove(file_name)
return secs
eyed3裏還有很多其他信息
沒有仔細去研究,有興趣可以看官方文檔https://eyed3.readthedocs.io/en/latest/