
    ?e&j                          d dl Z d dlZd dlZd dlZd dlmZ  ed          ZdZdZ	edz  Z
edz  Zedz  Zed	z  Zed
z  Zedz  Zedz  Zedz  ZddZddZd Zd Zd Zd Zd Zd Zedk    r e             dS dS )    N)PathzL/data/video-pipeline/Youtube-Video-Maker/Project/01062026-003-Tran-Quoc-Toanzhttp://192.168.1.104:8018/probez%http://192.168.1.104:8018/blackdetectzoutput/final/final_video.mp4z#output/final/final_video_probe.jsonz&output/final/final_package_report.jsonz!output/final/final_qa_report.jsonzoutput/info.jsonz&output/thumbnails/thumb_16x9_final.pngz&output/thumbnails/thumb_9x16_final.pngz'logs/step19_final_qa_info_manifest.json`T  c                 ~   t           j                            | t          j        |d                                          ddid          }t           j                            ||          5 }t          j        |                                	                                          cd d d            S # 1 swxY w Y   d S )NFensure_asciizContent-Typezapplication/jsonPOST)dataheadersmethod)timeout)
urllibrequestRequestjsondumpsencodeurlopenloadsreaddecode)urlpayloadr   reqrs        $scripts_run_step_19_final_qa_info.pypostr      s    s
7(N(N(N(U(U(W(Wao  qC  aD  LR  	S  	SC			G		4	4_$*QVVXX__M^M^B_B___________________s   -8B22B69B6c                 ~    |                                  r(t          j        |                     d                    n|S )Nutf-8encoding)existsr   r   	read_text)pdefaults     r   loadr%      s2    89

O4:akk7k33444O    c                 r    t          |                     di                               d          pd          S )Nformatdurationr   )floatget)prs    r   durr-      s0    E"&&"--11*==BCCCr&   c                 b    t          fd|                     dg           D                       S )Nc              3   J   K   | ]}|                     d           k    V  dS )
codec_typeN)r+   ).0sts     r   	<genexpr>zhas.<locals>.<genexpr>   s4      OOQ!%%--q0OOOOOOr&   streams)anyr+   )r,   r3   s    `r   hasr7      s3    cOOOO"&&2:N:NOOOOOOr&   c                     t          |                                           r<t          t          t          |                               |                              ndS )Nr   )r   r!   lenlistglob)pathr;   s     r   count_filesr=      sF    T

HYHYH[H[$bCT$ZZ__T-B-B(C(C$D$D$Dabbr&   c                 P   t           dz  }|                    dd           g }| D ]\  }}|| d|ddz  }ddd	d
dddddddd|ddt           d| dg}t          j        |dd           |                    ||t          |          |                                d           |S )Nzoutput/final/final_qa_framesT)parentsexist_ok_z.1fz.jpgsshpassz-p11210119sshz-ozStrictHostKeyChecking=noz!PreferredAuthentications=passwordzPubkeyAuthentication=nozroot@192.168.1.104z+ffmpeg -y -hide_banner -loglevel error -ss z.3fz -i 'z' -frames:v 1 -q:v 2 ''x   )checkr   )labeltime_secr<   r!   )PROJECTmkdirFINAL
subprocessrunappendstrr!   )timesoutdirframesrH   secoutcmds          r   extract_framesrW      s    11F6<<VZ<3[3[3[F \ \	ce++c+++++tJuT2LTRuvz  |U  Vjl3lllllfilllnsc2222u3s88SZZ\\ZZ[[[[Mr&   c                     t           dz                      d          } d}d}|                                 D ]}|                                }|                    d          r.|                    dd          d                                         }|                    d	          s|                    d
          r@|                    dd          d                                                                         }||fS )Nscript/source_story.txtr   r   u   Việt Sử Kể LạiuB   NGƯỜI CON GÁI HÁI DÂU BƯỚC VÀO LONG MẠCH ĐẠI VIỆTzseries::   u   tiêu đề truyện:ztieu de truyen:)rJ   r"   
splitlineslower
startswithsplitstriptitle)txtseriesra   linelows        r   
parse_metarf   %   s   	*	*55w5GGC#F+oU   D DJJLL>>)$$ITZZA->->q-A-G-G-I-If>>122  	DcnnEV6W6W  	D_c_i_ijmno_p_pqr_s_y_y_{_{  `B  `B  `D  `DY^%<r&   c                  X   t                                           st          d          t          t          dt          t                     id          } t                              t          j	        | dd          d           t          t          i           }t          t          t          t                     t          t          d	z            d
d          }t          |           }t          |                    di                               di                     pd}t          |                    di                               di                     pd}t!          d|dz
            }dt!          d|dz
            fd|dz   fd||dz  z   fd|t!          d|dz
            z   fd|dz   fg}t#          |          }t          t          dz  i           }	t          t          dz  i           }
t          t          dz  i                               dg           }t          t          d z  i                               d!g           }t%                      \  }}t                                           o!t                                           j        d"k    t+          | d#          t+          | d$          t,                                          t.                                          |                    d%d          |                    d%d          dk    t1          d& |D                       |                    d'          d(v |                    d)i                               d*          d+d,}t1          |d-         |d.         |d/         |d0         |d1         |d2         |d3         |d4         g          }t          j        d5||rd6nd7t          t                     |||||d8gd9}t4                              t          j	        |dd          d           g d:}t          j        ||||d'         i d;t          t          d<z            d=t          t          d>z            d?t          t          dz            d@t          t          dAz            dBt          t          dCz            dDt          t,                    t          t.                    dEdFt          t          dGz            dHt          t          dIz            dJt          t          dKz            dLt          t          dMz            dNt          t          d z            dOt          t          dPz            dQt          t          dRz            dt          t          dSz            dTt          t                     dUt          t4                    dVt          t                    |	                    dW          p$t          t          t          dz  i                     t          |
          |dXt7          |          t9          t          dCz  dY          t7          |          dZd[d\d]d^d_                    |          d`dad_                    |          dbdcd_                    |          ddde	}t<                              t          j	        |dd          d           t>                              t          j	        t          j        d5|d'         t          t<                    t          t4                    t          t                     dfdd          d           tA          tC          j"        dg          dhz   t          j	        |d'         |t          t<                    didj          z   dkl           |st          dm          d S )nNzmissing final
