
    wFj7                     V   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	dZ
dZdZ e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edz  Zedz  ZdZdZdZd Zd&dZd Zd Z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)Pathz^/data/video-pipeline/Channel-Loi-Co-Nhan/project/13062026-086-Dung-De-Viec-Cu-Lam-Duc-Ngay-Moiz,http://192.168.1.104:8019/render-story-videozhttp://192.168.1.104:8002/probez,http://192.168.1.104:8018/package-audio-safezhttp://192.168.1.104:8018/probez%http://192.168.1.104:8018/blackdetectzN/data/video-pipeline/Channel-Loi-Co-Nhan/data/bgm/Borderless-Aakash-Gandhi.mp3z&output/thumbnails/thumb_9x16_final.pngz)output/intro/intro_audio_with_2s_tail.wavzoutput/intro/intro_audio.wavzoutput/intro/intro.mp4zoutput/main_story.mp4zoutput/final/final_video-yt.mp4z5subtitles/master_subtitles_asr_timing_script_text.srtzaudio/master_narration.wavz$audio/master_narration_timeline.jsonzlogs/strict_worker_rebuild.logg333333?      ?gffffff?c                 2   t          j        d          | z   }t          |d           t          j                            dd           t                              dd          5 }|                    |dz              d d d            d S # 1 swxY w Y   d S )	Nz%F %T T)flushparentsexist_okautf-8encoding
)timestrftimeprintLOGparentmkdiropenwrite)msglinefs      {/data/video-pipeline/Channel-Loi-Co-Nhan/project/13062026-086-Dung-De-Viec-Cu-Lam-Duc-Ngay-Moi/scripts_worker_rebuild_yt.pylogr      s    =""S(D	$dJTD111	#	(	( A	t                 s   &BBB   c                 F   t           j                            | t          j        |d                              d          ddid          }	 t           j                            ||          5 }t          j        |                                	                    d                    cd d d            S # 1 swxY w Y   d S # t           j
        j        $ rJ}|                                	                    dd	          }t          |  d
|j         d|           |d }~ww xY w)NF)ensure_asciir   zContent-Typezapplication/jsonPOST)dataheadersmethodtimeoutignorez HTTP z: )urllibrequestRequestjsondumpsencodeurlopenloadsreaddecodeerror	HTTPErrorRuntimeErrorcode)urlpayloadr$   reqrespebodys          r   	post_jsonr:   &   s]   
.
 
 Ze444;;GDD!34	 !  CB^##C#99 	;T:diikk0099::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;<! B B Bvvxxw11c9999499::ABs=   !C /9B5(C 5B99C <B9=C D ADD c                     t          |                     di                               d          p|                     d          pd          S )Nformatdurationr   )floatget)probes    r   duration_from_proberA   5   sC    8R((,,Z88VEIIj<Q<QVUVWWW    c                 b    t          fd|                     dg           D                       S )Nc              3   J   K   | ]}|                     d           k    V  dS )
