
    i<                     z    d Z ddlZddlZddlZddlZddlZddlZddlZd	dZd Z	d Z
d Zd Zedk(  r e        yy)
u?   
循环处理 pub=1 的记录，执行双语视频制作流程
    Nc                 z   ||}t         j                  j                  ||  d      }t         j                  j                  |      st	        d|        yt         j                  j                  ||  d      }t        j
                  |      }|st	        d|        y|j                  d        |d	   }t         j                  j                  ||  d
      }t         j                  j                  |      r|}t	        d|        t         j                  j                  ||  d      }	 dd|d|ddddddddddddd|g}	t	        ddj                  |	              t        j                  |	ddd      }
|
j                  d	k7  r$t	        d       t	        d|
j                          yt        j                  |       t        j                  ||       t	        d|        y# t        $ rL}t	        d |        t         j                  j                  |      rt        j                  |       Y d}~yd}~ww xY w)!u-  
    给MP4视频添加封面图片

    参数:
        adnamemain: 文件主名，MP4文件名为 adnamemain.mp4
        mp4_dir: MP4文件所在目录，默认为当前目录
        cover_dir: 封面图片所在目录，默认为mp4_dir

    返回:
        True: 成功
        False: 失败
    Nz.mp4u   错误：MP4文件不存在: Fz*.jpgu)   警告：未找到封面图片，模式: c                 R    t        t        j                  j                  |             S )N)lenospathbasename)xs    -c:\dev\xtrs\vdcb\srtsegjoin\bili-mp4-maker.py<lambda>z"add_cover_to_mp4.<locals>.<lambda>/   s    3rww'7'7':#;    )keyr   z.jpgu   找到封面图片: z_with_cover_temp.mp4ffmpegz-iz-mapz0:vz1:vz1:az-c:vcopyz-c:az-disposition:0attached_picz-yu   执行命令:  Tcapture_outputtextshellu   错误：ffmpeg执行失败zstderr: u   成功：封面已添加到 u   错误：添加封面失败: )r   r   joinexistsprintglobsort
subprocessrun
returncodestderrremoverename	Exception)
adnamemainmp4_dir	cover_dirmp4_pathcover_patterncover_files
cover_pathexact_covertemp_outputcmdresultes               r
   add_cover_to_mp4r.      s    	ww||G
|4%89H77>>(#-hZ89 GGLLzl%,@AM))M*K9-IJ ;<QJ '',,yZL*=>K	ww~~k" 
	 
-. '',,w:,6J(KLK(*(EEEFFn
 	sxx}o./	
 !/1HV]]O,- 			(
		+x(,XJ78 -aS1277>>+&IIk"	s    -A=G% +9G% %	H:.AH55H:c            	         ddl } | j                         j                  j                  }| j                         j                  }	 t        j                  dd      }t
        j                  |_        	 |j                  d       |j                  d       t        d       |S # t        $ r}|j                           d}~ww xY w# t        $ r.}ddl}t        d	| d
| d|        |j                           d}~ww xY w)u   
    获取数据库连接
    r   Nz\\ll\D\xtrssvjj\dpd.dbg      N@)timeoutzPRAGMA synchronous=NORMALzPRAGMA cache_size=-64000111111111111111111111111111111u   错误 [函数: u
   , 行号: u   ]: 连接数据库失败: )inspectcurrentframef_codeco_namef_linenosqlite3connectRowrow_factoryexecuter!   closer   	traceback	print_exc)r2   	func_nameline_noconnr-   r=   s         r
   get_db_connectionrB   g   s     $$&--55I""$--G8$G";;	LL45LL34
 	./  	JJL	   :gY>XYZX[\]	s<   ,C 1"B  C  	B?)B::B??C 	C9)C44C9c                     	 ddddddd| g}t        j                  |ddd	      }t        |j                  j	                               }|S # t
        $ r}t        d
|        Y d}~yd}~ww xY w)u%   
    获取文件时长（秒）
    ffprobez-vquietz-show_entrieszformat=durationz-ofz"default=noprint_wrappers=1:nokey=1Tr   u   获取文件时长失败: Nr   )r   r   floatstdoutstripr!   r   )	file_pathr+   r,   durationr-   s        r
   get_file_durationrK      sz    '.7
 Dt4P,,./ *1#./s   AA
 
	A+A&&A+c                    ddl }t        d|  d       t        d       t        d|j                   j                                 	 t               }t        d       	 |j	                  d| f      }t        d	       |j                         }t        d
|        |r|d   nd|  }t        d|        t        d       |j                          t        d       	 t        d|j                   j                                 t        d|  d| d       t        d       ddl }|j                   j                         }t        d|        d|  }t        d|        t        d|j                   j                                 t        j                  |dddd      }t        d|j                   j                                 |j                   j                         }	|	|z
  j                         }
