
    i5?                         S r SSKJr  SSKJrJr  SSKrSSKrSSKrSSK	r	SSK
r
 SSKJr   " S	 S
\5      r\rg! \ a    S r Nf = f)zConvert Pixiv Ugoira to WebM   )PostProcessor   )utiloutput    Ngcdc                 0    U(       a  XU-  pU(       a  M  U $ N )abs     L/app/mltbenv/lib/python3.13/site-packages/gallery_dl/postprocessor/ugoira.pyr	   r	      s    !eq a    c                       \ rS rSrS rS rS rS rS rS r	S r
\	r\R                  rS	 rS
 rS rS rS rS rSS jrS rS rS rS rSrg)UgoiraPP   c                   ^ [         R                  " X5        UR                  S5      =(       d    SU l        UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      (       + U l        UR                  SS	5      U l        UR                  S
S	5      U l        UR                  SS	5      U l	        UR                  S5      =(       d    SU l
        UR                  SS5      U l        UR                  SS	5      U l        UR                  SS	5      U l        UR                  SS	5      U l        S=U l        =U l        U l        UR                  S5      nU(       a  [$        R&                  " U5      OSU l        UR                  S5      nU(       a  [$        R&                  " U5      OSU l        UR                  S5      nUR                  S5      =(       d    UR                  S5      nUb  US:X  a-  US;   a%  U(       d  [,        R.                  " S5      (       a  SnOSnUS:X  a#  U R0                  U l        U R4                  U l        OiUS:X  a  U R8                  U l        S U l        OJUS:X  a,  Uc  SnU R:                  U l        [$        R>                  U l         OU RB                  U l        S U l        Uc  SOUU l"        U RF                  RI                  SU5        UR                  S S5      mTS!:X  a  S	U l        OTS:w  a  U4S" jU l%        UR                  S#S	5      (       a  S n[M        U R                  5       HZ  u  pU	RO                  S$5      u  pnU	S%:X  d)  U	S&;   d  M'  U(       a  URO                  S$5      S'   S(;   d  MH  U R                  US)-      nM\     US*;   =(       d+    U(       + =(       a    U RD                  RQ                  5       S+;   U l)        OSU l)        / =U l*        n[W        U R
                  [X        5      (       a  US,S-U R
                  4-  nU RR                  (       a  US.-  nUR[                  U R\                  U R^                  U R`                  S/.U5        g )0Nzffmpeg-argsr   zffmpeg-twopassFzffmpeg-outputerrorz
keep-fileszrepeat-last-frameTmetadatamtimezmkvmerge-argszmkvmerge-outputzmkvmerge-metadatazmkvmerge-mtimeskipzffmpeg-locationffmpegzmkvmerge-locationmkvmerge	extensionmodezffmpeg-demuxerauto)Nwebmmkvconcatimage2archivezipr   zusing %s demuxer	framerateuniformc                    > S T4$ r   r   )_rates    r   <lambda>#UgoiraPP.__init__.<locals>.<lambda>R   s	    $r   zlibx264-prevent-odd:z-vcodec)z-cz-codecr   )vVr   )libx264libx265)mp4r   z-hide_bannerz	-loglevel)z-vfz crop=iw-mod(iw\,2):ih-mod(ih\,2))preparefileafter)1r   __init__getargstwopassr   deleterepeatr   r   	mkvm_argsmkvm_outputmkvm_metadata
mkvm_mtimer   r%   _convert_zip_convert_filesr   expand_pathr   r   shutilwhich_process_mkvmerge_process_finalize_mkvmerge	_finalize_process_image2convert_to_archive_convert_implNullContext_tempdir_process_concatr   logdebugcalculate_framerate	enumerate	partitionlowerprevent_oddargs_pp
isinstancestrregister_hooksr1   convert_from_zipconvert_from_files)selfjoboptionsr   r   extr   vcodecindexargr'   streamr6   r(   s                @r   r4   UgoiraPP.__init__   s   t)KK.4"	{{#3U;kk/7;!++lE::kk"5t<J5[[$/
 _5;";;'8%@$[[)<dC!++&6=KK-	AFFFt(4+>./28d&&v.h;;236>((2Jkk+&{{6"Cgkk2B&C<46>++Z 8 8!: 22DM!44DNX 00DM!DNY{!%!8!8D ,,DM 00DM!DN#&;C)40{{;/9DLV^'=D$;;,d33F'		2
!$s!3)#s.>'>"f&6&6s&;A&>*&L!YYuqy1F	 3 00 H
Gt~~335G   %D  tdkk3''^[$++>>DAAD||,,..
 		r   c                    S=U l         U l        SUR                  ;  a  S U l        g UR                  S   U l        UR                  R	                  S5      nUcE  SU l         U R
                  (       a,  UR                  U R                  5        UR                  5         g g UR                  5         U R                  U   R                  5       nX#S'   UR                  US'   UR                  US'   U(       d	  U/U l        g U R                  R                  U5        [        U R                  5      [        U R                  5      :  a  SU l        g g )NF_ugoira_frame_data_ugoira_frame_indexTr_   pathr]   )r>   r?   kwdict_framesr5   r8   set_extensionr   
build_pathcopyrealpath_filesappendlen)rZ   pathfmtr_   frames       r   r1   UgoiraPP.prepareo   s   277D/w~~5DL~~&:;""#89= $D{{%%dnn5""$   LL',,.E"'N#,,E&M",,E%L$g""5)t{{#s4<<'88*.D' 9r   c           	         U R                   (       d  g SU l        UR                  =U l        nU R	                  5        nU(       a;   [
        R                  " UR                  5       nUR                  U5        S S S 5        U R)                  X5      (       ao  U R*                  (       a  SUl        OVUR                  U:w  aF  U R                  R-                  UR                   5        UR/                  U5        UR1                  5         S S S 5        g ! , (       d  f       N= f! [         a    UR                  Ul
         S S S 5        g [         a  nUR                  Ul
        U R                  R                  SUR                  R                  S5      UR                   UR"                  R$                  U5        U R                  R'                  U5      s S nAsS S S 5        $ S nAff = f! , (       d  f       g = f)NTz-%s: Unable to extract frames from %s (%s: %s)id)r>   _zip_sourcer   _zip_extrK   zipfileZipFiletemppath
extractallFileNotFoundErrorrl   	ExceptionrM   r   rg   r5   filename	__class____name__	tracebackconvertr8   infori   rj   )rZ   rp   r]   tempdirzfileexcs         r   rX   UgoiraPP.convert_from_zip   sp     %///]]_3 )9)9:e((1 ; ||G--;;%)GN&&#-HHMM'"2"23))#.&&(- _ ;:( '.'7'7G$ _ ! 3'.'7'7G$HHNNG**40'2B2B..5  88--c22 _3 _sm   G% D&D8D BG%
D	DG%DG":G%	G"BGG"G%G""G%%
G3c           	      T   U R                   (       d  g SU l        [        R                  " 5        nU R                   HL  nUS   R                  S5      S    SUS    3=US'   nU(       d  M0   U R                  US   US-   U-   5        MN     SUR                  S	'   U R                  U l        U R                  X5      (       a}  U R                  R                  UR                   5        U R"                  (       aG  U R                  R                  S
5        U R                   H  n[$        R&                  " US   5        M     S S S 5        g ! [         aD  nU R                  R                  SXER                  R                  U5         S nA  S S S 5        g S nAff = f! , (       d  f       g = f)NFr2   .r   r]   rf   /z Unable to copy frame %s (%s: %s)numzDeleting frames)r?   ru   tempfileTemporaryDirectoryrm   rQ   
_copy_fileOSErrorrM   rN   r~   r   rg   rh   r   r   r}   r8   r   remove_file)rZ   rp   r   rq   namer   s         r   rY   UgoiraPP.convert_from_files   sY   "" ((*g V}..s3A67quGHf 7fw}t7KL % %&GNN5!;;DL||G--g../;;HHNN#45!%((v7 "-- +* # 'I'+]]-C-CSJ +* +*s6   9F-EB7F
F1FFFF
F'c                     UR                  U R                  5        UR                  5         U R                  (       a  UR	                  5       (       a  gU R                  X5      $ )NT)ri   r   rj   r   existsrI   rZ   rp   r   s      r   r   UgoiraPP.convert   sG    dnn-99))!!'33r   c                    U R                  X5      nU R                  (       a  X0R                  -  nU R                  (       a  X0R                  -  n[        R                  " UR
                  SS9   U R                  (       ar  SU R                  ;  a  USU R                  4-  nUSUS-   S4-  nU R                  USS[        R                  /-   5        U R                  US	UR                  /-   5        O,UR                  UR                  5        U R                  U5        U R                  (       a  U R                  X5        U R                  (       a  UR                  5         g! [         a}  n[         R"                  " S
5        U R$                  R'                  SUR(                  R*                  U5        U R$                  R-                  U5        UR.                  Ul
         S nAg S nAf[0         a}  n[         R"                  " S
5        U R$                  R'                  SUR(                  R*                  U5        U R$                  R-                  U5        UR.                  Ul
         S nAg S nAff = f)NT)exist_ok-fz-passlogfilez/ffmpeg2passz-pass1z-y2
z Unable to invoke FFmpeg (%s: %s)z%s: %s)rD   rT   r6   osmakedirsrealdirectoryr7   r   _execdevnullrl   rn   rF   r   	set_mtimer   r   stderr_writerM   r   r~   r   r   ry   r|   )rZ   rp   r   r6   r   s        r   convert_to_animationUgoiraPP.convert_to_animation   s   }}W.<<LL D99IID 	G))D9	||tyy(T4>>22D>)A7KK

43bjj"99:

43(8(8"99:G,,-

4 ~~w0 zz!!#  	0%HHNN===1138HHs#&//G 	0%HHNN8S]]%;%;SAHHs#&//G		0s'   0CE# #
I/-A3G%%I/2A3I**I/c           	      t   U R                   nU R                  (       al  [        U R                  [        5      (       a  U R                  nOSn[        R
                  " U Vs/ s H  nUS   US   S.PM     sn5      R                  5       nU R                  (       Ga  UR                  nU R                  (       a  SU l	        OAU R                  U R                  :w  a'  U R                  XqR                  5        UR                  nU R                  (       a  [        R                  " US5       n[        R                   " W5      n	U R"                  (       a"  UR%                  5       S   R&                  U	l        UR)                  U	S5       n
U
R+                  W5        S S S 5        S S S 5        g gU R"                  (       ai  UR,                  S	   =(       d    UR,                  S
   nUR.                  UR0                  UR2                  UR4                  UR6                  UR8                  4n[        R                  " UR                  S5       nU H  n[        R                   R;                  US   US   5      n	U R"                  (       a  WU	l        [)        US   S5       nUR)                  U	S5       n[<        R>                  " XS5        S S S 5        S S S 5        M     U R                  (       aZ  [        R                   " W5      n	U R"                  (       a  WU	l        UR)                  U	S5       n
U
R+                  W5        S S S 5        S S S 5        gs  snf ! , (       d  f       GN= f! , (       d  f       g= f! , (       d  f       N= f! , (       d  f       GML  = f! , (       d  f       Nc= f! , (       d  f       g= f)Nzanimation.jsonr2   delay)r2   r   Fr   r   wdate_urldaterf   rbi    T) rh   r   rU   rV   r   
json_dumpsencoderu   ry   r8   rv   r   r   rl   rw   rx   ZipInfor   infolist	date_timeopenwriterg   yearmonthdayhourminutesecond	from_filerA   copyfileobj)rZ   rp   r   framesmetanamerq   	framedatazpathr   zinfofpdtr   srcdsts                  r   rH   UgoiraPP.convert_to_archive   s   ==$----==+#)#E vw@#)  vx 
 $$E{{#$..0'7'78((}}__UC0E#OOH5Ezz*/..*:1*=*G*GE3/2+ 0	 16 9 8 ) zz^^J/I7>>&3I"((BFF"))RYY8!1!1375#E#OO55fuV}6Ezz*/eFmT2c!JJuc2c**3V< 3 32 $ ==#OOH5Ezz*/E3/2+ 0 8  S)$ 0/	 106  32 32 0/ 87  s    M*AM#MM#AN)N,M4	NAN))N;N)
M 	M##
M14
N>N
N	N)
N&	"N))
N7c                 N   U R                   R                  U5        U R                  (       a  S O[        R                  n[
        R                  " XUS9R                  5       =n(       a<  [        R                  " S5        U R                   R                  SX5        [        5       eU$ )N)stdoutstderrr   z)Non-zero exit status when running %s (%s))rM   rN   r   
subprocessDEVNULLr   Popenwaitr   r   
ValueError)rZ   r6   outretcodes       r   r   UgoiraPP._exec,  su    tkkdz'9'9jj#>CCEE7E%HHNNF*,r   c                 0    [         R                  " X5        g r   )rA   copyfile)rZ   r   r   s      r   r   UgoiraPP._copy_file6  s    !r   c                     U R                  U R                  5      u  p4U R                  SS/nU(       a  US[        U5      4-  nUSU R	                  U5      4-  nU(       a  US[        U5      4-  nU$ )Nr   r    -r-i)rO   rh   r   rV   _write_ffmpeg_concat)rZ   rp   r   rate_inrate_outr6   s         r   rL   UgoiraPP._process_concat9  st     44T\\BT8,T3w<((Dt009::T3x=))Dr   c                    US-  nU R                   nU R                  (       a  U R                  U5      (       d  US   nU R                  U5      nUS   U-
  S:  a  US==   U-  ss'   U R                  R                  S5        UR                  5       nUR                  U5        US   R                  S5      u  pxn	[        U5      S-   S	 SU	 3US'   [        R                  " X$S   -   X&S   -   5        Sn
U H(  n[        R                  " X+S   -   X4S
9  XS   S-  -  n
M*     U R                  SSSSSSSUR                  SS5       SWS   R                  S5      S    3/	$ )Nr   r   r   z)non-uniform delays; inserting extra framer2   r   r   z>06)nsi@B r   r!   z-ts_from_filer   z-pattern_typesequencer   %z%%z%06d.r   )rh   r9   _delay_is_uniform
_delay_gcdrM   rN   rk   rn   
rpartitionintrA   r   r   utimer   replace)rZ   rp   r   r   last	delay_gcd	last_copyr   r'   r]   tsrq   s               r   rG   UgoiraPP._process_image2C  ss   3 ;;t55f==":D/IG}y(1,W*JK IIK	i((0;;C@'*4y1}S&93%$@	&!v, 6 'F*; ;= EHHWV},":.7**B 
 KK(SZgooc401Fm..s3A679
 	
r   c           
          UR                   U l        U SU R                   3Ul         U R                  SSSSSU R	                  US5      /$ )Nz/temp.r   25r   r    r   F)rl   	_realpathr   r   r   r   s      r   rC   UgoiraPP._process_mkvmergee  sV     ))%YfT^^,<= KK$($++GU;	
 	
r   c                    U R                   SUR                  SSU R                  U5      -   /nU R                  (       aT  UR                  R                  S5      =(       d    UR                  R                  S5      =n(       a  US[        U5      4-  nU R                  (       d  UR                  S5        U R                  (       d  UR                  S5        U R                  S	:X  a  UR                  S
5        U R                  (       a  X0R                  -  nUSUR                  4-  nU R                  Ul        U R                  U5        g )Nz-oz--timecodesz0:r   r   z--datez--disable-track-statistics-tagsz--quietr   z--webm=)r   rf   _write_mkvmerge_timecodesr=   rg   r5   rV   r<   rn   r;   r   r:   rl   r   r   )rZ   rp   r   r6   r   s        r   rE   UgoiraPP._finalize_mkvmergep  s   MM',,4$"@"@"II

 ??gnn&8&8&D '; ' 2 26 :!; !;Xs2w''D!!KK9:KK	">>V#KK!>>NN"Dg&&''>>

4r   c                    S/nU(       a4  U R                    H#  nUR                  SUS    SUS   S-   35        M%     O+U R                    H  nUR                  SUS    S35        M     U R                  (       a  UR                  SWS    S35        UR                  S5        US	-   n[        US
SS9 nUR	                  SR                  U5      5        S S S 5        U$ ! , (       d  f       U$ = f)Nzffconcat version 1.0zfile 'r2   z'
duration r   i  ' z/ffconcat.txtr   utf-8encodingr   )rh   rn   r9   r   r   join)rZ   r   durationcontentrq   ffconcatr   s          r   r   UgoiraPP._write_ffmpeg_concat  s    )*f 7++0>D+@*A C D & fa89 &;;NNVE&M?!45r_,(C'2bHHTYYw'( 3 32s   4!C
C.c                 d   S/nSnU R                    H$  nUR                  [        U5      5        X4S   -  nM&     UR                  [        U5      5        UR                  S5        US-   n[        USSS9 nUR	                  S	R                  U5      5        S S S 5        U$ ! , (       d  f       U$ = f)
Nz# timecode format v2r   r   r   z/timecodes.tcr   r   r   r   )rh   rn   rV   r   r   r   )rZ   r   r   	delay_sumrq   	timecodesr   s          r   r   "UgoiraPP._write_mkvmerge_timecodes  s    )*	\\ENN3y>*w'I " 	s9~&ro-	)S73rHHTYYw'( 4 43s   5!B  
B/c                     U R                  U5      (       a  SUS   S    3S 4$ U R                  (       d  U R                  U5      nUS:  a  S SU 34$ g)Nz1000/r   r   
   )NN)r   r%   r   )rZ   r   r	   s      r   rO   UgoiraPP.calculate_framerate  s_    !!&))F1Ig./0$77||//&)CbycUm,,r   c                 D    US   S   nU H  n[        X#S   5      nM     U$ )Nr   r   r   )rZ   r   resultfs       r   r   UgoiraPP._delay_gcd  s-    7#A7,F r   c                 <    US   S   nU H  nUS   U:w  d  M    g   g)Nr   r   FTr   )rZ   r   r   r  s       r   r   UgoiraPP._delay_is_uniform  s.    q	'"AzU"  r   )r?   rI   r>   rm   rF   rh   rD   r   rK   rv   ru   r6   rT   rO   r8   r   r   r   r:   r<   r=   r;   r   r   r   rS   r9   r   r7   r%   N)T)r   
__module____qualname____firstlineno__r4   r1   rX   rY   r   r   rH   rI   r   r   rK   r   r   rL   rG   rC   rE   r   r   rO   r   r   __static_attributes__r   r   r   r   r      ss    Ob/6)<8<4&P1f )M**H" 
D	
,&	r   r   )__doc__commonr   r   r   r   r   r   rw   rA   r   mathr	   ImportErrorr   __postprocessor__r   r   r   <module>r     sU    # !      	b} bJ  Y  s   : 	AA