
    VGhE                     v    d dl Z d dlZd dlZddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZmZ dZdZ G d	 d
e      Zy)    N   )PostProcessor)FFmpegPostProcessorFFmpegSubtitlesConvertorPP)SponsorBlockPP   )PostProcessingError
orderedSetprepend_extensionz"[SponsorBlock]: %(category_names)lc                   ~    e Zd ZdedddZ ej                  d      d        Zd Zd Z	d	 Z
d
 ZddZed        Zy)ModifyChaptersPPNF)sponsorblock_chapter_titleforce_keyframesc                   t        j                  | |       t        |xs g       | _        t        |xs g       t        t        j
                  j                               z
  | _        t        |xs g       | _        || _	        || _
        y N)r   __init__set_remove_chapters_patternsr   NON_SKIPPABLE_CATEGORIESkeys_remove_sponsor_segments_ranges_to_remove_sponsorblock_chapter_title_force_keyframes)self
downloaderremove_chapters_patternsremove_sponsor_segmentsremove_rangesr   r   s          m/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/postprocessor/modify_chapters.pyr   zModifyChaptersPP.__init__   s{    $$T:6),-E-K)L&(+,C,Ir(JSQ_QxQxQ}Q}Q  NA  )A%!$]%8b!9+E( /    )imagesc                 0     j                  |        j                  t        j                  |j	                  d            xs g t        j                  |j	                  d            xs g       \  }}|s|sg |fS  j                  |d         }|sd|j	                  d      xs ||d   dg} j                  ||z         \  |d<   sg |fS |d   s j                  d       g |fS |j	                  d      |d   d	   d
   c}|d<    j                  ||d      ri j                  ||d         s' j                  d j                          d       g |fS |j	                  d      st        d       j                  d        j                  |       j                  dj                  dj                  d D                            fd |d   d      g}|j!                  fd j#                  |      D               g }|D ]  \  }}	t%        j&                  |      j(                  }
t+        |d      }t%        j,                  ||       t%        j,                  |	|        j/                  ||
|
       |j1                  |        ||fS )Nchapterssponsorblock_chaptersfilepathr   durationtitle)
