§
    v™Äj_  ã                   óx  — 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ZddlZddlm	Z	 ej
                             d¦  «        rC	 ej                             d¬¦  «         ej                             d¬¦  «         n# e$ r Y nw xY wdZdZdZd	Zd
„ Zdefd„Z	 	 	 	 	 	 d0dedededededededefd„Zedk    �r ej        d¬¦  «        Ze                     dd¬¦  «         e                     d d!¬¦  «         e                     d"edd#¬$¦  «         e                     d%edd&¬$¦  «         e                     d'ed(d)¬$¦  «         e                     d*dd+¬,¦  «         e                     d-dd.¬,¦  «         e                     ¦   «         Z eej         ej!        ej"        ej#        ej$        ej%        ej&        ¬/¦  «         dS dS )1z|
AI Video 4K Upscaler Module for Historical Series
Optimized for NVIDIA GTX 1660 Super (6GB VRAM) & Real-ESRGAN NCNN Vulkan
é    N)ÚPathÚwinzutf-8)Úencodingz.C:\Projects\Historical\venv\Scripts\ffmpeg.exez.C:\tools\realesrgan\realesrgan-ncnn-vulkan.exezC:\tools\realesrganc                  óò   — t           j                             t          ¦  «        st	          dt          › �¦  «        ‚t           j                             t
          ¦  «        st	          dt
          › �¦  «        ‚d S )NzFFmpeg not found at zReal-ESRGAN not found at )ÚosÚpathÚexistsÚ
FFMPEG_EXEÚFileNotFoundErrorÚREAL_ESRGAN_EXE© ó    ú(C:\Projects\Historical\video_upscaler.pyÚcheck_environmentr      sj   € ÝŒ7�>Š>�*Ñ%Ô%ð EÝÐ CµzÐ CÐ CÑDÔDÐDÝŒ7�>Š>�/Ñ*Ô*ð OÝÐ M½OÐ MÐ MÑNÔNÐNðOð Or   Ú
video_pathc                 ó´  — t           d| g}t          j        |t          j        t          j        d¬¦  «        }d}d}|j                             ¦   «         D ]�}d|v rqd|v rmd|v ri|                     d	¦  «        }|D ]Q}d|v rK	 t          |                     ¦   «                              ¦   «         d
         ¦  «        }ŒA# t          $ r Y ŒMw xY wŒRd|v rd|v rd}Œ‚||fS )Nú-iT)ÚstderrÚstdoutÚtextg      8@FzStream #zVideo:Úfpsú,r   zAudio:)
r
   Ú
subprocessÚrunÚPIPEr   Ú
splitlinesÚsplitÚfloatÚstripÚ
ValueError)r   ÚcmdÚresr   Ú	has_audioÚlineÚpartsÚps           r   Úget_video_metar'   "   s  € å�D˜*ð€Cõ Œ.˜¥Z¤_½Z¼_ÐSWÐ
XÑ
XÔ
X€CØ
€CØ€Ià”
×%Ò%Ñ'Ô'ð ð ˆØ˜ÐÐ (¨dÐ"2Ð"2Ø˜ˆ}ˆ}ØŸ
š
 3™œ�Øð !ð !�AØ �z�zð!Ý"'¨¯ª©	¬	¯ªÑ(9Ô(9¸!Ô(<Ñ"=Ô"=˜C˜CøÝ)ð !ð !ð !Ø ˜Dð!øøøð "ð
 ˜ÐÐ (¨dÐ"2Ð"2ØˆIøà�	ˆ>Ðs   Â 9B:Â:
CÃCé   úrealesrgan-x4plusÚ	3840x2160é   Úinput_videoÚoutput_videoÚ	start_secÚduration_secÚ	tile_sizeÚ
model_nameÚ
target_resÚcqc                 óJ  — t          ¦   «          t          | ¦  «                             ¦   «         }t          |¦  «                             ¦   «         }	|                     ¦   «         st	          d|› �¦  «        ‚t          j        ¦   «         }
|j        dt          t          j        ¦   «         ¦  «        › �z  }|dz  }|dz  }|dz  }|                     ¦   «         rt          j	        |¦  «         | 
                    dd¬¦  «         | 
                    dd¬¦  «         t          d¦  «         t          d	|j        › �¦  «         t          d
