今天接到一个需求:获取合成音频的时长,提供给前端使用,便于实现音频播放进度的功能。
心想,在python看来,这都不是事,python的第三方库那么丰富,肯定有python库可以实现这个需求的啦,于是上网一搜,真的有很多。但是,往往编程这一行,不是掉坑里,就是在掉坑的路上。
最后选择了libroso库,使用到的接口很简单
import librosa
time = librosa.get_duration(filename='get_duration_test.mp3')
print(time)
运行显示NoBackendError的错误,网上搜索都是说程序没有找到ffmpeg路径的问题,在shell运行
which ffmpeg
找到ffmpeg位置在/usr/bin/ffmpeg,于是进入librosa源码,将:
COMMANDS = ('ffmpeg', 'avconv')
改为:
COMMANDS = ('/usr/bin/ffmpeg', 'avconv')
然而还是报同样的错误。
其实,librosa就有调用ffmpeg的原理在里面,报NoBackendError的错误,无非就是调用ffmpeg时出错了,直接在终端输入ffmpeg,显示
version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16)
原因就是没有找到zlib_1.2.9
继续捣鼓查资料,stackoverflow上找到了下载zlib_1.2.9的方法
# 下载
wget https://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.9/zlib-1.2.9.tar.gz
# 解压
sudo tar -xvf zlib-1.2.9.tar.gz
cd zlib-1.2.9
sudo -s
# 编译
./configure; make; make install
cd /lib/x86_64-linux-gnu
# 创建软链接
ln -s -f /usr/local/lib/libz.so.1.2.9/lib libz.so.1
rm -rf zlib-1.2.9
再次运行脚本,成功。
对liunx系统理解不够透彻,也是慢慢摸索捣鼓,以此记录一下bug。
关注公众号:日常bug,每天至少一篇技术文章,适合技术点滴积累,利用琐碎时间学习技术的人。