codec_typeN)r?   ).0styps     r   	<genexpr>zhas_stream.<locals>.<genexpr>:   s4      LLaquu\""c)LLLLLLrB   streams)anyr?   )r@   rH   s    `r   
has_streamrL   9   s4    LLLL599Y3K3KLLLLLLrB   c                      d t           t          t          t          t          fD             } | r%t          dd                    |           z             d S )Nc                 T    g | ]%}|                                 t          |          &S  )existsstr)rF   ps     r   
<listcomp>z"require_inputs.<locals>.<listcomp>>   s+    UUU!!((**Us1vvUUUrB   zmissing_inputs: z, )THUMBMASTERTIMELINESUBBGM
SystemExitjoin)missings    r   require_inputsr\   =   sU    UUvxcBUUUG B+dii.@.@@AAAB BrB   c                  t   dd l } t          }t          }|                     t	          |          d          5 }|                                }|                    |                                          }d d d            n# 1 swxY w Y   |\  }}}}	}
}t          |t          z            }d|z  |z  |z  }|j
                            dd           |                     t	          |          d          5 }|                    |           |                    ||z              d d d            n# 1 swxY w Y   |S )Nr   rb    Tr   wb)waveINTRO_AUDIO_RAWINTRO_AUDIOr   rQ   	getparams
readframes
getnframesintINTRO_TAIL_SILENCE_SECr   r   	setparamswriteframes)ra   rawoutsrcparamsframesnchswfrnframescomptypecompnametail_framessilencedsts                  r   ensure_intro_audio_tailry   C   s   KKK
C
C	3s88T	"	" 2c 0 0112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 06,CR(Hb1122K#c)B.GJTD111	3s88T	"	" *cf()))* * * * * * * * * * * * * * * Js#   <A>>BB3.D--D14D1c                  F   t                       t          t          dt          t                    id          } t          |           }i dt          j         ddt          t                    t          |d          dgd	t          t                    d
d dt          t                    dddddddddddddddddddddd d!d d d d d ddd"}t          d#           t          t          |d$          }t          t          dt          t                    id          }t          |||d%}t          d&z                      t          j        |dd'(          d)*           t          d+z                      t          j        |dd'(          d)*           |S ),N
input_pathx   r#   job_id_step17_worker_introscenes   
image_pathr=   
audio_pathsubtitle_pathoutput_pathwidth  height 
  fps   crf   presetveryfastburn_subtitlesF	ken_burnsmotion_presetnone
transition	crossfadetransition_duration      ?fade_in        fade_out)timeline_start_sectimeline_end_secaudio_start_secaudio_end_secslice_audioslice_subtitleszSTEP17 worker render intro.mp4r   endpointr5   responser@   z&logs/step17_worker_intro_manifest.json   r   indentr   r   zoutput/intro/intro_probe.json)ry   r:   PROBE_ENDPOINTrQ   rc   rA   PROJECTnamerT   roundINTROr   RENDER_ENDPOINT
write_textr)   r*   )intro_audio_probe	intro_durr5   r   r@   reports         r   render_intro_workerr   S   s3   !.<[AQAQ2R\_```#$566IW\777#e**%	1:M:MNNO 	c+&& 		
 	s5zz 	 	$ 	r 	r 	* 	% 	U 	 	k 	s  	3!" 	C#$ "  /  G2 ()))'4@@@Hn|SZZ&@#NNNE)g8^cddF77CCDJvdirsDtDtDt  @GC  H  H  H..::4:eZ_hi;j;j;ju|:}}}LrB   c                     t          j        t                              d                    d         } t	          t
          dt          t                    id          }t          |          }g }t          |           D ]\  }}|
                    d          p"t          t          dz  |d	          d
z            }t          |
                    dd                    }|dz   t          |           k     r,t          | |dz            
                    d|                    n|}t          t          |
                    dd                    ||z
            t          z   }	|                    |t#          |	d          d           	i dt          j         dd|dt          t                    dt          t&                    dt          t(                    ddddddddd d!d"d#d$d#d%d&d'd(d)dd*dd+ddd d d ddd,d,d-d.d/
}
t+          d0           t	          t,          |
d1          }t	          t
          dt          t(                    id          }t,          |