input_pathrF   F   )r   indentr   r   z%output/final/final_qa_blackdetect.log)rh   log_pathr   input_probesintrog3333330@maing~jtͅ@r      intro_transitionr[   
early_main   mid_main	late_main-   outro   zaudio/master_audio_probe.jsonzoutput/main_story_probe.jsonzscript/scenes.jsonsceneszparts/part_ranges.jsonpartsi  audiovideoevent_countc              3   &   K   | ]}|d          V  dS )r!   N )r1   fs     r   r4   zmain.<locals>.<genexpr>D   s&      !>!>!!H+!>!>!>!>!>!>r&   status)	completedneeds_review
validation
bgm_volumezbapproved_output_candidate_after_automated_qa; human spot-check recommended for subjective BGM/sync)final_exists	has_audio	has_videothumbnail_16x9_existsthumbnail_9x16_existsblack_event_countblackdetect_clearqa_frames_extractedpackage_completedr   decisionr   r   r   r   r   r   r   r      passedfailedzAutomated QA checks streams, duration, black frames, frames at intro/early/mid/late/outro. User should still listen/spot-check BGM and sync before publishing.)
project_idstepr   r   final_video_pathfinal_duration_sec	qa_points	qa_framesblackdetectr   notes)z#vetmucthoigianz#ylanz#nguyenphiylanz#nhalyz#daivietz#vietsukelaiz#lichsuvietnamsource_scriptrY   cleaned_storyzscript/cleaned_story.txt
dense_plancharacter_biblezscript/character_bible.jsonscene_images_dirzimages/scenes
thumbnails)16x99x16voice_segments_dirzaudio/voice_segmentsscene_tts_dirzaudio/scenesmaster_narrationzaudio/master_narration.wav	subtitlesz&subtitles/master_subtitles_clamped.srtpart_rangesrendered_parts_dirrender_parts
main_storyzoutput/main_story.mp4zoutput/intro/intro.mp4final_outputfinal_qa_reportfinal_package_reportmaster_duration_sec)master_audio_secmain_story_sec	final_seczscene_*.png)rx   scene_imagesry   ud   Ỷ Lan: Người Con Gái Hái Dâu Bước Vào Long Mạch Đại Việt | Việt Sử Kể LạiuM   Nguyên Phi Ỷ Lan - Từ Gốc Lan Thôn Quê Đến Quyền Lực Nhà LýuG   Ỷ Lan: Ánh Sáng Và Bóng Tối Của Linh Nhân Hoàng Thái Hậuu  Cùng Vết Mực Thời Gian kể lại cuộc đời Nguyên phi Ỷ Lan: từ cô gái hái dâu bên gốc lan đến Hoàng thái hậu, nhiếp chính, người góp phần giữ ổn định triều Lý và để lại di sản phức tạp trong lịch sử Đại Việt. uS   Ỷ Lan - người phụ nữ bước từ gốc lan vào lịch sử Đại Việtu   Một hành trình về Nguyên phi Ỷ Lan, người phụ nữ quyền lực thời Lý với công lớn, vết tối và dấu ấn sâu đậm trong dân gian.u3   Ỷ Lan - từ gốc lan đến ngai vàng nhà Lýuj   Câu chuyện về Nguyên phi Ỷ Lan, người phụ nữ đặc biệt của lịch sử Đại Việt.)title_youtube_1title_youtube_2title_youtube_3description_youtubehashtag_youtubetitle_facebookdescription_facebookhashtag_facebooktitle_tiktokdescription_tiktokhashtag_tiktok)	r   rc   ra   approved_outputqa_final_statuspaths	durationscountssocial_metadata)r   r   r   	info_pathqa_report_pathr   z%Y-%m-%d %H:%M:%S zDONE )r   final_durationinfor   T)flushfailed_validation)#rL   r!   
SystemExitr   PROBErP   FINAL_PROBE
write_textr   r   r%   
PKG_REPORTBLACKrJ   r-   r+   maxrW   rf   statst_sizer7   THUMB16THUMB9allname	QA_REPORTr9   r=   joinINFOMANIFESTprinttimestrftime)r,   pkgblacktotal	intro_durmain_duroutro_startrQ   rS   master_probe
main_proberx   ry   rc   ra   r   r   qayt_tagsr   s                       r   rn   rn   .   s	   <<>><O!<!<<E<E

