zambast
82
然而YouTube自动生成的字幕准确度远不如Whisper生成的。srt-sync比较适合那些up主自己上传的字幕但是断句乱七八糟的(多半是在YouTube字幕的基础上做了些校对)
Vim
83
给 SubtitleEdit 提了一个issue,如果能够实现,那一切就完美理顺了。
当然使用其他工具,如python, lua 之类应该也能很容易实现,希望有编程经验的高人能够填平这个最后一公里的痛点。之所以在 SubtitleEdit 提交issue,仅仅是因为SubtitleEdit已经有很多同步字幕时间戳的功能,但独缺这一份,集成到一块就更方便了。但若有python或lua的实现,那么自定义就更加方便了。
PS:这个issue里边,我放了一个自己编写的 WhisperTranscribe.py,大家拿来即可使用,相对原汁原味的Whisper,增加了两个特性:
- 实现对srt输出的参数控制,从而可以实现逐字srt
- max_line_width,max_line_count,max_words_per_line
- 实现对srt断行控制的自由切换:人工还是自动
1 Like
zambast
84
我觉得要做这事你不如对WhisperX来做,WhisperX也能输出word级别的时间轴。区别在于Whisper的时间轴不准,所以其word级别的也不准。而且这个事情靠Whisper本身可能无法解决,因为我最近发现大量的官方字幕的时间轴就是这么不准,而众所周知Whisper的训练材料大量来自官方字幕。
同样地,Whisper字幕中经常会发生的缺少句号、句首没有大写的原因就在于Whisper的训练材料里很多来自YouTube字幕(多半是up主主动上传的),而这些字幕多半是up主在YouTube自动识别的字幕基础上修订的,但是修订过程中不少up主没有做得那么细致。同样地,还有很多字幕的断句有问题(句号在一行字幕中间)。所以基本上Whisper的各种问题大多来自质量上有欠缺的训练材料,以至于这些问题根深蒂固,可能根本无法解决。
Vim
85
WhisperX 项目好像已经死了。
而Whisper本身肯定会持续更新。很多Whisper周边跟进比较慢,自定义适配Whisper可以体验最新的功能不用等待。
Vim
86
我提交的issue,就是希望能解决这个断句问题——在Whisper基础上,人工自由断句,然后同步获得准确时间戳。
zambast
87
试了试audiobook最佳的方式可能还是让chatgpt来校正。试了试100行左右的字幕,非常完美,所有的拼写错误、大小写、标点全都替换成正确的文本了。
具体做法是
- 先用whisperx生成字幕;
- 切割字幕成50-100行,同时切割audiobook的文本,需要匹配上,但不用太严格,可以有一定余裕。
- 将切割后的文本逐个交给chatgpt处理,返回结果。
- 合并校正后的字幕。
需要写个脚本来做这事
srt-sync虽然也还不错,但是偶尔还是会出错,主要是标点(特别是引号)会导致错乱,毕竟没有AI
由于Whisperx处理audiobook这种一直在说话的材料,其时间轴非常完美,所以用这种方式制作的audiobook的字幕可以说非常完美了。
zambast
88
死不死无所谓了,因为Whisper本身不太可能解决这些问题,理由上面说了。Whisper最近的几次更新都是力求进一步提高字幕准确率,对于时间轴、hallucination等都没啥改进,而实际上用户对其的准确率已经相当满意,不满的都是它认为不重要的那些方面,而由于训练材料的缺陷,导致这些问题很可能根本解决不了。
Vim
89
自行通过python解决了。
可实现 人工任意断句 + 程序自动同步精准时间戳 ,从此告别字幕苦力工,仅需专注内容,省时省力。至于增强版(增强文字兼容性、配合mpv更加便捷使用等),大家可以自由发挥。
开源,自取:GitHub - VimWei/WhisperTranscriber: Whisper Python Script
Vim
90
再增加一个lua版本,与mpv无缝集成,不用python等环境,不用命令行,只要一个快捷键即可:
开源自取,其中的srt-resegment:GitHub - VimWei/mpv-config: Personal mpv config
gtxxeon
91
1 Like
Vim
92
很好,很强大!这就是理想中应该有的,理念非常好,效果也不错。
就是他这里的很多环节是需要money支持的。而我实现的,是完全免费的方案。
此外,根据我的实践,whisper及所有语音识别,目前其准确度并非完美,特别是长视频(whisper胡言乱语还是挺常见的),以及科技类的视频(很多话语中间杂着很多代码之类、说话断断续续,有时即使程序已经完美识别语言,但若纯粹只看文本,很可能还是一头雾水完全不能理解,因为需要对照视频内容,才知道在说什么,难以按日常语言来理顺)。此时,如果我们的要求比较高,程序就得支持人工参与编辑修改,而对于人工+AI的交叉参与,程序要想完美实现让普通用户无障碍使用还是挺有难度的。我是取巧一点,毕竟自己写的程序,在其中设置一些类似匹配容忍度的参数,这样遇到简单的修订就可以调试适应新的情况。
zambast
93
试了试这个项目whisper-timestamped,时间轴准确性与Whisperx差不多。
优点是在Whisper的字幕基础上逐词推算校准时间轴,不像Whisperx那样另外用wav2vec来校准,于是不会合并句子,会保持Whisper本身的断句(Whisperx有个问题Whisper偶尔会有一些句子没有首字母大写和句号,而whisperx是按句号合并的,碰到这种情况就会合并成一大坨)
另外也不会出现某些句子偏移到姥姥家或者干脆消失。whisperx比较准的句子就起始和结束都非常准,whisper-timestamped的起始经常会有前移偏差,各有优劣吧。
缺点是不支持fast whisper,速度比whisperx慢70倍吧,而且hallucination的问题也不像whisperx那样消除得比较好,建议用large v2,我试了试large v3的hallucination比v2严重得多
sff34
94
剪映今年收费了,现在只能找旧版本凑活用。
剪映对齐我用起来有时也不准,你用起来要是真完美的话可以写脚本跟踪剪映窗体控件自动切割输入导出合并字幕,不需要手动。
Whisperx必须用NV的显卡吗?我看介绍需要安装CUDA,不想试了。
zambast
95
剪映的对齐应该是目前效果最好的,其他的都明显不如,剪映的对齐即便不完美,起码可用,其他那些都会出现大片大片的严重偏离,基本不可用。但是剪映的界面实在是不方便操作,脚本跟踪控件估计也不是那么容易写,而且要想切割出5000字符的文本和对应的音频其实也相当麻烦。总体而言此类无法脚本化的商业软件我觉得还是趁早抛弃。
我后来又比较了一下Whisperx和whisper-timestamped,试了好几种设置,感觉影视剧还是Whisperx的效果更好,另外就是事先进行人声分离有时候会提高准确度,有时候又会降低(因为Whisper的训练材料里大量的影视剧并没有经过人声分离),但总体而言是正收益。总的来说目前Whisperx仍然是最优解,但可以另外用whisper-timestamped跑一个备用,在whisperx拉跨的时候切换过去,反正mpv快捷键切换字幕也方便。
Whisperx好像是只支持nv,不过目前只要想跑AI的都会搞块N卡,所以也不算什么了。
另外如果只是audiobook之类一直有人说话的内容,无论是Whisperx还是whisper-timestamped,时间轴都已经非常准确。如果手头有准确文本(比如epub)可以用srt-sync进行文本校正,或者写脚本用chatgpt进行文本校正(后者更完美)都可以做到非常准确,已经没剪映什么事了。
zambast
96
又做了几次比对测试,发现人声分离对Whisperx的提升还是挺明显的。其实我早先也做过这种测试,不过用的是Whisper,当时感觉有些地方更准确,有些地方变得更不准,于是就弃用了。这次发现不论是识别文本的准确性还是时间轴都有明显提升,原因我猜是两方面的,一方面是vad算法的不完美,所以人声分离后提高了vad的准确性;另一方面是人声分离提高了wav2vec的准确性。所以尽管对于Whisper本身来说人声分离有利有弊,但是由于vad和wav2vec的正收益,所以最终结果就有明显提升。
zambast
97
我也找到一个自动断句的
原脚本有点小问题,我稍微修了修
spacyx.py (14.3 KB)
试了试效果还行,虽然有时候切分得不算太完美,但大多数时候还行。
上面这个帖子也说了基本流程是
转写 → WhisperX
对齐 → WhisperX(wav2vec2)
断句 → Spacy
我在转写之前又加了个人声分离,推荐用UVR5的MDX-Net方法下的Kim Vocal 2模型,可以大幅提高Whisperx的时间轴准确性。
其实我本身对断句没啥要求,一行显示长句也无所谓,但是Whisper有个问题是偶尔会有一些句子没有首字母大写和句号,而whisperx是按句号合并的,碰到这种情况就会合并成一大坨简直没法看,用Spacy断句后再用Subtitle Edit修复一下错误,连首字母大写和句号都能修复。
我感觉这一套之后字幕文本准确率有98%以上,时间轴有95%以上,基本满足要求了。
1 Like
zambast
98
嚓,我又找到了一个非常牛逼的audiobook的对齐项目
严格地说这是一大堆TTS、STT类工具的集合(包括Whisper等),对齐只是其中一个功能,这里只说对齐。
我找了一本7小时的audiobook,基本上都没错,而且占用内存也不高,也不用GPU,速度大概在30~60x。
不过影视剧就不太行,估计还是中间的无人声部分处理得不好。
1 Like
Vim
99
目前有什么措施可以改善这种情形?好几次遇到这种情形,whisper要么就一直重复前面的某些词汇,要么就中断了。
zambast
100
目前就是whisperx做得最好,它的原理是vad分辨切掉无人声部分后合并成30s一段然后跑fast-whisper,以牺牲整体质量(相当于减少了上下文)为代价来消除hallucination。其他一些项目大多没做这一步,所以hallucination就是比whisperx严重。就word级校准来说whisperx和whisper timestamped各有千秋,甚至后者还更好些,但是后者的hallucination就更重。其他一些项目也大多在vad上做文章,但是vad这块目前也没有特别完美的,各种算法都有缺憾,而且哪怕vad完全切掉了无人声部分,Whisper还是会出现hallucination的,只有减少块大小(一般认为30s以内概率较低)才能尽可能避免。还有就是模型的选择,有很多人报告large-v3的hallucination远比large-v2大,所以如果你如果不用whisperx而用其他的whisper项目的话,记得用v2,whisperx倒是没啥区别。
另外就是我上面提到的,事先进行人声分离,人声分离本身有利有弊,有可能导致Whisper的识别率下降,但是能提高vad的准确率。
还有个土方法就是多跑几个备用,如果是做字幕的话合并几个基本上能凑出一个差不多完美的字幕来,自己随便用用的话就快捷键切换。
1 Like
zambast
101
echogarden这个准确的word级对齐太好用了,让chatgpt帮忙写了个脚本生成逐词显示的ass
具体使用就是echogarden生成json,然后json2ass。
echogarden align audiobook.m4b epub.txt result.json
python json2ass.py result.json audiobook.ass
json2ass.py (3.3 KB)
还可以设定读过的,没读过的,当前的三种颜色,太好玩了。。
2 Likes