t        d|j                          t        d|
d d!       |j                  }|dk7  rt        d"       yt        d#       t        d$       d%|  }t        j                  |dddd      }|j                  dk7  rt        d&       yt        d'       t        d(       d)|  }t        j                  |dddd      }|j                  dk7  rt        d*       yt        d+       t        d,       d-|  }t        j                  |dddd      }|j                  dk7  rt        d.       yt        d/       t        d0       t        |d1      st        d2       yt        d3       | d4}t        j                  j                  d|      }t        j                  j!                  |      st        d5|        yt#        |      }|d6k  rt        d7| d!       yt        d8|d d!       y# t        d       |j                          t        d       w xY w# t        $ r,}t        d|        d|  }t        d|        Y d}~cd}~ww xY w)9u=   
    处理单个广告，执行双语视频制作流程
    r   Nu   
=== 开始处理 adid:  ===u   正在获取 adname...u   开始获取 adname，时间：u   数据库连接成功z7SELECT DISTINCT adname FROM srts WHERE adid = ? LIMIT 1u   执行查询成功u   查询结果: adid_u   获取到 adname: +2222222222222222222222222222222222222222222   数据库连接已关闭u   获取 adname 失败: u   使用默认 adname: u    获取 adname 完成，时间：u   
=== 处理 adid: z, name: u@   正在进行：步骤1 - 截取中文音频并拼接双语音频u   开始时间：zpython joinbiliad.py u   执行命令：u   开始执行命令，时间：zc:\dev\xtrs\vdcb\srtsegjoinTF)cwdr   r   r   u   命令执行完成，时间：u!   命令执行完成，返回码：u   执行时间：z.2fu   秒u!   错误：双语音频制作失败u+   完成：步骤1 - 双语音频制作成功u+   正在进行：步骤2 - 生成字幕图片zpython generate_subtitles.py u!   错误：字幕图片生成失败u+   完成：步骤2 - 字幕图片生成成功u(   正在进行：步骤3 - 生成视频流z#python generate_bilingual_video.py u   错误：视频流生成失败u(   完成：步骤3 - 视频流生成成功u(   正在进行：步骤4 - 合并音视频zpython merge_audio_video.py u   错误：音视频合并失败u(   完成：步骤4 - 音视频合并成功u+   正在进行：步骤5 - 添加视频封面)r#   u!   错误：视频封面添加失败u+   完成：步骤5 - 视频封面添加成功z_final_bilingual.mp4u&   错误：最终视频文件不存在:    u   错误：视频时长过短: u&   成功：视频制作完成，时长: )datetimer   nowrB   r;   fetchoner<   r!   r   r   total_secondsr   r.   r   r   r   r   rK   )adidrS   rA   cursorr,   adnamer-   
start_timer+   end_timerJ   r   output_fileoutput_pathvideo_durations                  r
   process_itemr_      sS    	%dV4
01 

"#	+H,=,=,A,A,C+D
EF0 "%&	.\\"[^b]deF&'__&FN6(+,"(VAYdVnF&vh/0?@JJL,- 
,X->->-B-B-D,E
FG	vXfXT
:; 
LN""&&(J	OJ<
() "$
(C	OC5
!"	*8+<+<+@+@+B*C
DE ^^-F 
*8+<+<+@+@+B*C
DE  $$&H:%446H	-f.?.?-@
AB	OHS>
-.""JQ13	79 
79)$
0C^^-F A13	79 
46/v
6C^^-F A.0	46 
46(
/C^^-F A.0	46 
79F,MN13	79 H01K'',,@+NK77>>+&6{mDE '{3N-n-=SAB	2>#2Fc
JKk ?@JJL,- 0&qc*+%fX.//0s1   P AO! 2&P !(P		P 	Q!P<<Qc                     ddl } t        d       	 t        d| j                   j                          d       g }	 t               }	 |j	                  d      }|j                         }t        dt        |       d       |j                          |j                          t        d	       	 |r[t        d       t        |d      D ]@  \  }}|d   }|}	t        d| dt        |       d| d|	        t        |	      }
	 t               }	 |
rd}	 t        ddd      5 }t        j                  |      }|j!                  di       j!                  dd      }ddd       |dk(  rdnd}t        d| d| d       |j	                  d||f       |j#                          t        d| d|        n=t        d       |j	                  d |f       |j#                          t        d| d!       |j                          t        d	       C g }	 t               }	 |j	                  d#      }|j                         }t        d$t        |       d%       |j                          |j                          t        d	       	 |rt        d'       t        |d      D ]  \  }}|d   }|}	t        d| dt        |       d(| d|	        	 t               }	 t        d)       |j	                  d*|f       |j#                          t        d| d+       |j                          t        d	       	 t        |	      }
	 t               }	 |