||d2}t          d3z                      t          j        |d,d45          d           t          d6z                      t          j        |d,d45          d           |S )7Nr   r   itemsr{   r|   r#   r   zimages/scenesscene_idz.pngstartr      r=   r   r   r   r}   _step14_worker_onepass_strictr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Tr   r   storybook_smoothr   r   r   r   r   FzD/data/video-pipeline/Channel-Loi-Co-Nhan/data/logo/logoloiconhan.pngr   )
r   r   r   r   subtitle_time_offset_secsubtitle_advance_secr   r   watermark_logo_pathwatermark_opacityz#STEP14 worker render main_story.mp4r   r   z(logs/step14_worker_onepass_manifest.jsonr   r   zoutput/main_story_probe.json)r)   r-   rV   	read_textr:   r   rQ   rU   rA   	enumerater?   r   r>   lenmaxSCENE_VISUAL_TAIL_SECappendr   r   rW   MAINr   r   r   r*   )timelinemaster_probemaster_durationr   iitemr   r   
next_startholdr5   r   r@   r   s                 r   render_main_workerr   z   sM   z(,,g,>>??HH^lCKK-HRUVVVL),77OFX&& N N4XXl++is7_3LRVWaRbOhOhOh3h/i/i
dhhw,,--MNQRUUXYaUbUbMbMbU8AE?..wHHIIIhw
5*c2233Z%5GHHK``ZU4^^LLMMMMW\@@@& 	c&kk 	S	
 	s4yy 	 	$ 	r 	r 	* 	$ 	T 	+ 	k 	s  	3!" 	C#$ " $' # e 7  G: -...'4@@@Hn|SYY&?MMME)g8^cddF99EEdjQWfktuFvFvFv  BIE  J  J  J--99$*UY^gh:i:i:it{9|||LrB   c                    t           j                            dd           t          t                    t          t
                    t          t                    t          t                     ddddt          ddd	}t          d
           t          t          |d          }|                    d          p*t          t          dt          t                     id          }t          t          t          t                     t          t           j        dz            dd          }t          |           t          |          z   }t          j        dt"          t          t          t                     |t          |          t          |          |z
  t          t                    t          |||d}t           j        dz                      t'          j        |dd          d           t           j        dz                      t'          j        |dd          d           t          dz                      t'          j        |dd          d           |S )NTr   iD  r   i8  i  r   r   )intro_video_pathmain_video_pathbgm_audio_pathoutput_video_pathsample_ratechannelsr   r   
bgm_volumer   r   z(STEP18 worker package intro + main + BGMr   r#   r@   r{   r|   zfinal_blackdetect.log)r{   log_pathcompleted_worker_only)
project_idstatusrender_endpointpackage_endpointr   expected_duration_secfinal_duration_secduration_diff_secbgm_pathr   r@   blackdetectpackage_responsezfinal_video_probe.jsonFr   r   r   zfinal_package_report.jsonz'logs/step18_final_package_manifest.json)FINALr   r   rQ   r   r   rX   
BGM_VOLUMEr   r:   PACKAGE_ENDPOINTr?   PACKAGE_PROBE_ENDPOINTBLACKDETECT_ENDPOINTrA   r   r   r   r   r)   r*   )intro_probe
main_prober5   r   r@   blackexpectedr   s           r   package_final_workerr      s%   	Ltd333JJt99c(( ZZ  G 2333)7DAAAHLL!!oY/EVYZ_V`V`Gakn%o%o%oE*3u::SVW\Wcf}W}S~S~,,  JN  O  O  OE";//2Ej2Q2QQHl)*, ZZ!)1%88077(BHH $ F \,,88EX]fg9h9h9hsz8{{{
\//;;DJv\ajk<l<l<lw~;88DDTZPVejstEuEuEu  AHD  I  I  IMrB   c                    dd l }|                                 }i ddddddddddd	dd
dddddddddddddddddddddi ddddddddddddddddddddd dd!dd"d#d$d#d%d#d&d#d'd#i d(d)d*d)d+d)d,d)d-d)d.d)d/d)d0d)d1d)d2d)d3d)d4d)d5d)d6d)d7d)d8d)d9d)i d:d;d<d;d=d;d>d;d?d;d@d;dAd;dBd;dCd;dDd;dEd;dFdGdHdGdIdGdJdGdKdG}|                                D ]\  }}|                    ||          }dL |                    dM|          D             d dN         S )ONr   u   đd   ár
      àu   ả   ãu   ạu   ău   ắu   ằu   ẳu   ẵu   ặ   âu   ấu   ầu   ẩu   ẫu   ậ   ér8      èu   ẻu   ẽu   ẹ   êu   ếu   ều   ểu   ễu   ệ   ír      ìu   ỉu   ĩu   ị   óo   òu   ỏ   õu   ọ   ôu   ốu   ồu   ổu   ỗu   ộu   ơu   ớu   ờu   ởu   ỡu   ợ   úu   ùu   ủu   ũu   ụu   ưu   ứu   ừu   ửu   ữu   ự   ýyu   ỳu   ỷu   ỹu   ỵc                 8    g | ]}t          |          d k    |S )r   )r   )rF   ws     r   rS   zslug_words.<locals>.<listcomp>   s#    AAA!c!ffqjjAjjjrB   z	[a-z0-9]+   )relowerr   replacefindall)textr  rG   replkvs         r   
