o
    iE                     @   sp   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
 d
eZdS )    N   )PostProcessor)FFmpegPostProcessorFFmpegSubtitlesConvertorPP)SponsorBlockPP   )PostProcessingError
orderedSetprepend_extensionz"[SponsorBlock]: %(category_names)lc                   @   sh   e Zd ZdeddddZejdddd Zd	d
 Zdd Z	dd Z
dd ZdddZedd ZdS )ModifyChaptersPPNF)sponsorblock_chapter_titleforce_keyframesc                C   sT   t | | t|p
g | _t|pg ttj  | _t|pg | _|| _	|| _
d S 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    r   X/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/postprocessor/modify_chapters.pyr      s   
zModifyChaptersPP.__init__)imagesc                    s   | t|dpg t|dpg \}}|s%|s%g |fS |d }|s<d|dp5||d dg}|| \|d< sMg |fS |d sZd g |fS |d|d d	 d
 }|d< ||dr||d s	d
  d g |fS |dstdd | dddd  D   fdd|d dg}|fdd|D  g }|D ]'\}}	t|j}
t|d}t|| t|	| ||
|
 || q||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                 s   s.    | ]}| d d d| dd V  qdS )inpointg        -outpointinfN)get).0cr   r   r   	<genexpr>9   s   , z'ModifyChaptersPP.run.<locals>.<genexpr>c                    s   |  |  jo| fS r   )remove_chaptersr   )fileis_sub)concat_optscutsr   r   r   r1   ;   s   z-ModifyChaptersPP.run.<locals>.remove_chaptersFc                 3   s    | ]} |d V  qdS )TNr   )r.   in_file)r1   r   r   r0   ?   s    uncut)_fixup_chapters_mark_chapters_to_removecopydeepcopyr-   _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_remover6   out_filemtime
uncut_filer   )r4   r5   r1   r   r   run   sL   

 

 
zModifyChaptersPP.runc                    s   | j r,d}|s| d d}|D ] t fdd| j D r$d d< d}q|r,| d | jrSd}|s:| d d}|D ]  d	 | jv rKd d< d}q<|rS| d
 |dd | jD  ||fS )NTz"Chapter information is unavailableFc                 3   s    | ]
}|  d  V  qdS )r$   N)search)r.   regexr/   r   r   r0   T   s    z<ModifyChaptersPP._mark_chapters_to_remove.<locals>.<genexpr>removez(There are no chapters matching the regexz'SponsorBlock information is unavailablecategoryz+There are no matching SponsorBlock chaptersc                 s   s.    | ]\}}||d d ||dfgddV  qdS )manually_removedzManually removedT)r%   r&   r\   _categoriesr[   Nr   )r.   startendr   r   r   r0   f   s    )r   r@   anyr   rF   r   )r   r    rO   warn_no_chapter_to_remover   rZ   r   r9   M   s8   




z)ModifyChaptersPP._mark_chapters_to_removec                 c   sl    | dpi  D ])}| d}|rtj|sq
|d }|tjvr0| d| d| d q
|V  q
d S )Nrequested_subtitlesr"   extz%Cannot remove chapters from external z subtitles; "z" is now out of sync)r-   valuesrH   pathexistsr   SUPPORTED_EXTSr>   )r   rN   subsub_filerd   r   r   r   rG   p   s   

z$ModifyChaptersPP._get_supported_subsc                    s  g   fdd} fddg fdd}dd t |D }t| t|\}}}|rt|\}}}|d	 |d
 krPd|vrF|n|| ||}}q-d|v rd|v ret|d	 |d	 |d	< nJ|d	 |d	 k r|d	 |d
< d|d< t||d
 ||f n+d|v rd|d< |d	 |d	 kr|d
 |d	< || ||}}q-d|v rt||d	 g d}	g }
|d D ]}|d |d
 k r|
| |d |d	 kr|	d | q|
|d< |d |	d krt||	d
 ||	f |d
 |d	< || ||}}q-|d|| nd|v r0d|vr0|d	 |d	 k r/|d	 |d
< d|d< t||d
 ||f nd|v s9J dd|d< d|d< |d	 |d	 kratt	
||d	 d}	t||	d
 ||	f n%|d	 |d	 krtt	
