- Y" m* l& @2 b" l$ Zsegments, info = model.transcribe(, G2 C$ c9 M$ a* C7 f8 u
sourceFileName, ( `1 ^* D' Q4 V; Q
beam_size=5, + Z6 p3 B1 Z. m3 T, o, U language="en", 1 t, |9 d" ^8 q6 _" r task="transcribe", 6 D6 ^8 x6 Y0 ~ s7 S/ e
word_timestamps=True, - f! e1 J* b( C" I- v+ q initial_prompt = "Hello, welcome to my lecture.") * v. g8 u M4 W. w" M, Q+ g& _ . [- m( [& u( |( X! `for segment in segments: ( R3 j. P( t0 \& ^* m4 w5 ] print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))7 s9 C7 c% F+ m( B! G a
( _! Z% M$ ?) |' N8 B' _ for word in segment.words: 6 [9 m: Z# v' C# a! k% N - l) u8 r f7 h( G" C. x
----------------------------------------9 h O2 O) z7 t
* @" t- a" j$ i Y% @& t代码说明: ; P3 d/ S6 H1 h$ r$ Y9 A% a3 n1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。) i# @/ C1 E9 c3 C4 c G
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。' o: E8 Y6 Y8 b; Q* l3 l! v9 ]/ A- {
2,segment 本身是很粗糙的,做字幕勉强能用。! P' e: J6 v: _0 j
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。5 V$ U1 {" u: r4 l) P6 k
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中9 }; l7 L- Q% h
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。 ' a5 v; O. K% q" h4 a h5,model.transcribe 中参数说明: " q! i* E. j" f; f1 [8 Q你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数 $ M+ Z1 O2 e! ` }; {0 E- C! ^# L. H其中 : R5 f( K) V( O3 k" @: R) A; ] word_timestamps=True, ! U% t1 ~0 ?% {/ o3 \ I4 ?" e& ]/ y
保证了你能拿到 word,否则是拿不到的 & i& Y9 ]8 C6 a. H+ d) L, n initial_prompt = "Hello, welcome to my lecture.")1 {8 ^4 ?4 r }- o O5 e* p
保证能尽可能准确的断句 punctuation,但是不是决定性的。 3 n7 }8 f0 I6 p4 @2 O% m0 j b% v3 X其他参数可参考源文件:1 d# u) n! A4 O: Z https://github.com/guillaumekln/ ... isper/transcribe.py ! h7 z7 g" a4 B152 def transcribe( `- a$ w/ W# B! G. }从源文件你可以看到是支持中文的句号断句的。$ h/ E$ _7 x5 S: a( ?