slug_wordsr
     sj   III

A U
D  U
T#  U
d3  U
uS  U
c  U
%  U
D  U
USV  U
W\]`  U
afgj  U
kpqt  U
uz{~  U
  @D  EH  U
  IN  OR  U
  SX  Y\  U
  ]b  cf  U
  gl  mp  U
  U
  qv  wz  U
  {  @C  U
  DH  IL  U
  MR  SV  U
  W\  ]`  U
  af  gj  U
  ko  ps  U
  ty  z}  U
  ~C  DG  U
  HM  NQ  U
  RW  X[  U
  \a  be  U
  fj  kn  U
  os  tw  U
  x}  ~A  U
  BF  GJ  U
  KP  QT  U
  U
  U
  UY  Z]  U
  ^b  cf  U
  gl  mp  U
  qu  vy  U
  z  @C  U
  DH  IL  U
  MR  SV  U
  W\  ]`  U
  af  gj  U
  kp  qt  U
  uz  {~  U
  C  DG  U
  HM  NQ  U
  RW  X[  U
  \a  be  U
  fk  lo  U
  pu  vy  U
  U
  U
  z~  B  U
  CG  HK  U
  LQ  RU  U
  VZ  [^  U
  _d  eh  U
  im  nq  U
  rw  x{  U
  |A	  B	E	  U
  F	K	  L	O	  U
  P	U	  V	Y	  U
  Z	_	  `	c	  U
  d	h	  i	l	  U
  m	r	  s	v	  U
  w	|	  }	@
  U
  A
F
  G
J
  U
  K
P
  Q
T
  U
  U
D

  1IIaOOAArzz,22AAA"1"EErB   c                    |                                  ddg}g dg dfg dg dfg dg dfd	d
gg dfddgg dfddgg dfdgg dfddgg dfddgg dfg	}|D ]7\  }}t          fd|D                       r|                    |            n8|                    g d           t          t                              |                    S )Nz
#loiconhanz#xuhuong)u   lời lànhu   miệng nóiu
   lời nóiu   giữ miệng)z#loilanhz	#giumieng	#songtute)u   nhận lỗiu   sửa lỗiu	   xin lỗi)z#nhanloiz#sualoir  )u
   chữ tínu
   bất tínu   giữ lờiu   lời hứa)z#chutinz#giuloiz
#giuchutinu   vợ chồngu
   hôn nhân)z#vochongz#honnhanz#giadinhhanhphucu   cha mẹu   hiếu)z#cha_mez	#dao_hieu#giadinhu
   gia đìnhu   nhà)r  z
#nepnhaxuaz#phuckhiu   nhẫn)z#chunhanz	#nhannhinz#songbinhanu
   lòng thamtham)z	#longthamz#bietduz#giudaou   thiệnu   lòng tốt)z
#songthienz#longtot#phucducc              3       K   | ]}|v V  	d S )NrO   )rF   ntopic_lowers     r   rI   z,build_meaningful_hashtags.<locals>.<genexpr>   s(      11AqK111111rB   )z#daolycuocsongz#trietlycuocsongr  r  z#shorts)r  rK   extendlistdictfromkeys)topic_cleanhashtagskeyword_mapneedlestagsr  s        @r   build_meaningful_hashtagsr     sd   ##%%Kj)H	G	G	GIoIoIop	5	5	57[7[7[\	C	C	CEiEiEij
,	')U)U)UV
h	!E!E!EF
	!G!G!GH
===>
	!D!D!DE
]	#%K%K%KL
K %  111111111 	OOD!!!E	 OO^^^___h''(((rB   c                     dd l } t          dz  }|                                r(t          j        |                    d                    ni }|                    di           }|                    d          p |                    d          pt          j        }|                    d          p|                    d          d         	                                
                    d	          }|                                                    d
          r.|                    dd          d         	                                n|}d}|                    dg           D ]/}|                    d          pd	                                }|r n0|pd| d}	|                     dd|	          	                                }	t          |	          dk    r'|	d d                             dd          d         dz   }	t!          |          }
