§
    „1Ëjh+  ã                   ó�  — 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mZ ddlm	Z	m
Z
mZmZ ej        dk    rC	 ej                             d¬¦  «         ej                             d¬¦  «         n# e$ r Y nw xY w ee¦  «                             ¦   «         j        j        Zedz  Zed	z  d
z  Ze                     dd¬¦  «         edz  Zg d¢Zedz  edz  gZdede
e         fd„Zd4dedede	eeeef                  fd„Z 	 	 	 	 	 	 	 d5dededededede
e         de
e         defd„Z!e"d k    �r ej#        d!¬"¦  «        Z$e$ %                    d#d$d%¬&¦  «         e$ %                    d'd$d(¬&¦  «         e$ %                    d)edd*¬+¦  «         e$ %                    d,edd-¬+¦  «         e$ %                    d.edd/¬+¦  «         e$ %                    d0d$d1¬&¦  «         e$ &                    ¦   «         Z' e!de'j(        e'j)        e'j*        e'j+        e'j,        e'j-        ¬2¦  «        Z.e.se'j+        se'j*        s ej/        d3¦  «          ej/        d¦  «         dS dS )6u"  
=============================================================================
KIEU STORY â€” EP01 GRAND FEATURE MASTER ASSEMBLER (25-30 PHÃšT)
=============================================================================
GhÃ©p ná»‘i toÃ n bá»™ 15 phÃ¢n cáº£nh (C01 - C15: 188 shots) thÃ nh báº£n Master hoÃ n chá»‰nh
thá»�i lÆ°á»£ng 25-30 phÃºt (Full Feature 188 Shots) chuáº©n Ä‘iá»‡n áº£nh.
TuÃ¢n thá»§ Directive 2026-10-08T05:38:03Z vá»� quy táº¯c versioning _v*.
=============================================================================
é    N)ÚPath)ÚListÚOptionalÚTupleÚDictÚwin32zutf-8)ÚencodingÚ
06_ExportsÚ	04_AssetsÚvideosT)ÚparentsÚexist_okz.thap_ngu_nien_ep01_grand_feature_master_v1.mp4)Úep01_scene01Úep01_scene02Úep01_scene03Úep01_scene04Úep01_scene05Úep01_scene06Úep01_scene07Úep01_scene08Úep01_scene09Úep01_scene10Úep01_scene11Úep01_scene12Úep01_scene13Úep01_scene14Úep01_scene15z$thap_ngu_nien_intro_complete_20s.mp4z+prologue_hoai_niem_198x_to_gia_tinh_40s.mp4Úscene_idÚreturnc                 ó¨  — g }t                                | › d�¦  «        D ]H}|                     ¦   «         r2|                     ¦   «         j        dk    r|                     |¦  «         ŒIt                                | › d�¦  «        D ]H}|                     ¦   «         r2|                     ¦   «         j        dk    r|                     |¦  «         ŒIt                                | › d�¦  «        D ]H}|                     ¦   «         r2|                     ¦   «         j        dk    r|                     |¦  «         ŒIt                               | › d�¦  «        D ]H}|                     ¦   «         r2|                     ¦   «         j        dk    r|                     |¦  «         ŒI|r*dt          fd„}|                     |d¬	¦  «         |d
         S t           | › d�z  S )uÅ  
    TÃ¬m kiáº¿m file master phÃ¢n cáº£nh theo thá»© tá»± Æ°u tiÃªn:
    1. 06_Exports/<scene_id>_master_audio_v*.mp4 (phiÃªn báº£n cao nháº¥t)
    2. 06_Exports/<scene_id>_cinematic_master_v*.mp4 (phiÃªn báº£n cao nháº¥t)
    3. 06_Exports/<scene_id>_master_audio.mp4
    4. 06_Exports/<scene_id>_cinematic_master.mp4
    5. 06_Exports/<scene_id>_master_v*.mp4
    6. 06_Exports/<scene_id>_master.mp4
    7. 04_Assets/videos/<scene_id>*master*.mp4
    z_master_audio*.mp4iè  z_cinematic_master*.mp4z_master*.mp4z*master*.mp4Úpc                 óH  — t          j        d| j        t           j        ¦  «        }|r"t	          |                     d¦  «        ¦  «        nd}| j                             ¦   «         }d|v rd}nd|v rd}n| j        t          k    rd}nd}|||  	                    ¦   «         j
        fS )	Nz_v(\d+)\.mp4$é   r   Úmaster_audioé   Úcinematic_masteré   é   )ÚreÚsearchÚnameÚ
