小宇宙音频导出

小宇宙是一个早期自称为泛用型的播客客户端,后来慢慢转向专有内容+社交了,不提什么泛用型了,我个人不甚喜爱,但是我喜欢的主播在上面开了一档付费节目,而作为下载党我自然是要把音频导出然后肆意收听,被平台绑架我是不能接受的。

小宇宙会自动缓存播放列表里的所有音频,缓存在/sdcard/Android/data下的私有目录里,我有root所以没什么阻碍,似乎也有无root绕过的方法,我就不太清楚了。

缓存在私有目录/files/player_cache下:

.
├── 0
│   ├── 4.52428800.1651323113597.v3.exo
│   ├── 6.62914560.1651324203330.v3.exo
│   └── 6.68157440.1651324203500.v3.exo
├── 1
│   ├── 4.31457280.1651323112748.v3.exo
│   ├── 4.5242880.1651323111553.v3.exo
│   ├── 6.20971520.1651324201548.v3.exo
│   └── 6.78643200.1651324203965.v3.exo
......

里面的文件名都是这样的,随便打开看了一个文件没看出什么名堂,还以为是加密过的专有格式,正准备换一种策略的时候又随手打开一个文件,发现文件头里有m4a字样,然后作为m4a打开是能播放的,但是播放1-2分钟就断了,所以应该是把文件分割了,全部合并应该就行了。

于是使用inotifywait监听目录下的文件创建事件:

inotifywait -mr --include ".+\.exo" --format %w%f -e CREATE  -o list.txt .

按时间顺序把新建的文件路径保存下来,然后再用脚本合并:

echo "合并中"

while read p; do
  cat "$p" >> out.m4a
  echo "$p >> out.m4a" 
done <list.txt

rm list.txt
echo "已保存到out.m4a"

美中不足之处是每次下载都要手动监听,然后手动合并,比较繁琐,如果能找到文件命名规律就好了,但是现在也是暂时够用了,小宇宙可以扔到冰箱里了。