Python 音频去广告+字幕提取
积压稿件 +1
生存提示:不鼓励使用盗版资源,因此也不提供盗版资源,仅供学习交流。
之前下了一些音频课,但是存在一些音频中间插入广告,更万恶的是,它根本不分是不是整句,只要时间差不多了就插入。
要去掉广告我们分为以下步骤依次执行:
- 分析规律(就是前面找规律)
- 广告提取
- 识别广告
- 重新拼接
对于字幕提取,之前其实我们在 AI 相关的文章中也介绍过对应模型,直接转换并处理就可以了,后面再介绍。
随手记录自己的学习过程
积压稿件 +1
生存提示:不鼓励使用盗版资源,因此也不提供盗版资源,仅供学习交流。
之前下了一些音频课,但是存在一些音频中间插入广告,更万恶的是,它根本不分是不是整句,只要时间差不多了就插入。
要去掉广告我们分为以下步骤依次执行:
对于字幕提取,之前其实我们在 AI 相关的文章中也介绍过对应模型,直接转换并处理就可以了,后面再介绍。
大概来介绍一下 Django Allauth 改造的期间遇到的一些问题和改造方法,在此之前我只想说——Django Allauth 是屑。
入职之初我就接到了一些第三方登录的任务,然而 Django Allauth 将内部封装的太好,暴露的 API 不足,更新又慢,issue 和 PR 很少有人处理,当你需要扩展时,很多情况下你只能用一些 hack 的手段去解决问题,非常蛋疼,所以当时就决定慢慢的切到自己的一套 Auth 体系中。
目前白嫖 HTTPS 的主流途径依旧是 LetsEncrpyt,certbot 似乎是官方主要推荐的一个申请方式,关于用途和用法,这里不多介绍,总之,是一个品种齐全,种类多样的 cli 工具:https://certbot.eff.org/
这里由于我的 NAS 希望签 HTTPS,但是电信开外网是不允许开 80 和 443 端口的,所以无法用 HTTP 协议去校验,只能选择 DNS,如果没有 DNS 插件,那么只能用 Manual 的方式,非常麻烦。
于是,我开始了面向源代码编程——
关于HTTP,从啃完图解HTTP之后,觉得信息量还是有一些的,自然不可能完全都记得清楚,只能记得大概,而自己实现一个似乎能够更好地理解。
本文使用Python,因为原文就是用的Python,也挺好理解的:http://www.codeceo.com/article/make-web-server-1.html
最后,我们来说说加密传输,在传输中,如果我们中间被截获,那么消息将非常不靠谱,同时,伪造传输也将变得容易,而加密之后,安全性就能极大的提高了。
简单的加密,就选择对称加密。
接下来我们开始说说TCP的问题,众所周知的,三次握手和四次挥手是核心指导方向,但对我们而言,更重要的是,我们应该知道,TCP,或者说socket有些什么问题:
粘包和拆包问题。
这是比较主要的一个问题,当然,如果我们使用了WebSocket,那么基本不需要考虑这个问题。
接下来,我们不可避免的会遇到线程同步问题,这是因为我们涉及到了共享数据的问题(也就是一个数组)。
我们来看看Python的锁:
1threadLock = threading.Lock()
2
在同步的地方,用:
接下来我们差不多能聊起来了,剩下的就是解决上一篇中我们遗留的登出移除问题以及做一个界面,那样我们就能给更多的人用啦。
选择Tkinter,主要是,作为一个没有其他语言GUI基础的人,入门最简单粗暴的方法可能就是这个了。
关于Tkinter,网上的资源其实说不上太多,还是比较难找的,尤其是对于一个写惯了HTML/CSS的,其实是挺痛苦的。
Tkinter的布局教程可以看这里:http://effbot.org/tkinterbook/grid.htm
完成了上一个版本,我们会发现,根本聊不起来啊!
问题的关键在于,我们现在的程序,一次只能干一个事情,你让我等待输入了,我就不能好好输出了。
所以我们需要在此引入多线程的概念,多线程的概念,简单的来说,就是,我因为只有一个人,你让我去干一件事还可以,两件事我不行,那多加一个人,总可以干了。
那么阻塞呢,意思就是说:由于我干了这个,不能干那个,我们把这个现象叫做阻塞。
概念都理解了之后,我们知道了,只要多加一个线程就行了!
实现多线程有几种方法,具体来说,我们可以看一下这篇: http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html
接下来我们首先略过了Python的基础,这一部分,随便找一本Python的书看看就行了,习惯了没有
;
的人生之后,在必须的语句里记得加:
,基本上你就进入了Python模式。
当然,由于赶时间,这里很多可能不是最优写法,大家可以去GitHub提出=v=。
官网Demo有云:
1# Echo server program
2import socket
3
4HOST = '' # Symbolic name meaning all available interfaces
5PORT = 50007 # Arbitrary non-privileged port
6s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
7s.bind((HOST, PORT))
8s.listen(1)
9conn, addr = s.accept()
10print 'Connected by', addr
11while 1:
12 data = conn.recv(1024)
13 if not data: break
14 conn.sendall(data)
15conn.close()
16