IGNORECASEÚintÚgroupÚlowerÚparentÚEXPORTS_DIRÚstatÚst_mtime)r!   ÚmÚversion_numÚlnameÚ
type_scores        úEC:\Projects\KieuStory\05_Production_Pipeline\assemble_ep01_feature.pyÚsort_keyz$resolve_scene_part.<locals>.sort_keya   sœ   € Ý”	Ð*¨A¬FµB´MÑBÔBˆAØ-.Ð5�#˜aŸgšg a™jœj™/œ/˜/°AˆKØ”F—L’L‘N”NˆEØ Ð&Ð&Ø�
�
Ø# uÐ,Ð,Ø�
�
Ø”�[Ò(Ð(Ø�
�
à�
Ø ¨Q¯VªV©X¬XÔ->Ð?Ð?ó    T)ÚkeyÚreverser   z_master_audio_v1.mp4)	r1   ÚglobÚis_filer2   Úst_sizeÚappendÚ
VIDEOS_DIRr   Úsort)r   Ú
candidatesr!   r9   s       r8   Úresolve_scene_partrD   ?   sï  € ð €Jõ ×Ò Ð=Ð=Ð=Ñ>Ô>ð !ð !ˆØ�9Š9‰;Œ;ð 	!˜1Ÿ6š6™8œ8Ô+¨dÒ2Ð2Ø×Ò˜aÑ Ô Ð øõ ×Ò ÐAÐAÐAÑBÔBð !ð !ˆØ�9Š9‰;Œ;ð 	!˜1Ÿ6š6™8œ8Ô+¨dÒ2Ð2Ø×Ò˜aÑ Ô Ð øõ ×Ò Ð7Ð7Ð7Ñ8Ô8ð !ð !ˆØ�9Š9‰;Œ;ð 	!˜1Ÿ6š6™8œ8Ô+¨dÒ2Ð2Ø×Ò˜aÑ Ô Ð øõ �_Š_ Ð6Ð6Ð6Ñ7Ô7ð !ð !ˆØ�9Š9‰;Œ;ð 	!˜1Ÿ6š6™8œ8Ô+¨dÒ2Ð2Ø×Ò˜aÑ Ô Ð øàð ð	@�ð 	@ð 	@ð 	@ð 	@ð 	�Š˜H¨dˆÑ3Ô3Ð3Ø˜!Œ}Ðõ ˜HÐ:Ð:Ð:Ñ:Ð:r:   é
   FÚ
num_scenesÚinclude_introc                 ó8  — g }|r9t           D ]1}|                     |j        ||                     ¦   «         f¦  «         Œ2| rt          d| …         nt          }|D ]A}t          |¦  «        }|r|                     ¦   «         nd}|                     |||f¦  «         ŒB|S )u  
    Tráº£ vá»� danh sÃ¡ch cÃ¡c thÃ nh pháº§n cáº¥u thÃ nh EP01 Feature Cut:
    - num_scenes = 10: Chiáº¿n dá»‹ch tÃ¡i sáº£n xuáº¥t 10 cáº£nh (Scenes 01-10, 140 shots = 23m20s).
    - num_scenes = 15: Grand Feature 15 cáº£nh (188 shots = 25-30 phÃºt).
    NF)ÚINTRO_PARTSr@   ÚstemÚexistsÚEP01_SCENE_IDSrD   )rF   rG   Úresolved_partsÚ
