+
    Sj*                         R t ^ RIt^ RIt^ RIt^ RIHtHtHt ^ RItR t	R t
R tR tR tR tR	 tR
 t]R8X  d
   ]! 4        R# R# )uL   
通用字幕图片生成工具
用法: python generate_subtitles.py <adid>
N)Image	ImageDraw	ImageFontc                .    RT u;8*  ;'       d    R8*  # u # )u!   检查字符是否为中文字符u   一u   鿿 )chars   &1c:\dev\xtrs\vdcb\srtsegjoin\generate_subtitles.pyis_chinese_charr	      s    t''x''''    c                   . p. p^ p\         ;QJ d    R V  4       F  '       g   K   RM	  RM! R V  4       4      pV'       d   V  F  pVP                  V4      ^,          VP                  V4      ^ ,          ,
          pWX,           V8:  d   VP                  V4       WX,          pK`  VP                  RP                  V4      4       V.pTpK  	  EMV P	                  4       p	V	 F  p
VP                  V
4      ^,          VP                  V
4      ^ ,          ,
          pVP                  R4      ^,          VP                  R4      ^ ,          ,
          pV'       do   W\,           V,           V8:  d4   VP                  R4       VP                  V
4       W\V,           ,          pK  VP                  RP                  V4      4       V
.pTpK  VP                  V
4       TpK  	  V'       d!   VP                  RP                  V4      4       V# )uD   
自动换行文本
- 中文按字符换行
- 英文按单词换行
c              3   8   "   T F  p\        V4      x  K  	  R # 5i)N)r	   ).0cs   & r   	<genexpr>wrap_text.<locals>.<genexpr>   s     7$Qoa(($s   TF  )anygetbboxappendjoinsplit)text	max_widthfontlinescurrent_linecurrent_widthhas_chineser   
char_widthwordsword
word_widthspace_widths   &&&          r   	wrap_textr$      s    ELM #7$7###7$77KDd+A.d1CA1FFJ)Y6##D)+RWW\23 $v *  

Dd+A.d1CA1FFJ,,s+A.c1B11EEK .;yH '', ''-!:%==MLL!67$(6L$.M##D) * " RWW\*+Lr
   c           	        ^ RI pVP                  4       P                  P                  pVP                  4       P                  pRp \
        P                  ! VRR7      pVP                  4       pVP                  RV 34       . pVP                  4        F  pVw  rpVP                  WV34       K  	  TV'       d   VP                  4        # #   \         dN   p^ RIp\        RT RT RT 24       TP                  4        . u Rp?T'       d   TP                  4        # # Rp?ii ; i  T'       d   TP                  4        i i ; i)u   从数据库获取字幕信息N      $@timeoutz
            SELECT idx, cn, en FROM srts 
            WHERE adid = ? AND cn IS NOT NULL AND cn != '' 
            ORDER BY idx
           错误 [函数: 
   , 行号:    ]: 操作失败: )inspectcurrentframef_codeco_namef_linenosqlite3connectcursorexecutefetchallr   close	Exception	tracebackprint	print_exc)adiddb_pathr,   	func_nameline_noconnr3   	subtitlesrowidxcnener8   s   &&            r   get_subtitlesrF   E   s$   $$&--55I""$--GDw5  W		 	??$CKCRcr]+ %  JJL    :gY>OPQsST	JJL  JJL s1   A-C D%)D D%D(  D%%D( (Ec           	        ^ RI pVP                  4       P                  P                  pVP                  4       P                  pRp \
        P                  ! VRR7      pVP                  4       pVP                  RV 34       VP                  4       pV'       d#   V^ ,          V'       d   VP                  4        # # RV  2V'       d   VP                  4        # #   \         dQ   p^ RIp	\        RT RT RT 24       T	P                  4        RT  2u Rp?T'       d   TP                  4        # # Rp?ii ; i  T'       d   TP                  4        i i ; i)	u   从数据库获取adnameNr&   r'   z7SELECT DISTINCT adname FROM srts WHERE adid = ? LIMIT 1adid_r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   fetchoner6   r7   r8   r9   r:   )
r;   r<   r,   r=   r>   r?   r3   resultrE   r8   s
   &&        r   
get_adnamerL   d   s"   $$&--55I""$--GDw5PSWRYZ"!9 JJL  tf~ JJL    :gY>OPQsSTtf~JJL  JJL s7   AC ;C D4$,D/D4D7 /D44D7 7Ec           	        ^ RI pVP                  4       P                  P                  pVP                  4       P                  pRpRp \
        P                  ! VRR7      pVP                  4       pV R,          pVP                  RRV R234       VP                  4       pV'       d#   V^ ,          V'       d   VP                  4        # #  V'       d   VP                  4        R# R#   \         dN   p	^ RIp
\        RT R	T R
T	 24       T
P                  4         Rp	?	T'       d   TP                  4        R# R# Rp	?	ii ; i  T'       d   TP                  4        i i ; i)u$   从author数据库获取作者信息Nz\\ll\d\wxvddata\dpd.dbr&   r'   :N<   Nz0SELECT author FROM ads WHERE name LIKE ? LIMIT 1%r)   r*   r+   rI   )adnamer,   r=   r>   author_db_pathr?   r3   search_namerK   rE   r8   s   &          r   
get_authorrS      s-   $$&--55I""$--G.ND~t< SkIaP[}\]L^K`a"!9 JJL   JJL    :gY>OPQsSTJJL  JJL s+   A(C' 'D?2(D:E :D??E Ec                    ^ RI pRpVP                  W 4      pV'       d   WP                  4       R pMT pRV9   d   R# V# )u   
清理标题：
1. 如果开头是日期格式（如26-04-08_13_52_45-），则截掉
2. 如果标题太长，只取"鸡蛋最容易被污染的是沙门氏菌"
Nz%^\d{2}-\d{2}-\d{2}_\d{2}_\d{2}_\d{2}-u*   鸡蛋最容易被污染的是沙门氏菌)rematchend)rP   rU   patternrV   titles   &    r   clean_titlerZ      sD     6GHHW%Eyy{|$ 4u<;Lr
   c           	     @	   RpVR8X  d   \        V4      p\        V4      p\        RV 24       \        RV 24       \        RV 24       V R2p\        P                  P                  V4      '       d   \        P                  ! V4       \        P                  ! V4       \        R\        V4       R24       V'       g   \        R	4       R
#  \        P                  ! R^*4      p\        P                  ! R^"4      p\        P                  ! R^(4      p	\        P                  ! R^04      p
RRr\        T4       EF  w  pw  pppT'       d4   TP                  R4      '       g   TP                  R4      '       d   TRR" pT'       d4   TP                  R4      '       g   TP                  R4      '       d   TRR" p\        P                   ! RY3R#4      p\"        P$                  ! T4      p\'        TRT4      p^pT Fh  pTP)                  T4      ^,          TP)                  T4      ^ ,          ,
          pTT,
          ^,          pTP+                  TT3TTR$R7       T^5,          pKj  	  RT 2pTP)                  T4      ^,          TP)                  T4      ^ ,          ,
          pTT,
          ^,          pTP+                  TT^,           3TTR$R7       T^,           ^P,           p\'        TRT	4      pT Fh  pT	P)                  T4      ^,          T	P)                  T4      ^ ,          ,
          pTT,
          ^,          pTP+                  TT3TT	R%R7       T^9,          pKj  	  T'       d   T^,           p\'        TRT
4      pT Fh  pT
P)                  T4      ^,          T
P)                  T4      ^ ,          ,
          pTT,
          ^,          pTP+                  TT3TT
R$R7       T^=,          pKj  	  \        P                  P-                  TRTR R24      pTP/                  T4       T^d,          ^ 8X  g   EK  \        RT^,            R\        T4       24       EK  	  \        R\        T4       R24       \        R T 24       R!#   \         d   p\        RT 24        Rp?R
# Rp?ii ; i)&u   生成字幕图片z\\ll\D\xtrssvjj\db\dpd.dbr   u   原始adname: u   清理后标题: zauthor: _imagesu   找到 u
    句字幕u   错误：未找到字幕信息Fz
simsun.ttcz	arial.ttfu   字体加载失败: Ni   i  u   ，u   。,.RGBi  )r   fillu   译自@vertical_subtitle_03dz.pngu   生成字幕图片 /u   完成！生成了 u    张字幕图片u   输出目录: T)    re   re   )   rf   rf   )rf      re   )rS   rZ   r9   ospathexistsshutilrmtreemakedirslenr   truetyper7   	enumerateendswithr   newr   Drawr$   r   r   r   save) r;   rP   authorsubsr<   rY   
output_dir
title_fontsubtitle_fontcn_fonten_fontrE   widthheightirB   rC   rD   imagedrawtitle_linestitle_yline
line_widthxsubtitlesubtitle_widthcn_ycn_linesen_yen_linesoutput_paths    &&&&                            r   generate_subtitle_imagesr      s&    +G rzF# E	N6(
#$	eW
%&	HVH
 87#J 
ww~~j!!j!KK
 
GCI;j
)*./''b9
!**<<$$\26$$["5 6 &dO=CR2;;u%%U););CRB2;;s##r{{3'7'7CRB 		%%)<~~e$  sJ7D#++D1!4z7I7I$7OPQ7RRJ#)AIIq'lDzIPrMG	   VH%&..x8;m>S>ST\>]^_>``^#)		1gl#XM	X |b Rg.D .q1GOOD4I!4LLJ#)AIIq$iG-IHBJD	  "9D S'2H $__T2158Ma8PP
Z'A-		1d)To	N
	 ! ggll:1CC9D/QR

; 9>'!uAc$i[9:i ,l 
D	{*:
;<	N:,
'(A  $QC()s   AQ9 9RRRc                    \        \        P                  4      ^8w  d   \        R4       \        R4        \	        \        P                  ^,          4      p \        R4       \        RV  24       \        R4       \        R4       \        R	4       \        R
4       \        R4       \        R4       \        R4       \        R4       \        R4       \        R4       \        R4       \        R4       \        R4       \        R4       \        V 4      pV'       d   \        R4       R# \        R4       \        P                  ! ^4       R#   \
         d    \        R4       Rp  ELi ; i)u	   主函数u+   用法: python generate_subtitles.py <adid>u)   示例: python generate_subtitles.py 8442u   错误：adid必须是数字iL u    === 字幕图片生成工具 ===zadid: u   
【图片相关规则】u&   1. 图片尺寸：720x1280（竖屏）u   2. 背景色：黑色uA   3. 标题：使用完整adname，白色，字号42，居中显示uW   4. 副标题：格式为'译自@作者名'，白色，字号34，位于标题下方26pxuK   5. 中文字幕：黄色(255,215,0)，字号44，位于副标题下方130pxuB   6. 英文字幕：白色，字号48，位于中文字幕下方26pxuE   7. 字体：标题/副标题/中文用simsun.ttc，英文用arial.ttfu-   8. 折行：中文按字符，英文按单词uG   9. 标点处理：去掉句末标点（中文的，。和英文的,.）u?   10. 实时显示进度：每处理10个文件显示一次进度u   
【避坑记录】uH   - 错误3：Pillow的getsize()方法错误，已修复为使用getbbox()uX   - 错误8：英文文本最后一行单词间空格丢失，已修复为使用' '.join()u   
字幕图片生成完成！u   
字幕图片生成失败！N)rn   sysargvr9   intr7   r   exit)r;   successs     r   mainr     s   
388};<9:388A; 
,.	F4&/ 

&'	
23	
!"	
MN	
cd	
WX	
NO	
QR	
9:	
ST	
KL	
 !	
TU	
de&t,G-.-.;  ,-s    E E('E(__main__)__doc__rh   r   r1   PILr   r   r   rk   r	   r$   rF   rL   rS   rZ   r   r   __name__r   r
   r   <module>r      s^   
 
 
  + + (
/b>6<.gP$N zF r
   