+C00B4:be1EEEwWWWZC
u3u::WEl=l9m9mnnot
u
uE
b''E#''.,,00<<==EI++//r::;;FwHAeBhKs1Yq[112L23NPZ[demnoeo[oOpr}  H  IL  MN  OW  XZ  OZ  I[  I[  [  r\  ^e  fq  rs  fs  ]t  uE%  Fg==bAALG::2>>J,,R0044XbAAF
w//
3
3
7
7
C
CELF5||~~C%**,,*>t*C7OOBw ' 0 0!IImA66599UbcdKeKeghKh!!>!>v!>!>!>>>GGH--1MMWW\"--11,??w	 	J 
>*:k+B:kCZ[ef}[~  @J  Kb  @c  dn  oB  dC  DN  Od  De  fp  qD  fE  F  G  GF\VQWEeXX]ey|  ~C  zD  zD  Z_  lq  ~D  SX  fp  zZ  y[  \  \BBECCCWUUUlllG\6%RXkmnvkw
C(A ABB
CRSVW^_yWySzSz
 |H  IL  MT  Ui  Mi  Ij  Ij
 k|  }@  AH  If  Af  }g  }g
s7?#:;;
<HQTU\Q]Q]ehioepepIqIq
 sG  HK  LS  Tj  Lj  Hk  Hk
 l{  |  @G  HV  @V  |W  |W
 Xj  kn  ov  wS  oS  kT  kT
 G$LLMM
 O\\_`g  iA  aA  ]B  ]B
 CW  X[  \c  dr  \r  Xs  Xs
 t@  AD  EL  Md  Ed  Ae  Ae
 C 8899	
 ;IU	
 Uffijsftft	
 vL  MP  Q[  M\  M\	
 )5(8(89N(O(O  )ISVW[\c  eD  ]D  EG  XH  XH  TI  TI  [^  _i  [j  [j  w|  }  }v;;k'/BYZg6h6hqtuzq{q{|| Emg #}!hhw//r $J"xx00P "N XXg..
 

 
D0 	OODJta@@@'ORRR
RQST\Q]jmnrjsjs  FI  JS  FT  FT  dg  hm  dn  dn  $o  $o  }B  JK  L  L  L  V]  ^  ^  ^	$-,
-
-g
5dj2h<invyz~vv  BA  BA  OT  7U  7U  7U  U  \`  a  a  a  a8$788888r&   __main__)r   )N)r   r   urllib.requestr   rM   pathlibr   rJ   r   r   rL   r   r   r   r   r   r   r   r   r%   r-   r7   r=   rW   rf   rn   __name__r~   r&   r   <module>r      sS   - - - - - - - - - - - - - - - -      [\\'-,,99;;

5
5	8877	:	:` ` ` `P P P P C C C O O O b b b	 	 	  :9 :9 :9v Zr&   