intro_pathÚtarget_scenesÚsc_idÚtarget_pathrK   s           r8   Úget_ep01_assembly_partsrR   v   sÆ   € ð €Nð ð VÝ%ð 	Vð 	VˆJØ×!Ò! :¤?°JÀ
×@QÒ@QÑ@SÔ@SÐ"TÑUÔUÐUÐUð 4>ÐQ•N ; J ;Ô/Ð/Å>€MØð <ð <ˆÝ(¨Ñ/Ô/ˆØ)4Ð?�×#Ò#Ñ%Ô%Ð%¸%ˆØ×Ò˜u k°6Ð:Ñ;Ô;Ð;Ð;àÐr:   Úep01ÚepÚdry_runÚcheckÚoutput_pathÚversionc           
      ó‚
  — t          ||¬¦  «        }|r|                     d¦  «        r|nd|pd› �}|rt          |¦  «        }	n(|dk    rt          | › d|› d�z  }	nt          d| › d|› d�z  }	t	          d	¦  «         t	          d
|                      ¦   «         › d�¦  «         t	          d|› dt          |¦  «        › d�¦  «         t	          d|	› �¦  «         t	          d	¦  «         g }
g }|D ]]\  }}}|rdnd}t	          d|› d|d›d|r|j        nd› �¦  «         |r|                     |¦  «         ŒF|
                     ||f¦  «         Œ^t	          d¦  «         t	          dt          |¦  «        › dt          |¦  «        › dt          |
¦  «        › �¦  «         |rt	          d¦  «         dS |r•t	          d¦  «         t	          dt          |¦  «        › d�¦  «         d  	                    d!„ |d"d#…         D ¦   «         ¦  «        d$t          |¦  «        › d%�z   }t	          d&|› d'|	j        › �¦  «         t	          d(¦  «         dS |
rNt	          d)t          |
¦  «        › d*�¦  «         |
D ]\  }}t	          d+|› d,|› �¦  «         Œt	          d-¦  «         d.S 	 d/d0l
m}m}  |¦   «         }n# t          $ r d1}d"}Y nw xY wg }g }g }t          |¦  «        D ]a\  }}|                     d2t!          |¦  «        g¦  «         |                     d3|› d4|› d5�¦  «         |                     d6|› d7|› d8�¦  «         Œbt          |¦  «        }d9 	                    |¦  «        › d9 	                    |¦  «        › d:|› d;�}|	j        |	j        › d<|	j        › �z  }|d=g|¢d>‘|‘d?‘d@‘d?‘dA‘dB‘dC‘dD‘dE‘dF‘dG‘dH‘dI‘dJ‘dK‘dL‘dM‘dN‘dO‘t!          |¦  «        ‘}t	          dP|› dQ�¦  «         t)          j        |dd¬R¦  «        }|j        d/k    �r.|                     ¦   «         �r|�¦ |¦   «         }|                     t!          |¦  «        t!          |	¦  «        dSdTdUd¬V¦  «        }|rO|	                     ¦   «         r;|                     ¦   «         r&	 |                     ¦   «          n<# t4          $ r Y n0w xY wn+|                     |	¦  «         n|                     |	¦  «         |	                     ¦   «         j        dWz  }t	          dX|› dY�¦  «         t	          dZ|	j        › �¦  «         t	          d[|d\›d]�¦  «         dS t	          d^|j        › �¦  «         d.S )_u´   
    HÃ m thá»±c thi ghÃ©p ná»‘i cÃ¡c phÃ¢n cáº£nh thÃ nh Feature Master hoÃ n chá»‰nh.
    Há»— trá»£ 10 cáº£nh chiáº¿n dá»‹ch (Scenes 01-10) hoáº·c 15 cáº£nh (Full Feature).
    )rF   rG   Úvr#   rE   Ú_full_feature_master_z.mp4Úthap_ngu_nien_Ú_grand_feature_master_zP================================================================================u>   ðŸŽ¬ KIEU STORY AI CINEMA â€” GRAND FEATURE MASTER ASSEMBLER (ú)u      Quy mÃ´ phÃ¢n cáº£nh: u	    Cáº£nh (u    thÃ nh pháº§n)u      Táº­p tin Ä‘Ã­ch: u   âœ“u   âœ—z  [z] z<25z -> zN/AzP--------------------------------------------------------------------------------u   Tá»•ng thÃ nh pháº§n: u    | Sáºµn sÃ ng: u    | Thiáº¿u: uL   [âœ“] Cháº¿ Ä‘á»™ kiá»ƒm tra (--check): BÃ¡o cÃ¡o tráº¡ng thÃ¡i hoÃ n táº¥t.Tu)   
