
    V|hE                     v    S SK r S SKrS SKrSSKJr  SSKJrJr  SSKJ	r	  SSK
JrJrJr  SrSr " S	 S
\5      rg)    N   )PostProcessor)FFmpegPostProcessorFFmpegSubtitlesConvertorPP)SponsorBlockPP   )PostProcessingError
orderedSetprepend_extensionz"[SponsorBlock]: %(category_names)lc                       \ rS rSrS\SS.S jjr\R                  " SS9S 5       rS r	S	 r
S
 rS rSS jr\S 5       rSrg)ModifyChaptersPP   NF)sponsorblock_chapter_titleforce_keyframesc                .   [         R                  " X5        [        U=(       d    / 5      U l        [        U=(       d    / 5      [        [        R
                  R                  5       5      -
  U l        [        U=(       d    / 5      U l        XPl	        X`l
        g 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          ^/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/postprocessor/modify_chapters.pyr   ModifyChaptersPP.__init__   su    $$T6),-E-K)L&(+,C,Ir(JSQ_QxQxQ}Q}Q  NA  )A%!$]%8b!9+E( /    )imagesc                   ^ ^^^ T R                  U5        T R                  [        R                  " UR	                  S5      5      =(       d    / [        R                  " UR	                  S5      5      =(       d    / 5      u  p#U(       d  U(       d  / U4$ T R                  US   5      nU(       d"  SUR	                  S5      =(       d    UUS   S./nT R                  X#-   5      u  US'   mT(       d  / U4$ US   (       d  T R                  S5        / U4$ UR	                  S5      US   S	   S
   soQS'   T R                  XES5      (       ar  T R                  XAS   5      (       d'  T R                  ST R                  5        S35        / U4$ UR	                  S5      (       d  [        S5      eT R                  S5        T R                  TU5      mT R                  SR                  SR                  S T 5       5      5      5        UUU 4S jmT" US   S5      /nUR!                  U4S jT R#                  U5       5       5        / nU H  u  p[$        R&                  " U5      R(                  n
[+        US5      n[$        R,                  " X5        [$        R,                  " X5        T R/                  XU
5        UR1                  U5        M     Xq4$ )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   n   #    U  H+  oR                  S S5       SUR                  SS5       3v   M-     g7f)inpointg        -outpointinfN)get).0cs     r!   	<genexpr>'ModifyChaptersPP.run.<locals>.<genexpr>9   sF       =I  }HwxiQT@U?VVWXYX]X]^hjoXpWq=r  }Hs   35c                 `   > U TR                  U TTTR                  =(       a    U(       + 5      4$ r   )remove_chaptersr   )fileis_subconcat_optscutsr   s     r!   r:   -ModifyChaptersPP.run.<locals>.remove_chapters;   s.    --dD+tG\G\Gkekaklllr#   Fc              3   6   >#    U  H  nT" US 5      v   M     g7f)TN )r5   in_filer:   s     r!   r7   r8   ?   s     iJhwOGT::Jhs   uncut)_fixup_chapters_mark_chapters_to_removecopydeepcopyr4   _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_removerB   out_filemtime
uncut_filer=   r>   r:   s   `           @@@r!   runModifyChaptersPP.run   s   T"%)%B%BMM$((:./52MM$((#:;<B&D"  0t8O55d:6FG'(dhhz6J6[mfjkrfstuH!%!E!EhFa!bZ$t8Oj! fgt8O.2hhz.BDDTUWDXYcDd+
+""=QGG**=z:JK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 !-GGGG$--E*7G<JJJw+JJx)NN751"":. ". $$r#   c                   ^ U R                   (       aj  SnU(       d  U R                  S5        SnU H0  m[        U4S jU R                    5       5      (       d  M)  STS'   SnM2     U(       a  U R                  S5        U R                  (       aY  SnU(       d  U R                  S5        SnU H  mTS   U R                  ;   d  M  STS'   SnM!     U(       a  U R                  S	5        UR	                  S
 U R
                   5       5        X4$ )NTz"Chapter information is unavailableFc              3   J   >#    U  H  oR                  TS    5      v   M     g7f)r*   N)search)r5   regexr6   s     r!   r7   <ModifyChaptersPP._mark_chapters_to_remove.<locals>.<genexpr>T   s!     \=[E||AgJ//=[s    #removez(There are no chapters matching the regexz'SponsorBlock information is unavailablecategoryz+There are no matching SponsorBlock chaptersc              3   >   #    U  H  u  pUUS S XS4/SS.v   M     g7f)manually_removedzManually removedT)r+   r,   rk   _categoriesrj   NrA   )r5   startends      r!   r7   ri   f   s9       4 3je  */=OPQ!
 3s   )r   rL   anyr   rR   r   )r   r&   r[   warn_no_chapter_to_remover6   s       @r!   rE   )ModifyChaptersPP._mark_chapters_to_removeM   s    ))(,%CD,1)\T=[=[\\\"&AhK05-  )IJ(((,%#HI,1)%Z=D$A$AA"&AhK05- & )LM  4 !22 4 	4 ))r#   c              #   T  #    UR                  S5      =(       d    0 R                  5        Hx  nUR                  S5      nU(       a$  [        R                  R	                  U5      (       d  MA  US   nU[
        R                  ;  a  U R                  SU SU S35        Mt  Uv   Mz     g 7f)Nrequested_subtitlesr(   extz%Cannot remove chapters from external z subtitles; "z" is now out of sync)r4   valuesrT   pathexistsr   SUPPORTED_EXTSrJ   )r   rZ   subsub_filerv   s        r!   rS   $ModifyChaptersPP._get_supported_subsp   s     HH239rAACCwwz*H277>>(#;#;e*C4CCC##&KC5P]^f]gg{$|}N Ds   B&B(c                   ^^^ / mU4S jnU4S jm/ mUU4S jn[        U5       VVs/ s H  u  pEUS   XE4PM     nnn[        R                  " U5        [        R                  " U5      u  pgnU(       Ga  [        R                  " U5      u  pdnUS   US   ::  a  SU;  a  UOU" U5        XEpMA  SU;   aS  SU;   a  [	        US   US   5      US'   GO@US   US   :  a(  US   US'   SUS'   [        R
                  " XS   XE45        GO
SU;   a  SUS'   US   US   ::  a  US   US'   U" U5        XEpM  S	U;   a  [        XS   / S
9n	/ n
US	    HB  nUS   US   :  a  U
R                  U5        US   US   :  d  M.  U	S	   R                  U5        MD     XS	'   US	   U	S	   :w  a0  [        R
                  " XS   Xy45        US   US'   U" U5        XEpGMe  UR                  SU" U5      5        GO%S	U;   a;  S	U;  a5  US   US   :  a(  US   US'   SUS'   [        R
                  " XS   XE45        OS	U;   d   S5       eSUS'   SUS'   US   US   :  a=  [        [        R                  " U5      US   S9n	[        R
                  " XS   Xy45        OPUS   US   :  aD  [        [        R                  " U5      US   S9n[        R
                  " XS   X|45        US   US'   S	U;   a  US	   US	   -   US	'   SU;   a  US   US'   US   US'   U" U5        XEpU(       a  GM  SU;  a  UOU" U5        U R                  T5      T4$ s  snnf )Nc                    > SU ;   d   S5       eT(       a  TS   OS nU(       a"  US   U S   :  a  [        US   U S   5      US'   OTR                  U 5        [        T5      S-
  $ )Nrj   zNot a cut is appended to cutsr-   r,   r+   r   )maxrY   len)r6   last_to_cutr>   s     r!   
append_cutDModifyChaptersPP._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                   > U R                  S[        T5      5      Sp!U[        T5      :  a`  TU   nUS   U S   :  a   U$ US   U S   :  a*  U[        US   U S   5      -  nU[        US   U S   5      -  nUS-  nU[        T5      :  a  M`  U$ )Ncut_idxr   r+   r,   r   )popr   minr   )r6   r   excesscutr>   s       r!   excess_durationIModifyChaptersPP._remove_marked_arrange_sponsors.<locals>.excess_duration   s      eeIs4y91VCI%7m|$*5
 M	 z?Q|_4c#j/1Z=AAFc#l"3Q|_EEF1 CI% Mr#   c                    > SU ;  d   S5       eU S   U S   -
  T" U 5      -
  nUS::  a  g T(       a  TS   S   OSnU R                  X"U-   S9  TR                  U 5        g )Nrj   zCut is appended to chaptersr,   r+   r   r-   )r+   r,   )updaterY   )r6   lengthro   r   new_chapterss      r!   append_chapterHModifyChaptersPP._remove_marked_arrange_sponsors.<locals>.append_chapter   sp    1$C&CC$z]Q|_4q7IIF{4@L$Z0aEHHH?"r#   r+   r,   rj   T_was_cutrn   )r+   rn   r   r   r   zNormal chapters overlap)r+   )	enumerateheapqheapifyheappopr   heappushdictrY   
setdefaultrF   rG   _remove_tiny_rename_sponsors)r   r&   r   r   ir6   _cur_icur_chapterafter_ccur_catscat_start_end	after_curr>   r   r   s                @@@r!   rI   0ModifyChaptersPP._remove_marked_arrange_sponsors}   s   	!	" 	# 9B(8KL8KQ|_a+8KLh %h 7+mmH-GA! :&!L/9#+;#>JNP[\%&{ ;&q=.1+j2I1Z=.YK
+
 !,q}<&1*&=AlO$(AjMNN8oq-DEQ*.J' z*a
m;./oK
+";/)*; !K/";Z=VXYG!H)4])C(+ao=$OOM:(+a
m;#M299-H	 *D
 2:."=1W]5KKx,2G1XY23L/J/&{3-.{  &&y*Q-@ +--q2Hz*Qz]:&1*&=AlO$(AjMNN8oq-DE %)D+DD)*.J' $*z*Qz]:"4==#=!J-XGNN8l.CU-TUz][%<< $T]]1%5+jBY ZINN8.Eu-XY$/
$;AjM K/'2='AAmDT'TAm$+#.y#9AiL*+L/J'{+%&{o hp $;6J	FT00>DD{ Ms   L?c           
      X   / n[        U5       GH  u  p4SU;   d  SU;   a  US   US   -
  [        :  a  U(       d"  U[        U5      S-
  :  a  US   XS-      S'   MM  OdUS   nU[        U5      S-
  :  aC  XS-      nSU;   nSU;   nSU;  a  U(       a  U(       a  SU;   a  U(       d  U(       a
  US   US'   M  US   US'   M  UR                  SS 5        UR                  SS 5      n	U	(       a  [	        U	S S	9u  n
  pUR                  U
[        S
 U	 5       5      U[        S U	 5       5      S.5        U R                  R                  U R                  UR                  5       5      US'   U(       a&  SUS   ;   a  US   S   US   :X  a  US   US   S'   GM  UR                  U5        GM     U$ )Nr   rn   r,   r+   r   r-   
categoriesc                     U S   U S   -
  $ )Nr   r   rA   )r6   s    r!   <lambda>?ModifyChaptersPP._remove_tiny_rename_sponsors.<locals>.<lambda>)  s    !qQRtr#   )keyc              3   *   #    U  H	  oS    v   M     g7f)r   NrA   r5   xs     r!   r7   @ModifyChaptersPP._remove_tiny_rename_sponsors.<locals>.<genexpr>,  s     ,@4aqT4   c              3   *   #    U  H	  oS    v   M     g7f)   NrA   r   s     r!   r7   r   .  s     0Dt!1tr   )rk   r   namecategory_namesr*   )r   _TINY_CHAPTER_DURATIONr   r   r   r   r
   _downloaderevaluate_outtmplr   rF   rY   )r   r&   r   r   r6   old_cnext_cprev_is_sponsornext_is_sponsorcatsrk   r   category_names                r!   r   -ModifyChaptersPP._remove_tiny_rename_sponsors
  s   h'DA 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                     Un[        US5      nU(       a  U R                  US U 5       5      nU R                  SU 35        U R                  U/[	        U5      -  Xc5        XQ:w  a  U R                  US S9  U$ )Ntempc              3   F   #    U  H  oS    US   4  H  o"v   M     M     g7f)r+   r,   NrA   )r5   r6   ts      r!   r7   3ModifyChaptersPP.remove_chapters.<locals>.<genexpr>=  s*     4x1ZfXgijkuivWwRSQWwQs   !zRemoving chapters from )msg)r   r   rL   concat_filesr   _delete_downloaded_files)r   filenameranges_to_cutr=   r   rB   r`   s          r!   r:    ModifyChaptersPP.remove_chapters9  s|    $Wf5**74x4xyG0
;<7)c+&66N))'t)<r#   c                     0 /nU  HK  nUS   S:X  a  US   S US   S'   M  US   S US   S'   US   U:  d  M3  UR                  SUS   S 05        MM     U$ )Nr+   r   r,   z.6fr-   r0   r2   )rY   )chapters_to_remover)   optsss       r!   rO   "ModifyChaptersPP._make_concat_optsD  s}    t#A!#)*:s(;R#&'oc%:DHZ }x'Y1Z=*=?@ $ r#   )r   r   r   r   r   )NNN)F)__name__
__module____qualname____firstlineno__"DEFAULT_SPONSORBLOCK_CHAPTER_TITLEr   r   _restrict_torc   rE   rS   rI   r   r:   staticmethodrO   __static_attributes__rA   r#   r!   r   r      sd    0/Qch0 u-2% .2%h!*FKEZ-^	  r#   r   )rF   r   rT   commonr   ffmpegr   r   sponsorblockr   utilsr	   r
   r   r   r   r   rA   r#   r!   <module>r      s8      	 ! C ( F F %I "B* Br#   