||d	 d}t||d
 ||f |d	 |d	< d|v r|d |d  |d< d|v r|d |d< |d
 |d	< || ||}}|s0d|vr|n|| |  fS )Nc                    sb   d| v sJ d r d nd }|r&|d | d kr&t |d | d |d< n |  t d S )Nr[   zNot a cut is appended to cutsr'   r&   r%   r   )maxrM   len)r/   last_to_cutr5   r   r   
append_cut   s   
zDModifyChaptersPP._remove_marked_arrange_sponsors.<locals>.append_cutc                    s   |  dt d}}|t k rH | }|d | d kr 	 |S |d | d kr>|t|d | d 7 }|t|d | d 8 }|d7 }|t k s|S )Ncut_idxr   r%   r&   r   )poprl   minrk   )r/   rp   excesscutrn   r   r   excess_duration   s   zIModifyChaptersPP._remove_marked_arrange_sponsors.<locals>.excess_durationc                    sh   d| vsJ d| d | d   |  }|dkrd S r"d d nd}| j ||| d |  d S )Nr[   zCut is appended to chaptersr&   r%   r   r'   )r%   r&   )updaterM   )r/   lengthr_   )ru   new_chaptersr   r   append_chapter   s   zHModifyChaptersPP._remove_marked_arrange_sponsors.<locals>.append_chapterc                 S   s   g | ]\}}|d  ||fqS r%   r   )r.   ir/   r   r   r   
<listcomp>   s    zDModifyChaptersPP._remove_marked_arrange_sponsors.<locals>.<listcomp>r&   r%   r[   T_was_cutr^   )r%   r^   r   r   rp   zNormal chapters overlaprz   )	enumerateheapqheapifyheappoprk   heappushdictrM   
setdefaultr:   r;   _remove_tiny_rename_sponsors)r   r    ro   ry   _cur_icur_chapterr{   r/   after_ccur_catscat_start_end	after_curr   )r5   ru   rx   r   r=   }   s   	








Xz0ModifyChaptersPP._remove_marked_arrange_sponsorsc              	   C   s  g }t |D ]\}}d|v sd|v rj|d |d  tk rj|s2|t|d k r1|d ||d  d< qn8|d }|t|d k rc||d  }d|v }d|v }d|vrT|rT|r\d|v rc|sc|rc|d |d< q|d |d< q|dd  |dd }	|	rt|	dd	 d
\}
}}}||
tdd |	D |tdd |	D d | j| j	|
 |d< |rd|d v r|d d |d kr|d |d d< q|| q|S )Nr}   r^   r&   r%   r   r'   
categoriesc                 S   s   | d | d  S )Nr   r   r   rZ   r   r   r   <lambda>)  s    z?ModifyChaptersPP._remove_tiny_rename_sponsors.<locals>.<lambda>)keyc                 s       | ]}|d  V  qdS )r   Nr   r.   xr   r   r   r0   ,      z@ModifyChaptersPP._remove_tiny_rename_sponsors.<locals>.<genexpr>c                 s   r   )   Nr   r   r   r   r   r0   .  r   )r\   r   namecategory_namesr$   )r~   _TINY_CHAPTER_DURATIONrl   rq   rr   rv   r	   _downloaderevaluate_outtmplr   r:   rM   )r   r    rx   r{   r/   old_cnext_cprev_is_sponsornext_is_sponsorcatsr\   r   category_namer   r   r   r   
  sJ   z-ModifyChaptersPP._remove_tiny_rename_sponsorsc                 C   sj   |}t |d}|r| |dd |D }| d|  | |gt| || ||kr3| j|d d |S )Ntempc                 s   s*    | ]}|d  |d fD ]}|V  qqdS )r%   r&   Nr   )r.   r/   tr   r   r   r0   =  s   ( z3ModifyChaptersPP.remove_chapters.<locals>.<genexpr>zRemoving chapters from )msg)r
   r   r@   concat_filesrl   _delete_downloaded_files)r   filenameranges_to_cutr4   r   r6   rT   r   r   r   r1   9  s   
z ModifyChaptersPP.remove_chaptersc                 C   sl   i g}| D ].}|d dkr|d d|d d< q|d d|d d< |d |k r3| d|d di q|S )Nr%   r   r&   z.6fr'   r)   r+   )rM   )chapters_to_remover#   optssr   r   r   rC   D  s   z"ModifyChaptersPP._make_concat_opts)NNN)F)__name__
__module____qualname__"DEFAULT_SPONSORBLOCK_CHAPTER_TITLEr   r   _restrict_torW   r9   rG   r=   r   r1   staticmethodrC   r   r   r   r   r      s    
	
4# 
/r   )r:   r   rH   commonr   ffmpegr   r   sponsorblockr   utilsr   r	   r
   r   r   r   r   r   r   r   <module>   s    