rd}	 t        ddd      5 }t        j                  |      }|j!                  di       j!                  dd      }ddd       |dk(  rdnd}t        d| d| d       |j	                  d||f       |j#                          t        d| d|        n=t        d       |j	                  d |f       |j#                          t        d| d!       |j                          t        d	        t        d-| j                   j                                 t%        j&                  d.       k# j                          |j                          t        d	       w xY w# t        $ r-}t        d
|        ddl	}|j                          Y d}~2d}~ww xY w# 1 sw Y   xY w#  Y xY w# |j                          t        d	       w xY w# t        $ r-}t        d"|        ddl	}|j                          Y d}~d}~ww xY w# j                          |j                          t        d	       w xY w# t        $ r-}t        d&|        ddl	}|j                          Y d}~8d}~ww xY w# |j                          t        d	       w xY w# t        $ r-}t        d,|        ddl	}|j                          Y d}~wd}~ww xY w# 1 sw Y   xY w#  Y xY w# |j                          t        d	       w xY w# t        $ r-}t        d"|        ddl	}|j                          Y d}~d}~ww xY w)/u<   
    主函数，循环处理 pub=1 和 pub=2 的记录
    r   Nu&   === 双语视频制作循环开始 ===u&   
=== 开始新一轮检查，时间：rM   z2SELECT rowid FROM ads WHERE pub = 2 ORDER BY rowidu   找到 u)    个 pub=2 的记录（中断的记录）rP   u   查询 pub=2 记录失败: u   先处理 pub=2 的记录...rR   z
[/u   ] 处理 pub=2 记录: rowid=z, adid=zcfg.tomlrzutf-8)encodingglobalpub2wxcflag      u"   制作成功，全局 pub2wxcflag=u   ，将 pub 值更新为 z...z&UPDATE ads SET pub = ? WHERE rowid = ?u   更新成功：rowid=z, pub=u(   制作失败，将 pub 值重置为 1...z&UPDATE ads SET pub = 1 WHERE rowid = ?z, pub=1u   更新 pub 值失败: z2SELECT rowid FROM ads WHERE pub = 1 ORDER BY rowidu   
找到 u#    个 pub=1 的记录（新记录）u   查询 pub=1 记录失败: u   处理 pub=1 的记录...u   ] 处理 pub=1 记录: rowid=u(   正在更新 pub 值为 2 (制作中)...z&UPDATE ads SET pub = 2 WHERE rowid = ?z, pub=2u   更新 pub=2 失败: uB   
处理完所有记录，等待 10 秒后重新检查... 时间：
   )rS   r   rT   rB   r;   fetchallr   r<   r!   r=   r>   	enumerater_   opentomlloadgetcommittimesleep)rS   
pub2_itemsrA   rX   r-   r=   iitemrowidrW   successre   fconfig
target_pub
pub1_itemss                   r
   mainr{   )  s    	
23
78I8I8M8M8O7PPTUV 
	"$&D2&Z[#__.
J00YZ[

01 01$Z34QA3aJ00MeWT[\`[abc 't,*,.D:"*+K%%)*cG%LPQ-1YYq\F28**Xr2J2N2N}^_2`K &M /:Q.>AJ!$F{mSklvkwwz"{| LL)QT^`eSfg KKM!$9%zl"ST!$LN LL)QTYS[\ KKM!$9%"HI

89E 4R 
	"$&D2&Z[#__.
	#j/!22UVW

01 -.$Z34QA3aJ00MeWT[\`[abc,.D:HI%MPUxX 5eWGDE

89 't,*,.D:"*+K%%)*cG%LPQ-1YYq\F28**Xr2J2N2N}^_2`K &M /:Q.>AJ!$F{mSklvkwwz"{| LL)QT^`eSfg KKM!$9%zl"ST!$LN LL)QTYS[\ KKM!$9%"HI

89g 4t 	ST\TeTeTiTiTkSlmn

2]  

01 	"/s34!!	"0 &M%L% $ 

89  *21#67$''))* 

01 	"/s34!!	", 

89  1!56$'')	" &M%L% $ 

89  *21#67$''))*sQ  
R, 9Q< ?+R, ?
T
S:S28S%S2BS:+T
V 9U +V 
W=V<W5
Y
 X*X"8XX"BX*!Y
<-R))R, ,	S"5"SS"%S/	*S22S74S::TT	U#"UU-V  V 	V9"V44V9<WW	X%"XXX	X""X'$X**YY

	Z "Y;;Z __main__).N)__doc__r   sysr7   r   rp   rl   r   r.   rB   rK   r_   r{   __name__ r   r
   <module>r      sT    
 
     Tn:(NbUp zF r   