7 m$ H, r \2 k1 o: j8 W$ f2 hmodel = WhisperModel(model_size, device="cuda", compute_type="int8")' A. n7 h5 z, \ w1 B! |0 ~7 R( N
0 `% B- K; x" s. j tsegments, info = model.transcribe( 6 g k; `6 E. L( `. G4 Z/ k sourceFileName, ( e) q- E* a6 M. @3 w7 i i4 J beam_size=5, 0 {: ~& c8 v$ z4 O" ` language="en", T0 |7 @& e$ o# x8 M) P
task="transcribe", $ L. a: S) R4 ]1 N
word_timestamps=True, 1 u3 F- O* r+ f) `# W$ B initial_prompt = "Hello, welcome to my lecture.") $ N9 s) }4 z) s% ]& }, e9 m8 k; @' g8 I; ~
for segment in segments:- S, Y) f7 V x! C4 K
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)) : A6 G, w; ?% B) U! U " T. ^( Q* @: m& a6 g for word in segment.words: ! b' _0 d) s% |* m; O D, g7 E. m- L1 A
----------------------------------------3 M0 D6 ~4 ~0 \$ r/ \$ l
/ Y) H ?5 @6 u代码说明: * a! L8 o9 \, E1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。8 y( D4 P9 H5 u4 T
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。 v6 v( B9 Z( e2 E$ V2,segment 本身是很粗糙的,做字幕勉强能用。/ J1 [ G ?7 {0 A3 x3 M4 `% ~/ v
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。$ b& D4 C8 W! F* M
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中4 C4 @/ y+ b. d+ R
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。 ) v% T$ U) L! L! v6 h5,model.transcribe 中参数说明: ; d: B5 F( T2 V" `; R% l, [6 l你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数1 N' B, x- q. o! {( f3 `
其中+ I6 {6 L$ F# S/ K" g: s
word_timestamps=True, ! p3 B& C. R: d9 l4 j. `3 T5 b) ?7 y- Z保证了你能拿到 word,否则是拿不到的 ) c9 A& C7 }! x4 e& ^ initial_prompt = "Hello, welcome to my lecture.") " {" r* X9 s4 J5 r$ `" m; J保证能尽可能准确的断句 punctuation,但是不是决定性的。 : H u$ R$ j4 |4 P9 B+ U5 E其他参数可参考源文件:7 U" h7 W+ U- |' v https://github.com/guillaumekln/ ... isper/transcribe.py& I5 G. g& _2 ~1 z8 {
152 def transcribe( * T0 L! o) W3 |4 h. f从源文件你可以看到是支持中文的句号断句的。 4 w7 r! Q2 A2 t4 F$ l) M) _ L4 U 0 `% T6 a6 C' n; j9 y/ B, c6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。8 c) y2 t- O3 m) R, G
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。2 ^6 O7 \6 R8 X: K
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。0 @0 g T, _) N i