|	j        › �¦  «         t          d|› d|› d�¦  «         	 t          t          |¦  «        ¦  «        \  }}t          d|› d|› �¦  «         |ràt          d¦  «         t          dg}|dk    r$|                     dt          |¦  «        g¦  «         |                     dt          |¦  «        g¦  «         |r$|                     dt          |¦  «        g¦  «         |                     dddddt          |¦  «        g¦  «         t#          j        |dt"          j        t"          j        ¬¦  «         t          d¦  «         t          dg}|dk    r$|                     dt          |¦  «        g¦  «         |                     dt          |¦  «        g¦  «         |r$|                     dt          |¦  «        g¦  «         |                     ddt          |dz  ¦  «        g¦  «         t#          j        |dt"          j        t"          j        ¬¦  «         t)          t+          |                     d ¦  «        ¦  «        ¦  «        }t          d!|› �¦  «         |dk    rt/          d"¦  «        ‚t          d#¦  «         t0          dt          |¦  «        d$t          |¦  «        d%|d&d'dt          |¦  «        d(d)d*d+g}t#          j        |t4          t"          j        t"          j        dd,¬-¦  «        }|j        D ]F}|                     ¦   «         }d.|v rt          d/|› �d0d¬1¦  «         Œ0d2|v rt          d3|› �¦  «         ŒG|                     ¦   «          |j         dk    rt/          d4|j         › �¦  «        ‚t          d5¦  «         t          d6¦  «         t          dd7t          |¦  «        dt          |dz  ¦  «        g}|r8|                     ¦   «         r$|                     dt          |¦  «        g¦  «         |                     d8d9d:d;d<d=d>t          |¦  «        d?d@d&|dAdBg¦  «         |r+|                     ¦   «         r|                     g dC¢¦  «         | !                    t          |	¦  «        ¦  «         t#          j        |dt"          j        t"          j        ¬¦  «         tE          t          j        ¦   «         |
z
  d,¦  «        }tE          |	 #                    ¦   «         j$        dDz  dE¦  «        }t          dF¦  «         t          dG¦  «         t          dH|	› �¦  «         t          dI|› dJ�¦  «         t          dK|› dL�¦  «         t          dM¦  «         t          |	¦  «        |                     ¦   «         r&t          j	        |d¬N¦  «         t          dO¦  «         S S # |                     ¦   «         r&t          j	        |d¬N¦  «         t          dO¦  «         w w xY w)PNzInput file not found: Ú_temp_upscale_Ú	in_framesÚ
out_framesz	audio.aacT)ÚparentsÚexist_oku%   === Báº®T Ä�áº¦U UPSCALE VIDEO 4K ===u	   Nguá»“n: u	   Ä�Ã­ch:  u   MÃ´ hÃ¬nh: z (Tile size: ú)zFPS: u    | CÃ³ Audio: u$   [1/4] Ä�ang tÃ¡ch track Ã¢m thanh...z-yr   z-ssr   z-tz-vnú-c:aÚaacú-b:aÚ192k)Úcheckr   r   u)   [2/4] Ä�ang trÃ­ch xuáº¥t frames áº£nh...z	-qscale:vÚ1zframe_%08d.pngz*.pngu#   Tá»•ng sá»‘ frames cáº§n xá»­ lÃ½: u@   KhÃ´ng cÃ³ frame nÃ o Ä‘Æ°á»£c trÃ­ch xuáº¥t tá»« video nguá»“n!uF   [3/4] Ä�ang AI Super-Resolution trÃªn NVIDIA GeForce GTX 1660 Super...z-oz-nz-sÚ4z-jz1:1:2z-fÚpngé   )Úcwdr   r   r   Úbufsizeú%u   Tiáº¿n Ä‘á»™: Ú )ÚendÚflushÚNVIDIAu   
Khá»Ÿi táº¡o GPU: z#Real-ESRGAN exited with error code u4   
HoÃ n táº¥t xá»­ lÃ½ AI cho táº¥t cáº£ cÃ¡c frames!u3   [4/4] Ä�ang render video 4K (H.265 / HEVC NVENC)...z
-frameratez-c:vÚ
hevc_nvencz-presetÚp6z-rc:vÚvbrz-cq:vz-b:vÚ0z-pix_fmtÚyuv420p)r;   r<   r=   r>   z	-shortesti   é   z+
==========================================u   THÃ€NH CÃ”NG!u   Video Ä‘áº§u ra: u   Dung lÆ°á»£ng:  z MBu   Thá»�i gian:   u    giÃ¢yz*==========================================)Úignore_errorsu-   Ä�Ã£ dá»�n dáº¹p cÃ¡c thÆ° má»¥c áº£nh táº¡m.)%r   r   Úresolver	   r   ÚtimeÚparentÚintÚshutilÚrmtreeÚmkdirÚprintÚnamer'   Ústrr
   Úextendr   r   ÚDEVNULLÚlenÚlistÚglobÚRuntimeErrorr   ÚPopenÚREAL_ESRGAN_DIRr   ÚSTDOUTr   r   ÚwaitÚ
