先说清楚:这篇文章不聊版权。它只是记录一个很具体的个人需求,以及怎么用一堆顺手的工具把它解决掉。至于”这算不算越线”,那是另一个话题,今天不碰。
我平时听歌,Apple Music 和 QQ 音乐两个会员来回切,基本够用。直到给自己买了副游泳用的骨传导耳机——下水才发现问题:这玩意儿只认 MP3。流媒体里那些受保护的格式它一概不认,连插进电脑导都导不进去。
我想带着歌下水。需求就这么简单。
我本来还想偷个懒。我手上是一块 eSIM 版的 Apple Watch,平时在户外连蓝牙耳机听歌一点问题没有——那下水也照这个逻辑来不就行了?结果进了泳池才发现自己想简单了:手表一沾水(手腕整个浸在水里),蓝牙连耳机就直接断,浮出水面才重新连上。不是手表坏了,是蓝牙在水里压根不工作。
我专门去翻了下技术资料,才搞明白这不是哪个厂家的 bug,是物理规律。蓝牙走的是 2.4 GHz 这一频段的无线电波——和微波炉、Wi-Fi 是同一段频率。水是极性分子,2.4 GHz 的电场扫过来,会逼着水分子跟着高频转动,把电磁能直接转成了热能,这正是微波炉加热食物的原理。代价就是:水在几厘米之内把蓝牙信号吸收得干干净净。有资料给出的”半功率距离”(信号衰减掉一半的长度)在纯水里大约只有 1 厘米,几英寸之外基本就归零了;再加上空气和水的交界面还会把大部分信号反射回去。换句话说,蓝牙在空气里能稳稳传十米,一进水里只剩几厘米——对泡在水下的设备来说,约等于”没有传播能力”。这不是换个好天线或升个固件能救的,是水的介电特性钉死的。
所以结论反而很干脆:想在水下听歌,歌必须”带在身上”——也就是存在耳机本地的 MP3 里。这反倒把我那条流水线的必要性说透了:流媒体再方便,到了水里也得先变成本地文件。
于是这件事变成了一个小项目:把我确实想听、也确实有途径接触到的那些音乐,整理成干净的 MP3,塞进耳机里,游我的泳。没有宏大的理由,就是”设备兼容性”四个字。
整个流程拆成三步,每一步都不复杂,串起来却意外地顺:
第一步,把散落的音频汇总下来。 有些独立音乐人会在公众号里贴试听,有的文章嵌着播放器,有的干脆是一段微信原生的音频。原生音频最好办,地址就藏在页面里,一行命令就能拽下来;嵌在第三方播放器里的麻烦一点,得让无头浏览器先把页面渲染出来,读到组件里的歌名、歌手和专辑信息,再去音乐平台把可播放的直链换出来。这一步里相当一部分是会员专享或平台授权墙,换不到——那就换下一首,不强求。
第二步,统一转成 MP3。 不管原先是 m4a 还是别的什么,一把 ffmpeg 全撸成 320k 的 MP3。命令行一行的事,批处理一下,几十个文件眨眼完事。以后要是碰到 ogg 之类的格式,同一套命令接着用。
第三步,遇到大合集再切歌。 有一回我攒到一个八个多小时的合集,显然不能整段塞进播放列表。ffmpeg 有个静音检测,能找出曲与曲之间那几秒安静的空隙;在空隙正中切一刀,再流式拷贝,不重新编码、不掉质量,一首首就分好了。八小时切出一百来首,总时长一分不差。
工具都在我自己机器上跑,音频也只进我自己的耳机。它解决的不是”免费听歌”——会员我本来就开着——而是”我想听的歌,得能以我的设备认得的样子,躺在我游泳时的耳朵里”。
写这些不是为了教谁怎么弄,只是觉得这种”有个小麻烦,就用顺手的工具把它磨平”的过程本身挺舒服。骨传导耳机在水下传来第一句人声的时候,那个需求就算闭环了。