start_timeend_timer(   zDYou have requested to remove the entire video, which is not possibler*   r   z	Skipping z* since the video appears to be already cut__real_downloadzqCannot cut video since the real and expected durations mismatch. Different chapters may have already been removedz&Expected and actual durations mismatchzConcat spec = {}z, c              3   j   K   | ]+  }|j                  d d       d|j                  dd        - yw)inpointg        -outpointinfN)get).0cs     r    	<genexpr>z'ModifyChaptersPP.run.<locals>.<genexpr>9   sA       =IwxiQT@U?VVWXYX]X]^hjoXpWq=r  =Is   13c                 N    | j                  | j                  xr |       fS r   )remove_chaptersr   )fileis_subconcat_optscutsr   s     r    r7   z-ModifyChaptersPP.run.<locals>.remove_chapters;   s.    --dD+tG\G\Gkekaklllr!   Fc              3   0   K   | ]  } |d         yw)TN )r3   in_filer7   s     r    r5   z'ModifyChaptersPP.run.<locals>.<genexpr>?   s     iwOGT:is   uncut)_fixup_chapters_mark_chapters_to_removecopydeepcopyr2   _get_real_video_duration_remove_marked_arrange_sponsorsreport_warning_duration_mismatch	to_screenpp_keyr	   write_debug_make_concat_optsformatjoinextend_get_supported_subsosstatst_mtimer   replace	try_utimeappend)r   infor$   sponsor_chaptersreal_durationoriginal_durationin_out_filesfiles_to_remover>   out_filemtime
uncut_filer:   r;   r7   s   `           @@@r    runzModifyChaptersPP.run   s   T"%)%B%BMM$((:./52MM$((#:;<B&D""  0t8O55d:6FG'(dhhz6J6[mfjkrfstuH!%!E!EhQaFa!bZ$t8Oj! fgt8O.2hhz.BDDTUWDXYcDd+4
+""=2CQG**=$z:JK4;;=/9cde4x88-.) +] ^ ^   !IJ,,T=A+22499  =I  }H  =I  4I  J  	K	m (Z(8%@Ai$JbJbcgJhii !- 	/GXGGG$--E*7G<JJJw
+JJx)NN7E51"":.	/ $$r!   c                    | j                   rWd}|s| j                  d       d}|D ](  t        fd| j                   D              s"dd<   d}* |r| j                  d       | j                  rJd}|s| j                  d       d}|D ]  d   | j                  v sdd<   d} |r| j                  d	       |j	                  d
 | j
                  D               ||fS )NTz"Chapter information is unavailableFc              3   F   K   | ]  }|j                  d            yw)r(   N)search)r3   regexr4   s     r    r5   z<ModifyChaptersPP._mark_chapters_to_remove.<locals>.<genexpr>T   s     \Eu||AgJ/\s   !removez(There are no chapters matching the regexz'SponsorBlock information is unavailablecategoryz+There are no matching SponsorBlock chaptersc              3   <   K   | ]  \  }}||d d ||dfgdd  yw)manually_removedzManually removedT)r)   r*   re   _categoriesrd   Nr=   )r3   startends      r    r5   z<ModifyChaptersPP._mark_chapters_to_remove.<locals>.<genexpr>f   s<       4 eS  */=OPQ!
  4s   )r   rH   anyr   rN   r   )r   r$   rW   warn_no_chapter_to_remover4   s       @r    rA   z)ModifyChaptersPP._mark_chapters_to_removeM   s   ))(,%CD,1) 6\T=[=[\\"&AhK05-6 )IJ(((,%#HI,1)% 6Z=D$A$AA"&AhK05-6 )LM  4 !22 4 	4 )))r!   c              #   *  K   |j                  d      xs i j                         D ]i  }|j                  d      }|rt        j                  j	                  |      s6|d   }|t
        j                  vr| j                  d| d| d       f| k y w)Nrequested_subtitlesr&   extz%Cannot remove chapters from external z subtitles; "z" is now out of sync)r2   valuesrP   pathexistsr   SUPPORTED_EXTSrF   )r   rV   subsub_filero   s        r    rO   z$ModifyChaptersPP._get_supported_subsp   s     HH239rAAC 
	Cwwz*H277>>(#;e*C4CCC##&KC5P]^f]gg{$|}N
	s   BBc                 P   g fd}fdg fd}t        |      D cg c]  \  }}|d   ||f }}}t        j                  |       t        j                  |      \  }}}|rt        j                  |      \  }}}|d   |d   k  r d|vr|n||       ||}}:d|v rRd|v rt	        |d   |d         |d<   n;|d   |d   k  r/|d   |d<   d|d<   t        j
                  ||d   ||f       nd|v rd|d<   |d   |d   k  r|d   |d<    ||       ||}}d	|v rt        ||d   g 
      }	g }
|d	   D ]>  }|d   |d   k  r|
j                  |       |d   |d   kD  s+|	d	   j                  |       @ |
|d	<   |d	   |	d	   k7  r2t        j
                  ||	d   ||	f       |d   |d<    ||       ||}}X|j                  d ||             n"d	|v r:d	|vr6|d   |d   k  r|d   |d<   d|d<   t        j
                  ||d   ||f       nd	|v sJ d       d|d<   d|d<   |d   |d   kD  r@t        t        j                  |      |d         }	t        j
                  ||	d   ||	f       nR|d   |d   kD  rGt        t        j                  |      |d         }t        j
                  ||d   ||f       |d   |d<   d	|v r|d	   |d	   z   |d	<   d|v r|d   |d<   |d   |d<    ||       ||}}|r d|vr|n||       | j                        fS c c}}w )Nc                     d| v sJ d       rd   nd }|r!|d   | d   k\  rt        |d   | d         |d<   nj                  |        t              dz
  S )Nrd   zNot a cut is appended to cutsr+   r*   r)   r   )maxrU   len)r4   last_to_cutr;   s     r    
append_cutzDModifyChaptersPP._remove_marked_arrange_sponsors.<locals>.append_cut   sh    q=A"AA=&*$r(K{:6!L/I*-k*.Eq}*UJ'At9q= r!   c                    | j                  dt                    d}}|t              k  r\|   }|d   | d   k\  r	 |S |d   | d   kD  r*|t        |d   | d         z  }|t        |d   | d         z  }|dz  }|t              k  r\|S )Ncut_idxr   r)   r*   r   )popry   minrx   )r4   r}   excesscutr;   s       r    excess_durationzIModifyChaptersPP._remove_marked_arrange_sponsors.<locals>.excess_duration   s      eeIs4y91VGCI%7m|$*5
 M	 z?Q|_4c#j/1Z=AAFc#l"3Q|_EEF1 CI% Mr!   c                     d| vsJ d       | d   | d   z
   |       z
  }|dk  ry rd   d   nd}| j                  |||z          j                  |        y )Nrd   zCut is appended to chaptersr*   r)   r   r+   )r)   r*   )updaterU   )r4   lengthri   r   new_chapterss      r    append_chapterzHModifyChaptersPP._remove_marked_arrange_sponsors.<locals>.append_chapter   sr    1$C&CC$z]Q|_4q7IIF{4@L$Z0aEHHH?"r!   r)   r*   rd   T_was_cutrh   )r)   rh   r   r   r}   zNormal chapters overlap)r)   )	enumerateheapqheapifyheappoprx   heappushdictrU   
setdefaultrB   rC   _remove_tiny_rename_sponsors)r   r$   r{   r   ir4   _cur_icur_chapterafter_ccur_catscat_start_end	after_curr;   r   r   s                @@@r    rE   z0ModifyChaptersPP._remove_marked_arrange_sponsors}   s   	!	" 	# 9B(8KL1Q|_a+LLh %h 75+mmH-GAq! :&!L/9N8;#>JP[\%&{ ;&q=.1+j2I1Z=.YK
+
 !,q}<&1*&=AlO$(AjMNN8aoq!-DEQ*.J' z*a
m;./oK
+";/)*A;E !K/";1Z=VXYG!H)4])C I(+ao=$OOM:(+a
m;#M299-H	I
 2:K."=1W]5KKx',2GPW1XY23L/J/&{3-.{  &&y*Q-@ +--q2Hz*Qz]:&1*&=AlO$(AjMNN8aoq!-DE %)D+DD)*.J' $*z*Qz]:"4==#=!J-XGNN8gl.CUG-TUz][%<< $T]]1%5+jBY ZINN8i.Eui-XY$/
$;AjM K/'2='AAmDT'TAm$+#.y#9AiL*+L/J'{+%&{o p 
G8;6JT00>DD{ Ms   L"c           
         g }t        |      D ]e  \  }}d|v sd|v r||d   |d   z
  t        k  rj|s |t        |      dz
  k  rW|d   ||dz      d<   C|d   }|t        |      dz
  k  r)||dz      }d|v }d|v }d|vr|r|rd|v r|s|r	|d   |d<   |d   |d<   |j                  dd        |j                  dd       }	|	rt	        |	d 	      \  }
}}}|j                  |
t        d
 |	D              |t        d |	D              d       | j                  j                  | j                  |j                               |d<   |r"d|d   v r|d   d   |d   k(  r|d   |d   d<   U|j                  |       h |S )Nr   rh   r*   r)   r   r+   
categoriesc                     | d   | d   z
  S )Nr   r   r=   )r4   s    r    <lambda>z?ModifyChaptersPP._remove_tiny_rename_sponsors.<locals>.<lambda>)  s    !qQRt r!   )keyc              3   &   K   | ]	  }|d      yw)r   Nr=   r3   xs     r    r5   z@ModifyChaptersPP._remove_tiny_rename_sponsors.<locals>.<genexpr>,  s     ,@aQqT,@   c              3   &   K   | ]	  }|d      yw)   Nr=   r   s     r    r5   z@ModifyChaptersPP._remove_tiny_rename_sponsors.<locals>.<genexpr>.  s     0D!10Dr   )re   r   namecategory_namesr(   )r   _TINY_CHAPTER_DURATIONry   r~   r   r   r
   _downloaderevaluate_outtmplr   rB   rU   )r   r$   r   r   r4   old_cnext_cprev_is_sponsornext_is_sponsorcatsre   r   category_names                r    r   z-ModifyChaptersPP._remove_tiny_rename_sponsors
  s   h' *	#DAq qMQ$6*,7:PP#3x=1,,89,Q5 (,E3x=1,,!)!a%*6%*?*76*A*!3P_$1Q$6Sb34\?F<0$()*E*%EE*d#55-D03D>S0T-!Q (",,@4,@"@)&00Dt0D&D	  "-->>t?_?_abagagaij'
 \\"5E%E(,W57C34Z=L$Z0"U*	#V r!   c                     |}t        |d      }|r| j                  |d |D              }| j                  d|        | j                  |gt	        |      z  ||       ||k7  r| j                  |d        |S )Ntempc              3   >   K   | ]  }|d    |d   fD ]  }|   yw)r)   r*   Nr=   )r3   r4   ts      r    r5   z3ModifyChaptersPP.remove_chapters.<locals>.<genexpr>=  s0     4x1XYZfXgijkuivWw4xRSQ4xQ4xs   zRemoving chapters from )msg)r   r   rH   concat_filesry   _delete_downloaded_files)r   filenameranges_to_cutr:   r   r>   r\   s          r    r7   z ModifyChaptersPP.remove_chapters9  s    $Wf5**74x4xyG0
;<7)c+&66+Nh))'t)<r!   c                     i g}| D ]F  }|d   dk(  r|d   d|d   d<   |d   d|d   d<   |d   |k  s/|j                  d|d   di       H |S )Nr)   r   r*   z.6fr+   r.   r0   )rU   )chapters_to_remover'   optsss       r    rK   z"ModifyChaptersPP._make_concat_optsD  s    t# 	AA!#)*:s(;R#&'oc%:DHZ }x'Y1Z=*=?@	A r!   )NNN)F)__name__
__module____qualname__"DEFAULT_SPONSORBLOCK_CHAPTER_TITLEr   r   _restrict_tor_   rA   rO   rE   r   r7   staticmethodrK   r=   r!   r    r   r      sf    0/Qch0  ]u-2% .2%h!*FKEZ-^	  r!   r   )rB   r   rP   commonr   ffmpegr   r   sponsorblockr   utilsr	   r
   r   r   r   r   r=   r!   r    <module>r      s8      	 ! C ( F F %I "B* Br!   