今天接到一個需求:獲取合成音頻的時長,提供給前端使用,便於實現音頻播放進度的功能。
心想,在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,每天至少一篇技術文章,適合技術點滴積累,利用瑣碎時間學習技術的人。