[*] Cháº¿ Ä‘á»™ mÃ´ phá»�ng (--dry-run):u+       ThÃ nh pháº§n dá»± kiáº¿n ghÃ©p ná»‘i: z fileú c                 ó*   — g | ]\  }}}d |j         › �‘ŒS )z-i )r+   )Ú.0Ú_r!   s      r8   ú
<listcomp>z*assemble_grand_feature.<locals>.<listcomp>¿   s&   € Ð!OÐ!OÐ!O±W°Q¸¸1 .¨¬ . .Ð!OÐ!OÐ!Or:   Nr'   z ... [z scenes]u#       Lá»‡nh FFmpeg máº«u: ffmpeg -y z -filter_complex ... u   [âœ“] MÃ´ phá»�ng thÃ nh cÃ´ng.u   
[!] Cáº£nh bÃ¡o: CÃ³ u>    thÃ nh pháº§n chÆ°a Ä‘Æ°á»£c render hoáº·c chÆ°a tá»“n táº¡i:z    - z: uv   [!] KhÃ´ng thá»ƒ ghÃ©p ná»‘i toÃ n váº¹n khi thiáº¿u cáº£nh. Vui lÃ²ng render trÆ°á»›c khi xuáº¥t báº£n chÃ­nh thá»©c.Fr   )Ú
get_ffmpegÚAudioContinuityEngineÚffmpegz-iú[z:v:0]format=yuv420p,setsar=1[vz];z[vz][z:a:0]Ú z	concat=n=z:v=1:a=1[v][a]Ú_rawz-yz-filter_complexz-mapz[v]z[a]z-c:vÚlibx264z-crfÚ18z-presetÚslowz-pix_fmtÚyuv420pz-c:aÚaacz-b:aÚ192kz-arÚ48000u"   
[*] Ä�ang ghÃ©p ná»‘i toÃ n bá»™ u'    thÃ nh pháº§n thÃ nh Feature Master...)Úcapture_outputÚtextg      ,Àg      ð¿g      "@)Útarget_lufsÚ	target_tpÚ
target_lraÚtwo_passi   u8   
[âœ“] GHÃ‰P THÃ€NH CÃ”NG GRAND FEATURE MASTER Táº¬P 1 (u	    Cáº£nh)!z
    File: u       Dung lÆ°á»£ng: z.2fz MBu   [!] Lá»—i khi ghÃ©p ná»‘i:
)rR   Ú
startswithr   r1   ÚprintÚupperÚlenr+   r@   ÚjoinÚaudio_continuity_enginerd   re   ÚImportErrorÚ	enumerateÚextendÚstrr0   rJ   ÚsuffixÚ
subprocessÚrunÚ
returncoderK   Únormalize_loudnessÚunlinkÚ	ExceptionÚrenamer2   r?   Ústderr) rT   rF   rG   rU   rV   rW   rX   Ú
parts_infoÚv_tagÚout_fileÚmissingÚ	availableÚtagr!   rK   Ústatus_iconÚsample_inputsrd   re   Ú
ffmpeg_exeÚinputsÚfilter_partsÚformat_filtersÚiÚnÚconcat_filterÚ
raw_targetÚcmdÚresÚengineÚnorm_okÚsize_mbs                                    r8   Úassemble_grand_featurerŸ   �   sC  € õ )°JÈmÐ\Ñ\Ô\€Jð  ÐT G×$6Ò$6°sÑ$;Ô$;ÐTˆGˆGÐBTÀgÀlÐQRÐBTÐBT€EØð XÝ˜Ñ$Ô$ˆˆØ	�rÒ	Ð	Ý BÐ!HÐ!H¸UÐ!HÐ!HÐ!HÑHˆˆåÐ!W°"Ð!WÐ!WÈEÐ!WÐ!WÐ!WÑWˆå	ˆ(�O„O€OÝ	Ð
XÈ2Ï8Ê8É:Ì:Ð
XÐ
XÐ
XÑYÔYÐYÝ	Ð
[ jÐ
[Ð
[½3¸z¹?¼?Ð
[Ð
[Ð
[Ñ\Ô\Ð\Ý	Ð
, (Ð
,Ð
,Ñ-Ô-Ð-Ý	ˆ(�O„O€Oà€GØ€IØ$ð %ð %‰ˆˆQ�Ø%Ð0�e�e¨5ˆÝÐH�KÐHÐH 3ÐHÐHÐH¸!Ð0F°´°ÀÐHÐHÑIÔIÐIØð 	%Ø×Ò˜QÑÔÐÐà�NŠN˜C ˜8Ñ$Ô$Ð$Ð$å	ˆ(�O„O€OÝ	Ð
n¥3 z¡?¤?Ð
nÐ
nÅCÈ	ÁNÄNÐ
nÐ
nÕ`cÐdkÑ`lÔ`lÐ
nÐ
nÑoÔoÐoàð ÝÐ\Ñ]Ô]Ð]Øˆtàð ÝÐ:Ñ;Ô;Ð;ÝÐR½CÀ
¹O¼OÐRÐRÐRÑSÔSÐSØŸšÐ!OÐ!OÀ
È2ÈAÈ2ÄÐ!OÑ!OÔ!OÑPÔPÐSuÕ\_Ð`jÑ\kÔ\kÐSuÐSuÐSuÑuˆÝÐg°MÐgÐgÐX`ÔXeÐgÐgÑhÔhÐhÝÐ/Ñ0Ô0Ð0Øˆtàð ÝÐt­¨G©¬ÐtÐtÐtÑuÔuÐuØð 	'ð 	'‰FˆC�ÝÐ%˜3Ð%Ð% !Ð%Ð%Ñ&Ô&Ð&Ð&Ýð  Gñ  	Hô  	Hð  	HØˆuð%ØMÐMÐMÐMÐMÐMÐMÐMØ�Z‘\”\ˆ
ˆ
øÝð %ð %ð %Øˆ
Ø $ÐÐÐð%øøøð €FØ€LØ€NÝ˜)Ñ$Ô$ð 0ð 0‰ˆˆ1Ø�Š�t�S ™VœV�nÑ%Ô%Ð%Ø×ÒÐH !ÐHÐHÀ1ÐHÐHÐHÑIÔIÐIØ×ÒÐ. Ð.Ð. aÐ.Ð.Ð.Ñ/Ô/Ð/Ð/åˆI‰Œ€AØ—w’w˜~Ñ.Ô.Ða°·²¸Ñ0EÔ0EÐaÐaÐPQÐaÐaÐa€MØ” h¤mÐ#JÐ#J¸¼Ð#JÐ#JÑJ€Jð 	�Dðà	ðð 	ðð )ðð 	ð	ð ð	ð
 	ðð
 ðð 	ðð ðð 	ðð ðð 	ðð ðð 	ðð ðð 	ðð ðð 	ðð ðð 	ðð ðõ 	ˆJ‰Œð€Cõ  
Ð
Z°Ð
ZÐ
ZÐ
ZÑ[Ô[Ð[Ý
Œ.˜¨T¸Ð
=Ñ
=Ô
=€Cà
„~˜ÒÑ˜z×0Ò0Ñ2Ô2Ñà Ð,Ø*Ð*Ñ,Ô,ˆFØ×/Ò/Ý�J‘”Ý�H‘”Ø!ØØØð 0ñ ô ˆGð ð ,˜8Ÿ?š?Ñ,Ô,ð ,Ø×$Ò$Ñ&Ô&ð ðØ"×)Ò)Ñ+Ô+Ð+Ð+øÝ$ð ð ð Ø˜ðøøøðð ×!Ò! (Ñ+Ô+Ð+Ð+à×Ò˜hÑ'Ô'Ð'à—-’-‘/”/Ô)¨[Ñ9ˆÝÐ_È*Ð_Ð_Ð_Ñ`Ô`Ð`ÝÐ*˜8œ=Ð*Ð*Ñ+Ô+Ð+ÝÐ4 GÐ4Ð4Ð4Ð4Ñ5Ô5Ð5ØˆtåÐ9¨S¬ZÐ9Ð9Ñ:Ô:Ð:Øˆus$   ÊJ$ Ê$J5Ê4J5Ñ;R Ò
RÒRÚ__main__uc   GhÃ©p ná»‘i cÃ¡c phÃ¢n cáº£nh EP01 thÃ nh Grand Feature Master 25-30 phÃºt (Full Feature 188 Shots))Údescriptionz--checkÚ
store_trueuL   Kiá»ƒm tra tráº¡ng thÃ¡i cÃ¡c phÃ¢n cáº£nh mÃ  khÃ´ng thá»±c thi ghÃ©p ná»‘i)ÚactionÚhelpz	--dry-runu<   MÃ´ phá»�ng quy trÃ¬nh ghÃ©p ná»‘i vÃ  hiá»ƒn thá»‹ pipelinez--outputu%   Ä�Æ°á»�ng dáº«n file MP4 xuáº¥t báº£n)ÚtypeÚdefaultr¤   z	--versionu*   PhiÃªn báº£n versioning (vÃ­ dá»¥: v1, v2)z--scenesuY   Sá»‘ lÆ°á»£ng phÃ¢n cáº£nh cáº§n ghÃ©p (10 cho chiáº¿n dá»‹ch Ep01, 15 cho Grand Feature)z--include-introu   KÃ¨m theo intro vÃ  prologue)rT   rF   rG   rU   rV   rW   rX   r#   )rE   F)rS   rE   FFFNN)0Ú__doc__ÚosÚsysr)   Úargparser‚   Úpathlibr   Útypingr   r   r   r   ÚplatformÚstdoutÚreconfigurer‰   r‡   Ú__file__Úresolver0   ÚBASE_DIRr1   rA   ÚmkdirÚoutput_masterrL   rI   r€   rD   r-   ÚboolrR   rŸ   Ú__name__ÚArgumentParserÚparserÚadd_argumentÚ
parse_argsÚargsÚscenesrG   rU   rV   ÚoutputrX   ÚsuccessÚexit© r:   r8   ú<module>rÁ      sì  ððð ð 
€	€	€	Ø 
€
€
€
Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .ð „<�7ÒÐðØŒ
×Ò¨ÐÑ0Ô0Ð0ØŒ
×Ò¨ÐÑ0Ô0Ð0Ð0øØð ð ð Øˆðøøøð ˆ4�‰>Œ>×!Ò!Ñ#Ô#Ô*Ô1€Ø˜Ñ%€Ø˜Ñ# hÑ.€
Ø × Ò ˜$¨Ð Ñ .Ô .Ð .ð ÐNÑN€ðð ð €ð( Ð7Ñ7ØÐ>Ñ>ð€ð4; ð 4;¨°$¬ð 4;ð 4;ð 4;ð 4;ðnð ¨ð Àð ÐRVÐW\Ð]`ÐbfÐhlÐ]lÔWmÔRnð ð ð ð ð0 ØØØØØ!%Ø!ðCð CØðCàðCð ðCð ð	Cð
 ðCð ˜#”ðCð �cŒ]ðCð 
ðCð Cð Cð CðL ˆzÒÑØ$ˆXÔ$Øyðñ ô €Fð ×Ò˜	¨,ð  >LÐñ  Mô  Mð  MØ
×Ò˜¨LÐ?}ÐÑ~Ô~Ð~Ø
×Ò˜
¨°dÐAhÐÑiÔiÐiØ
×Ò˜¨#°tÐBnÐÑoÔoÐoØ
×Ò˜
¨°bð  @[Ðñ  \ô  \ð  \Ø
×ÒÐ)°,ÐEcÐÑdÔdÐdà×ÒÑÔ€Dà$Ð$ØØ”;ØÔ(Ø”ØŒjØ”KØ”ðñ ô €Gð ð ˜DœJð ¨$¬,ð ØˆŒ�‰ŒˆØ€C„HˆQ�K„K€K€K€Kð3 Ðs   µ6A, Á,A4Á3A4