
    @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)PathzF/data/video-pipeline/Youtube-Video-Maker/Project/11062026-002-Nha-Dinhz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                 v   t           dz  }|                    dd           g }| D ]\  }}|| d|ddz  }ddd	d
dd|ddt          t                    ddddt          |          g}t	          j        |dd           |                    ||t          |          |                                d           |S )Nzoutput/final/final_qa_framesT)parentsexist_ok_z.1fz.jpgffmpegz-yz-hide_bannerz	-loglevelerrorz-ssz.3fz-iz	-frames:v1z-q:v2x   )checkr   )labeltime_secr<   r!   )PROJECTmkdirstrFINAL
subprocessrunappendr!   )timesoutdirframesrH   secoutcmds          r   extract_framesrW      s    11F6<<VZ<3[3[3[F \ \	ce++c+++++d>+gesLLQUVYZ_V`V`almpqwx{|  AD  }E  }E  F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                     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                     |
                    dX          pt          |
          |dYt7          |          t9          t          dCz  dZ          t7          |          d[d\d]d^d_d`                    |          dadbd`                    |          dcddd`                    |          dedf	}t<                              t          j	        |dd          d           t>                              t          j	        t          j        d5|d'         t          t<                    t          t4                    t          t                     dgdd          d           tA          tC          j"        dh          diz   t          j	        |d'         |t          t<                    djdk          z   dlm           |st          dn          d S )oNz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>C   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#haibatrungz
#trungtracz	#trungnhiz#melinhz#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main_duration_sec)master_audio_secmain_story_sec	final_seczscene_*.png)rx   scene_imagesry   u_   Hai Bà Trưng: Tiếng Trống Mê Linh Làm Rung Chuyển Giang Sơn | Việt Sử Kể LạiuF   Hai Bà Trưng - Khởi Nghĩa Mê Linh Và Khí Phách Nước ViệtuG   Trưng Trắc, Trưng Nhị Và Tiếng Trống Đánh Thức Non Sôngu  Cùng Vết Mực Thời Gian kể lại câu chuyện Hai Bà Trưng: từ bóng tối Giao Chỉ dưới ách Đông Hán đến tiếng trống Mê Linh, cuộc khởi nghĩa làm rung chuyển giang sơn và dấu ấn bất tử của khí phách Việt. uG   Hai Bà Trưng - tiếng trống Mê Linh và lời thề giữ nướcu   Câu chuyện về Trưng Trắc, Trưng Nhị và cuộc khởi nghĩa Mê Linh, nơi khí phách người Việt vang lên giữa thời Bắc thuộc.u)   Hai Bà Trưng - tiếng trống Mê Linhu^   Từ Mê Linh, Hai Bà Trưng đã thắp lên ngọn lửa khởi nghĩa chống Đông Hán.)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)#rM   r!   
SystemExitr   PROBErL   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pppG\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  [e  [i  [i  j}  [~  [~  [Q  BE  FP  BQ  BQ  ^c  d  dv;;k'/BYZg6h6hqtuzq{q{||fg #h!hhw//f $"xx00F "B 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   rN   pathlibr   rJ   r   r   rM   r   r   r   r   r   r   r   r   r%   r-   r7   r=   rW   rf   rn   __name__r~   r&   r   <module>r      sS   - - - - - - - - - - - - - - - -      UVV'-,,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&   