dd|                                ddddg}| dd                    |
d d                   z   }|||	| d||
|d d!d"d#||	d$z   d                    |
d d                   z   |d d%         d d&d'|id'd| d(d                    |
d d                   z   id'| d(d                    |
d d                   z   id)d*S )+Nr   zscript/scenes.jsonr   r   metadatatitletopic_sentence|.u   lời cổ nhân dạy::r    r   	narrationu   Cổ nhân dạy: u   . Biết giữ lòng bình thản, giữ lời nói cho hiền, đời người tự khắc bớt sóng gió và thêm phúc khí.z\s+ i  i  z...u   lời cổ nhânu   cổ nhân dạyu   đạo lý làm ngườiu   triết lý cuộc sốngu   sống tử tếu   phúc đứcz. 
   uV   . Lời cổ nhân dạy để sống chậm, sống tỉnh và giữ phúc cho mình.	EducationviprivateFz

   )r  descriptionr  categorycaptionz.

)youtubetiktokfacebook_reelsinstagram_reels)r  upload_titler,  short_descriptionr.  r  r  r-  languageprivacy_statusmade_for_kidssocial_meta)r  r   rP   r)   r-   r   r?   r   splitstriprstripr  
startswithsubr   rsplitr  rZ   )r  scenes_pathr    r  r  topicr  first_narrationscener,  r  r  r.  s                r   build_social_metarC     sQ   III00KBMBTBTBVBV^4:k++W+==>>>\^Dxx
B''HHHWFg!6!6F',E\\*++Bu{{3/?/?/BIIKKRRSVWWE49KKMM4L4LMf4g4gr%++c1%%a(..000mrKO(B''   99[117R>>@@ 	E	!  J  &J+  &J  &J  &JK&&k2288::K
;#!$3$'..sA66q9EA(55H 2K4E4E4G4GIc  fA  CU  We  fD   388HSbSM#:#::G" +  D  D  D#!&{V7KchhW_`cac`cWdNeNe7eostvuvtvow  FQ  R  R '*(*Q{*Q*Q*QTWT\T\]efigifi]jTkTk*kl )k+@+@+@388HUXVXUXMCZCZ+Z[	
 
  rB   c                  n   t                               dd           t                       t                      } t	          | d          rt	          | d          st          d          t                      }t	          |d          rt	          |d          st          d          t          | |          }t          dz  }|	                                r(t          j        |                    d                    ni }|                    t                                 |                    d	t          t                     t          t"                    |d
         t$          t&          ddd           |                    t          j        |dd          d           t+          d|d
         d           d S )Nr$  r   r   audiovideo#worker_intro_missing_audio_or_video"worker_main_missing_audio_or_videozoutput/info.json*completed_worker_only_needs_final_human_qar   FT)r   
main_storyfinal_videoduration_secr   r   host_ffmpeg_render_usedworker_only_rebuildr   r   z,COMPLETE worker-only rebuild final_duration=z.3f)r   r   r\   r   rL   rY   r   r   r   rP   r)   r-   r   updaterC  rQ   r   r   r   r   r*   r   )r   r   r   	info_pathinfos        r   mainrR    s   NN2N(((%''Kk7++ @:k73S3S @>???#%%Jj'** ?*Z2Q2Q ?=>>>!+z::F,,I@I@P@P@R@RZ4:i))7);;<<<XZDKK!##$$$KK>$ii5zz34*,#(#	 	 	 	 	 DuQGGGRYZZZYv>R7SYYYZZZZZrB   __main__)r   ))r)   r   urllib.errorr&   urllib.requestpathlibr   r   r   r   r   r   r   rX   rT   rc   rb   r   r   r   rW   rU   rV   r   r   rh   r   r   r:   rA   rL   r\   ry   r   r   r   r
  r  rC  rR  __name__rO   rB   r   <module>rX     s                  
$o
p
p@2A : > 
d[\\::CC::**((33GG	/	/;;00
    B B B BX X XM M MB B B   $ $ $N. . .b& & &TF F F) ) )*& & &P[ [ [6 zDFFFFF rB   