$ G# t; r3 r: J) Gmodel_size = "small" # w9 [& J: l% Y K7 W! s ( B+ [, O3 Y; s, fmodel = WhisperModel(model_size, device="cuda", compute_type="int8") 3 g a. n8 H* y" W6 \! W( H2 Z3 x( J0 h% k' ]8 R6 P7 Z3 j
segments, info = model.transcribe(0 a T' Y; S. s3 i) |& U% y9 S
sourceFileName, 3 |* [/ Y. L" C6 G/ {& L
beam_size=5, 9 d* v! R3 o" |7 X
language="en", - O2 K. Y3 C6 L# l# ]7 w
task="transcribe", . s+ G! n/ k7 c6 H
word_timestamps=True, & a/ w$ Q I3 I( K! m# D1 `# y2 ] initial_prompt = "Hello, welcome to my lecture.") ! u" P: s8 B) w7 q1 ]3 K" P6 s A' z+ w* V ^# B* \5 o; ?, j' i' _- ^6 T
for segment in segments: * N: D- J9 C* L. E# F% ? print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))+ [! Y' `6 f: ~" Q
6 C9 E, f2 @2 y X* ]# a) V2 B for word in segment.words: 8 D/ k6 v( y/ b) n: V0 F( I , B0 H4 _2 v- n, }----------------------------------------9 v- D/ T( V7 i& w
! F! [: y. V& ]# J+ F. F' P代码说明: 6 Y8 T1 `6 s d' r6 n$ e1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。7 d+ O- _5 |1 t: R* D% I( S7 w
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。+ b# q9 O( n) W, \# g
2,segment 本身是很粗糙的,做字幕勉强能用。 # X8 s5 T) M* k3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。5 x0 n6 ]5 r9 |( `4 \$ U
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中% C% c, x j5 h8 |( q% Y. v
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。 n/ E" ^* e5 l5 ]& s. |
5,model.transcribe 中参数说明:8 X" t0 }7 I a7 V# w6 ]1 C
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数* O n- a6 z( C, P4 T( \8 s
其中 1 w9 E# G4 m4 d, u7 {) R9 x& b word_timestamps=True, 1 _' d5 K0 K9 M' I
保证了你能拿到 word,否则是拿不到的& k) R2 S# E: e# N7 {$ y% A% {3 X8 W
initial_prompt = "Hello, welcome to my lecture.") 7 K! \0 t! v$ m9 I保证能尽可能准确的断句 punctuation,但是不是决定性的。 # \# _3 ?/ t- l u其他参数可参考源文件:# u% ]- m& u# \1 U; V https://github.com/guillaumekln/ ... isper/transcribe.py 3 u( d2 C+ W7 W, X( M8 U$ N152 def transcribe(1 _1 E H# l0 g0 t" H# o3 [
从源文件你可以看到是支持中文的句号断句的。 , E1 ?8 D; Q+ I% E) h9 h3 H' g 8 O4 u- g) Q4 }+ {% B7 a9 H6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。 . L3 s3 Y- d1 }; Q: a: u9 A( p J; m7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。 ; [+ d4 C! h6 S, d8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。 + _0 U0 @1 R& c5 X7 J0 U' e3 L % p4 E+ w0 X2 t; ? 2 c( {3 \2 R |+ @( N. {7 @* Y9 O. l G2 i% v/ g: @ 作者: nanimarcus 时间: 2023-6-4 11:53
多谢各位榜爷打赏。