用一张导出表筛歌单,我把 600 首缩到 47 首

我的音乐库攒了六年,600 多首自己写的动机和半成品,散在三个硬盘、两个播放器里。每次想挑歌做一张自选集,打开文件夹翻十分钟就放弃了。上个月我换了个笨办法:先把「挑歌」变成一个能排序的问题。

做法不复杂。用 foobar2000 把整个库的属性导成 CSV,只留我真正会用来判断的几列:时长、BPM、调性、首次播放次数、最后播放时间。BPM 和调性之前已经写进标签了,导出时直接跟着走。导完在表格里加一列「粗筛分」,公式很土:

=IF(时长<60,0,1) + IF(首次播放>5,1,0) + IF(最后播放<TODAY()-180,1,0)

意思分别是:短于一分钟的多半是随手录的碎片、先踢掉;播过五次以上的说明我自己反复听过、留;半年没碰过的说明当时就没做下去、先降权。三个条件叠加,600 首剩 120 首左右。

然后人工过这 120 首,一首只听前 20 秒,能让我想接着听下去的留下,最后是 47 首。这 47 首再按调性排序,同调的放一块,做播放列表时转场会顺很多。

为什么值得这么干:挑歌的难点不是「没有好歌」,是「没法在几百首里建立可比较的坐标」。时长、播放次数、最后播放时间都是脏数据,但它们便宜、稳定、不需要我重新听一遍。用它们做粗筛,代价是必然会误杀——有些好动机就是被我听过两次然后忘了,粗筛分算 0 分。所以要留一档人工复核,机器只负责把 600 缩到 120。

失效的地方我也踩到了。播放次数在换播放器之后会清零,我有一半曲目的这个字段是 0,粗筛直接失效,那批只能纯靠人工听。BPM 标签里有十几首是当年随手填的 120,实际根本不是,按 BPM 排序时这几首会扎堆冒出来。时长那一条对纯环境铺底也不公平,我自己就有两首 40 多秒的铺底,被我误踢过一次,后来加回来了。

还有一个反例:最后播放时间其实测的是「我最近翻没翻这个文件夹」,不是「这首好不好」。有段时间我集中整理某个子目录,那里面的歌全被刷成近期播放,权重虚高。

所以这套东西我只用来做「第一轮减法」,不用来做判断。真正决定留哪首的,还是那 20 秒里有没有让我想接着往下听的东西。

你们挑自选集的时候,是直接靠听,还是也会先用某个字段把范围砍一刀?如果是后者,用的是哪一列?

0
赞同度 100% · 0 条评论 · 2 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。