returncodeÚappendÚroundÚstatÚst_size)r,   r-   r.   r/   r0   r1   r2   r3   Ú
input_pathÚoutput_pathÚ
start_timeÚwork_dirÚ	frames_inÚ
frames_outÚ
audio_filer   r#   Ú	audio_cmdÚextract_cmdÚframe_countÚupscale_cmdÚprocr$   Úline_strÚ
render_cmdÚelapsedÚout_size_mbs                              r   Úupscale_videor{   9   sU  € õ ÑÔÐÝ�kÑ"Ô"×*Ò*Ñ,Ô,€JÝ�|Ñ$Ô$×,Ò,Ñ.Ô.€Kà×ÒÑÔð GÝÐ E¸Ð EÐ EÑFÔFÐFå”‘”€JØÔ Ð#FµC½¼	¹¼Ñ4DÔ4DÐ#FÐ#FÑF€HØ˜;Ñ&€IØ˜LÑ(€JØ˜KÑ'€Jà‡‚ÑÔð  ÝŒ�hÑÔÐØ‡O‚O˜D¨4€OÑ0Ô0Ð0Ø×Ò˜T¨DÐÑ1Ô1Ð1å	Ð
2Ñ3Ô3Ð3Ý	Ð
'�j”oÐ
'Ð
'Ñ(Ô(Ð(Ý	Ð
(�kÔ&Ð
(Ð
(Ñ)Ô)Ð)Ý	Ð
=˜
Ð
=Ð
=°Ð
=Ð
=Ð
=Ñ>Ô>Ð>ðhCÝ'­¨J©¬Ñ8Ô8‰ˆˆYÝÐ4�cÐ4Ð4¨Ð4Ð4Ñ5Ô5Ð5ð ð 		hÝÐ8Ñ9Ô9Ð9Ý# TÐ*ˆIØ˜1Š}ˆ}Ø× Ò  %­¨Y©¬Ð!8Ñ9Ô9Ð9Ø×Ò˜d¥C¨
¡O¤OÐ4Ñ5Ô5Ð5Øð <Ø× Ò  $­¨LÑ(9Ô(9Ð!:Ñ;Ô;Ð;Ø×Ò˜e V¨U°F¸FÅCÈ
ÁOÄOÐTÑUÔUÐUÝŒN˜9¨D½Ô9KÕT^ÔTfÐgÑgÔgÐgõ 	Ð9Ñ:Ô:Ð:Ý! 4Ð(ˆØ�qŠ=ˆ=Ø×Ò ¥s¨9¡~¤~Ð6Ñ7Ô7Ð7Ø×Ò˜D¥# j¡/¤/Ð2Ñ3Ô3Ð3Øð 	:Ø×Ò ¥c¨,Ñ&7Ô&7Ð8Ñ9Ô9Ð9Ø×Ò˜K¨­c°)Ð>NÑ2NÑ.OÔ.OÐPÑQÔQÐQÝŒ�{¨$µzÔ7IÕR\ÔRdÐeÑeÔeÐeå�$˜yŸ~š~¨gÑ6Ô6Ñ7Ô7Ñ8Ô8ˆÝÐA°KÐAÐAÑBÔBÐBØ˜!ÒÐÝÐaÑbÔbÐbõ 	ÐWÑXÔXÐXåØ•#�i‘.”.Ø•#�j‘/”/Ø�*Ø�#Ø•#�i‘.”.Ø�'Ø�%ð	
ˆõ ÔØÝÝ”?ÝÔ$ØØð
ñ 
ô 
ˆð ”Kð 	9ð 	9ˆDØ—z’z‘|”|ˆHØ�hˆˆÝÐ3¨Ð3Ð3¸À4ÐHÑHÔHÐHÐHØ˜XÐ%Ð%ÝÐ7¨XÐ7Ð7Ñ8Ô8Ð8øà�	Š	‰ŒˆØŒ?˜aÒÐÝÐVÀTÄ_ÐVÐVÑWÔWÐWÝÐEÑFÔFÐFõ 	ÐCÑDÔDÐDå˜Ø�#˜c™(œ(Ø•#�jÐ#3Ñ3Ñ4Ô4ð
ˆ
ð
 ð 	7˜×*Ò*Ñ,Ô,ð 	7Ø×Ò˜t¥S¨¡_¤_Ð5Ñ6Ô6Ð6à×ÒØ�LØ�tØ�UØ•S˜‘W”WØ�CØ�*Ø˜	ð
ñ 	ô 	ð 	ð ð 	L˜×*Ò*Ñ,Ô,ð 	LØ×ÒÐJÐJÐJÑKÔKÐKà×Ò�#˜kÑ*Ô*Ñ+Ô+Ð+ÝŒ�z¨µjÔ6HÕQ[ÔQcÐdÑdÔdÐdå�œ	™œ jÑ0°!Ñ4Ô4ˆÝ˜K×,Ò,Ñ.Ô.Ô6¸+ÑFÈÑJÔJˆÝÐ=Ñ>Ô>Ð>ÝÐÑÔÐÝÐ/ +Ð/Ð/Ñ0Ô0Ð0ÝÐ1 Ð1Ð1Ð1Ñ2Ô2Ð2ÝÐ/ Ð/Ð/Ð/Ñ0Ô0Ð0ÝÐ;Ñ<Ô<Ð<Ý�;ÑÔð �?Š?ÑÔð 	CÝŒM˜(°$Ð7Ñ7Ô7Ð7ÝÐAÑBÔBÐBÐBð	Cøˆ8�?Š?ÑÔð 	CÝŒM˜(°$Ð7Ñ7Ô7Ð7ÝÐAÑBÔBÐBÐBð	Cøøøs   Å.T=[& Û&<\"Ú__main__z'AI 4K Video Upscaler for GTX 1660 Super)ÚdescriptionÚinputu!   Ä�Æ°á»�ng dáº«n video Ä‘áº§u vÃ o)ÚhelpÚoutputu"   Ä�Æ°á»�ng dáº«n video 4K Ä‘áº§u raz--startu$   GiÃ¢y báº¯t Ä‘áº§u (máº·c Ä‘á»‹nh 0))ÚtypeÚdefaultr   z
--durationu.   Thá»�i lÆ°á»£ng cáº¯t (giÃ¢y) Ä‘á»ƒ test nhanhz--tilei�  u&   Tile size (400 tá»‘i Æ°u cho 6GB VRAM)z--modelu   MÃ´ hÃ¬nh Real-ESRGAN)r‚   r   z--resu   Ä�á»™ phÃ¢n giáº£i má»¥c tiÃªu)r,   r-   r.   r/   r0   r1   r2   )r   Nr(   r)   r*   r+   )'Ú__doc__r   ÚsysÚjsonrS   rV   Úargparser   Úpathlibr   ÚplatformÚ
startswithr   Úreconfigurer   Ú	Exceptionr
   ÚFFPROBE_EXEr   rc   r   r[   r'   r   rU   r{   Ú__name__ÚArgumentParserÚparserÚadd_argumentÚ
parse_argsÚargsr~   r€   ÚstartÚdurationÚtileÚmodelr"   r   r   r   ú<module>r—      sù  ððð ð
 
€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð ð „<×Ò˜5Ñ!Ô!ð ðØŒ
×Ò¨ÐÑ0Ô0Ð0ØŒ
×Ò¨ÐÑ0Ô0Ð0Ð0øØð ð ð Øˆðøøøð ?€
Ø?€ØC€Ø(€ðOð Oð Oð˜sð ð ð ð ð4 ØØØ)Ø!ØðICð ICØðICàðICð ðICð ð	ICð
 ðICð ðICð ðICð 	ðICð ICð ICð ICðV ˆzÒÑØ$ˆXÔ$Ð1ZÐ[Ñ[Ô[€FØ
×Ò˜Ð&IÐÑJÔJÐJØ
×Ò˜Ð'KÐÑLÔLÐLØ
×Ò˜	¨°qÐ?eÐÑfÔfÐfØ
×Ò˜¨5¸$ÐEuÐÑvÔvÐvØ
×Ò˜ s°CÐ>fÐÑgÔgÐgØ
×Ò˜	Ð+>ÐE\ÐÑ]Ô]Ð]Ø
×Ò˜¨Ð;[ÐÑ\Ô\Ð\à×ÒÑÔ€DØ€MØ”JØ”[Ø”*Ø”]Ø”)Ø”:Ø”8ðñ ô ð ð ð ð Ðs   Á 6A7 Á7A?Á>A?