Python 有什么 [音频比较] 的轮子推荐嘛?

2020-01-16 20:36:49 +08:00
 JCZ2MkKb5S8ZX9pq

需求

5123 次点击
所在节点    Python
27 条回复
imn1
2020-01-16 20:40:17 +08:00
两年前搜过,需求和你差不多——自动提取音量提别大一段
没有什么好的结果,两年后今天不知如何
JCZ2MkKb5S8ZX9pq
2020-01-16 20:49:10 +08:00
@imn1 我倒也不是要音量大,音量大的话,Adobe Premiere 或者 audition 都能搞到平均音量,可以批处理。
我主要是嫌贴片烦,同样的内容听几十次实在是太折磨了,要么就要每次都手动跳过。

截取视频之前搞过,ffmpeg 很简单。但音频没弄过,稍微搜了一下也没看到特别符合的。
我考虑是采集频谱特征,比如分 16 阶转成 16 进制,然后把开头 10 秒和最后 20%做一下比对,有符合的就掐头去尾。
但音频又涉及时间,简单比较可能会有误差,所以想看看有没有什么现成的算法。
also24
2020-01-16 20:53:43 +08:00
1462326016
2020-01-16 20:55:31 +08:00
如果是同样的广告的话尝试下 ffmpeg 将一段时间内的视频分割成图片,然后对比图片,是不是能好一点?仅仅是提供个思路,未实验
JCZ2MkKb5S8ZX9pq
2020-01-16 20:59:35 +08:00
@1462326016 思路可以,但不完全行。
因为部分油管下载我都是按最低质量下的,下载到的文件音视频分离,而我基本只听不看,就只保留了音频。。。。。。
JCZ2MkKb5S8ZX9pq
2020-01-16 21:05:51 +08:00
@also24 这个也没解决吧
我现在在看另一个做声音指纹的库

提取声音,对某一个时刻编码比较,这都不难。
我现在有问题的点是时间。
比如 0.5 秒一采集,但广告出现的时间是不对齐的,所以很可能比对失误。
@1462326016
这个情况在比对纯图片的时候,也有可能出现。
如果是片头,而且剪的编辑负责,每次都对得很齐,那还好处理。片尾贴片的话很可能对不齐啊。
JCZ2MkKb5S8ZX9pq
2020-01-16 21:09:14 +08:00
@1462326016 粗暴点的解决方案,是把切片密度做得足够细,假设每秒 30 帧每帧都切,反正都是在本地跑,牺牲点内存换精确。
qwjhb
2020-01-16 23:08:58 +08:00
语音转文字确认时间点可行吗
JCZ2MkKb5S8ZX9pq
2020-01-16 23:18:57 +08:00
@qwjhb
一来是片段采集的问题,就是源视频如果分段全部 stt,那量有点太大。
另外也有 stt 不准确的问题和背景音的干扰。

然后有些片头贴片,就是一段很吵的音效,并没有语音。
billlee
2020-01-16 23:21:35 +08:00
应该可以用匹配滤波器
JCZ2MkKb5S8ZX9pq
2020-01-16 23:28:23 +08:00
感觉这个东西有点类似在一个画面上,找出目标图形,那个倒还算简单,有很多现成方案。
但因为音频文件涉及时间,同时我对音频文件格式也完全不熟悉,没有什么思路,也搞不清它内部怎么转换的。
还是需要这个领域的专家来提提建议。

我觉得可以把题目转换为
==========================
如何在一段音频中,锁定目标音频的起点。
==========================
类似于 string.indexOf 的一个方法
JCZ2MkKb5S8ZX9pq
2020-01-16 23:29:23 +08:00
@billlee 看 append,我试了一下,但是失败了。
不熟悉音频格式,排查起来有点艰难。
JCZ2MkKb5S8ZX9pq
2020-01-16 23:34:29 +08:00
@billlee 其实中途的思路,就是把频谱打出来,然后以图找图,在源视频里找到广告的部分。
但因为直接拿到数组就用数组配了,然后没成。
不知道都转成图,然后用图找图的方式会不会好点。

但这个同样一段贴片广告,涉及到后期人员的操作,音量音调变速压缩率,以及视频平台各个时期的压缩设置,和种种不确定因素。感觉不会那么顺利。
billlee
2020-01-17 00:02:17 +08:00
@JCZ2MkKb5S8ZX9pq #13 这样转频谱损失的信息太多了吧,如果音频只是经过剪辑,没有变调变速,在时域上直接用匹配滤波器应该是效果很好的。

dsp.stackexchange.com/questions/24548/detecting-a-specific-pop-in-a-real-time-audio-signal
JCZ2MkKb5S8ZX9pq
2020-01-17 00:09:17 +08:00
@billlee 问题不转码,我不知道怎么把声音放到统一的时域下,这就回到了那个声音文件的记录方式的问题上了,我不知道怎么去匹配那个时间。
breaker911
2020-01-17 00:09:43 +08:00
不如使用开源播放器 然后加入类似于网络剧一样的跳过片头功能 特征大概就找找音量大小和中间间隔或者特征帧匹配?
TimePPT
2020-01-17 00:35:10 +08:00
你需要的是分时的音频指纹
lishunan246
2020-01-17 01:47:08 +08:00
可以试试把两段音频当作一维信号处理,在傅立叶频域上计算互相关。
根据互相关最大值判断是否存在广告,根据最大值位置判断时间点。
dizun
2020-01-17 12:20:50 +08:00
没做过类似的,有个不成熟的思路 。
假设视频架构 ( 广告-》正片)。
广告和正片之间应该有一个通用且明显的部分,例如正片的标题。
将视频转换成二进制,直接模糊搜索正片的标题,截取标题到结尾。

不知道可行吗?
JCZ2MkKb5S8ZX9pq
2020-01-17 12:44:25 +08:00
@dizun 由于 MP4/AAC 压缩问题,估计不可行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/638549

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX