分析广播广告分布
一个人的好奇心能把项目带到哪里?我开着一辆20年前的老车,没AUX没蓝牙,只能听模拟广播。在悉尼开车时我发现个奇怪的现象:很多时候我切台,发现所有频道都在播广告,甚至有些广告内容还一模一样。这种“同步感”让我觉得这背后肯定有某种排期规律。
实测发现的有趣数据:
下一篇
LLM Gateway部署踩坑:解决多模型调用超时与Token溢出 →
为了验证这个直觉,我搞了一套同步采样方案,虽然没什么商业价值,但用传统数据分析结合AI工具跑一遍流程确实挺爽的。
方案实现与技术链路
核心难点在于如何保证“同步”。如果顺序录制,时间差会导致无法分析不同电台的广告相关性。
一、同步抓取音频
我找到了悉尼11个主要电台(包括AM和FM)的在线流媒体地址,然后写了一个多线程脚本,利用 ffmpeg 同时对这11个流进行截取。每次截取18秒,采样率强制下采样到16kHz单声道,以减少后续处理的内存压力。
具体的 ffmpeg 截取逻辑大致如下:
ffmpeg -i "http://stream-url-here" -t 18 -ar 16000 -ac 1 output.wav通过 Python 的 ThreadPoolExecutor 同时启动11个这样的进程,确保每个片段的时间戳是完全一致的。二、语音转文字 (STT)
录完音频后,我没有用云端 API,而是直接在本地跑了一个从 Hugging Face 下载的 Whisper 模型(大约500MB那个版本)。每个18秒的片段被转成文本片段。
三、内容分类
拿到文本后,我用 GPT-4o-mini 做了一个简单的分类器。因为这种任务对推理能力要求极低,mini 版本的成本几乎可以忽略不计。提示词很简单,要求它将文本归类为:Ad (广告), Song (歌曲), 或 Talking (谈话)。
踩坑细节与实测观察
在实操过程中,有几个点需要注意:
- 采样时长陷阱:最初我尝试录制10秒,但发现很多广播广告的衔接点在10-15秒之间,导致分类结果出现大量模糊地带。后来增加到18秒,分类准确率明显提升。
- Whisper 的幻听问题:在录到纯音乐片段时,Whisper 有时会随机生成一些莫名其妙的短句(比如 "Thank you for watching"),这会导致 GPT-4o-mini 误判为 Talking。解决方法是在提示词中加入对“无意义短语”的过滤逻辑。
实测发现的有趣数据:
- 广告同步率:果然验证了我的猜想,部分商业电台的广告时间点高度重合,这说明广告投放有某种统一的排期机制。
- 时间分布:每小时的整点前后,广告的出现频率明显高于每小时的中间时段。
总结工具链
这次实操的完整工作流:Online Streams → ffmpeg (Parallel Recording) → Local Whisper (STT) → GPT-4o-mini (Classification) → Data Analysis
这种“传统采样+AI分类”的组合比纯靠人工标注快了不止一个量级。如果你也想分析某种周期性音频信号,这套 ffmpeg + Whisper 的组合非常稳。