
    [Vj"                        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d Zd Zedk    r e             dS dS )    N)PathzH/data/video-pipeline/Youtube-Video-Maker/Project/003-Nha-Han-202-TCN-220z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        DProject/003-Nha-Han-202-TCN-220/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-   r5   s    `r   hasr9      s3    cOOOO"&&2:N:NOOOOOOr&   c                 ^    t          d |                     dg           D             i           S )Nc              3   L   K   | ]}|                     d           dk    |V   dS )r1   videoNr2   )r3   r4   s     r   r6   zvideo_stream.<locals>.<genexpr>   s9      "c"caeeLFYFY[bFbFb1FbFbFbFb"c"cr&   r7   )nextr+   r,   s    r   video_streamr>      s/    T"c"cbffYr.B.B"c"c"ceghhhr&   c                 v   t          j        ddddddddd	t          |           g
d
d          }t          j        |                              d          pi gd         }t          |                    d          pd          t          |                    d          pd          |                    d          fS )Nffprobez-verrorz-select_streamszv:0z-show_entriesz(stream=width,height,display_aspect_ratioz-ofr   T<   )textr   r7   r   widthheightdisplay_aspect_ratio)
subprocesscheck_outputstrr   r   r+   int)pathoutr4   s      r   ffprobe_dimensionsrM      s    48I%P_  aK  LQ  RX  Y\  ]a  Yb  Yb  !c  jn  xz  	{  	{  	{Cz#9%%-"q1AquuW~~"##Sx)=A%>%>F\@]@]]]r&   c                     t          |                                           r<t          t          t          |                               |                              ndS )Nr   )r   r!   lenlistglob)rK   rQ   s     r   count_filesrR      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	-loglevelrA   z-ssz.3fz-iz	-frames:v1z-q:v2x   )checkr   )labeltime_secrK   r!   )PROJECTmkdirrI   FINALrG   runappendr!   )timesoutdirframesr\   secrL   cmds          r   extract_framesrh      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:)r^   r"   
splitlineslower
startswithsplitstriptitle)txtseriesrr   linelows        r   
parse_metarw   )   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'          |           }t)          |                    d"          pd          }t)          |                    d#          pd          }|                    d$          }|r|st+          t                     \  }}}t                                           o!t                                           j        d%k    t1          | d&          t1          | d'          ||||d(k    o|d)k    t2                                          t4                                          |                    d*d          |                    d*d          dk    t7          d+ |D                       |                    d,          d-v |                    d.i                               d/          d0d1}t7          |d2         |d3         |d4         |d5         |d6         |d7         |d8         |d9         |d:         g	          }t          j        d;||rd<nd=t          t                     |||||d>gd?}t:                              t          j	        |dd          d           g d@}t          j        ||||d,         i dAt          t          dBz            dCt          t          dDz            dEt          t          dz            dFt          t          dGz            dHt          t          dIz            dJt          t2                    t          t4                    dKdLt          t          dMz            dNt          t          dOz            dPt          t          dQz            dRt          t          dSz            dTt          t          d z            dUt          t          dVz            dWt          t          dXz            dt          t          dYz            dZt          t                     d[t          t:                    d\t          t                    |	                    d]          p$t          t          t          dz  i                     |
                    d^          pt          |
          |d_t=          |          t?          t          dIz  d`          t=          |          da|| db| | dcdd| de| dfdg|dh| di| dfdg|| djdgdkdl	}t@                              t          j	        |dd          d           tB                              t          j	        t          j        d;|d,         t          t@                    t          t:                    t          t                     dmdd          d           tE          tG          j$        dn          doz   t          j	        |d,         |t          t@                    dpdq          z   drs           |st          dt          d S )uNzmissing final
input_pathrZ   F   )r   indentr   r   z%output/final/final_qa_blackdetect.log)ry   log_pathr   input_probesintrog3333330@maing~jtͅ@r      intro_transitionrl   
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partsrD   rE   rF   i  audior<   i  i8  event_countc              3   &   K   | ]}|d          V  dS )r!   N )r3   fs     r   r6   zmain.<locals>.<genexpr>N   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final_widthfinal_heightfinal_display_aspect_ratioresolution_16x9_1080pthumbnail_16x9_existsthumbnail_9x16_existsblack_event_countblackdetect_clearqa_frames_extractedpackage_completedr   decisionr   r   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#thanhcattuhanz#genghiskhanz#mongolz#lichsuthegioiz#lichsuz#worldhistorysource_scriptrj   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)r   scene_imagesr   z | u    - Vết Mực Thời Gianu)   Cùng Vết Mực Thời Gian khám phá u%   . Một câu chuyện thuộc series .zC#vetmucthoigian #lichsu #lichsuvietnam #lichsuthegioi #worldhistoryu   Câu chuyện u   , thuộc series u    | Vết Mực Thời Gian.)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   rt   rr   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)%r`   r!   
SystemExitr   PROBErI   FINAL_PROBE
write_textr   r   r%   
PKG_REPORTBLACKr^   r.   r+   maxrh   rw   r>   rJ   rM   statst_sizer9   THUMB16THUMB9allname	QA_REPORTrO   rR   INFOMANIFESTprinttimestrftime)r-   pkgblacktotal	intro_durmain_duroutro_startrc   re   master_probe
main_prober   r   rt   rr   vsr   r   	final_darr   r   qayt_tagsr   s                           r   r   r   2   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BBBFF7OO(q))KBFF8<L<L<QPQ8R8R<^`^d^de{^|^|T] Il I/A%/H/H,\9||~~C%**,,*>t*C7OOBw![d!,d!2!I|T7I ' 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F  dG  HR  Sf  Hg  hr  sH  hI  JT  Uh  Ji  j  k  k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tttG\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{||$"'44F44"'CCC $Eu  $E  $E  |B  $E  $E  $Ed#$VU$V$VV$V$V$V e!%*"G"G"Gc
 

 
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   rG   pathlibr   r^   r   r   r`   r   r   r   r   r   r   r   r   r%   r.   r9   r>   rM   rR   rh   rw   r   __name__r   r&   r   <module>r     st   - - - - - - - - - - - - - - - -      WXX'-,,99;;

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