
    :ShCK                        U d dl Z d dlmZ d dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
mZmZmZmZmZ d dlZd dlZd dlZd dlmZmZmZmZmZ d dlmZmZ d dlmZ d dlm Z  d d	lm!Z! d d
l"m#Z# d dl$m%Z%  ej&        ej'                    ej(        e)          Z*ej+        e,d<   dedeeedfde-de-de.de/de/de0dee!ee0ge!f         f         fdZ1de/de/de0dee2gej3        f         fdZ4de/de/de0dee2gej3        f         fdZ5de/de/de0dee2gej3        f         fdZ6 G d d          Z7 G d  d!e           Z8d"d#d$d%Z9ee-e-f         e,d&<   d'e-d(e.de.fd)Z: G d* d+e e7          Z; G d, d-e           Z<dS ).    N)contextmanager)	timedelta)castCallableDictListOptionalUnion)DEFAULT_ENCODINGDEFAULT_MAX_SUBTITLE_SECONDSDEFAULT_SCALE_FACTORDEFAULT_START_SECONDSSAMPLE_RATE)ffmpeg_bin_pathsubprocess_args)GenericSubtitle)TransformerMixin)Pipeline)make_subtitle_parser)SubtitleScaler)levelloggersrtFfmtencodingcachingmax_subtitle_secondsstart_secondsscale_factorreturnc                     t          | f|||d|j        |k    sJ j        |k    sJ j        k    sJ fd}||S  ||          S )N)r   r   r   r   c           
      x    t          dfdt          |           fdt          t          |           fg          S )Nparsescalespeech_extract)sample_rater   framerate_ratio)r   r   SubtitleSpeechTransformerr   )r'   parserr   s    c/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/ffsubsync/speech_transformers.pysubpipe_makerz4make_subtitle_speech_pipeline.<locals>.subpipe_maker9   sU    &!.99:$-$/&3(7  
 
 	
    )r   r   r   r   )	r   r   r   r   r   r   r)   kwargsr+   s	       ` `  r*   make_subtitle_speech_pipeliner.   "   s     ~%
!5'
 
 
 
 ?h&&&&&*>>>>>=0000
 
 
 
 
 
  }\***r,   r&   
frame_ratenon_speech_labelc           	      @   	
 	 ddl m	mm}m} n.# t
          $ r!}t                              d           |d }~ww xY wd
 z   |
d          } ||d z  t          d z            d	 z  
          dt          dt          j        f	
 fd}|S )Nr   )BufferAudioSource
ADSFactoryAudioEnergyValidatorStreamTokenizera  Error: auditok not installed!
        Consider installing it with `pip install auditok`. Note that auditok
        is GPLv3 licensed, which means that successfully importing it at
        runtime creates a derivative work that is GPLv3 licensed. For personal
        use this is fine, but note that any commercial use that relies on
        auditok must be open source as per the GPLv3!*
        *Not legal advice. Consult with a lawyer.
           2   )sample_widthenergy_thresholdg?   g      ?)	validator
min_length
max_lengthmax_continuous_silenceasegmentr    c                     | 
	d          }                     |dz            }|                                                     |          }t          |           	z  z   dz
  z  }t	          j        |dz             }|D ]}d||d         <   dz
  ||d         dz   <   t	          j        t	          j        |          d d         dd          S )N   )data_buffersampling_rater8   channels      ?)audio_source	block_durr6           )adsopentokenizelennpzerosclipcumsum)r?   asourcerJ   tokenslengthmedia_bstringtokenr3   r2   bytes_per_framer/   frames_per_windowr0   r&   	tokenizers          r*   _detectz'_make_auditok_detector.<locals>._detecto   s    ## $(	
 
 
 nn'S;=NnOO


##C((MM_,/@@1D !,, 	A 	AE&)M%(#*:S*@M%(Q,''wry//4c3???r,   )auditokr2   r3   r4   r5   ImportErrorr   errorintbytesrN   ndarray)r&   r/   r0   r4   r5   er;   rZ   r3   r2   rW   rX   rY   s   ```     @@@@@r*   _make_auditok_detectorrb   O   sZ   	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
    		
 		
 		
  O"k1$$/TVWWWI$q;''#k1	  I@% @BJ @ @ @ @ @ @ @ @ @ @ @ @ @& Ns    
A=Ac                     dd l }|                                                    d           d| z  }t          |z  dz             ddt          dt
          j        ffd}|S )	Nr      rE         ?r6   r?   r    c                 p   g }d}t          dt          |           z            D ]|}t          |z   t          |           z            }	 
                    | |z  |z                     }n# t          $ r
 d}|dz  }Y nw xY w|                    |rdn	           }t          j        |          S )Nr   )r&   FrA   rE   )rangerM   min	is_speech	ExceptionappendrN   array)r?   rU   failuresstartstopri   rW   r/   rX   r0   vads         r*   rZ   z)_make_webrtcvad_detector.<locals>._detect   s    1c(mm>@QRR 	I 	IEu00#h--?2RSSDMMU_4to7MMN * *  		    !	A   	!G7GHHHHx&&&s   %A33BB)	webrtcvadVadset_moder^   r_   rN   r`   )	r&   r/   r0   rq   window_durationrZ   rW   rX   rp   s	    ``   @@@r*   _make_webrtcvad_detectorru      s     
--//CLLOOOK'OOj83>??O'% 'BJ ' ' ' ' ' ' ' ' ' '" Nr,   c                    	
 dd l 
d| z  }t          |z  dz             d
j                            dddd          \  	}dd	t          j        f	
fd
}|S )Nr   rE   re   rA   zsnakers4/silero-vad
silero_vadF)repo_or_dirmodelforce_reloadonnxr    c                 l   t          j        | t           j                                      t           j                  dz  }                     |           } g }d}t          dt          |           z  	          D ]}t          |	z   t          |                     }	  
| |z  |z                     	                                }n5# t          $ r( sdt                              d           d}|dz  }Y nw xY w|                    dd|z
  dz
  z  z
             t          j        |          S )Ni   r   Tz*exception occurred during speech detectionrI   rA   rE   )rN   
frombufferint16astypefloat32FloatTensorrg   rM   rh   itemrj   r   	exceptionrk   rl   )r?   rU   rm   rn   ro   speech_probrW   exception_loggedr/   rX   ry   r0   torchs         r*   rZ   z&_make_silero_detector.<locals>._detect   s]   =2844;;BJGG7S$$X..1c(mm>@QRR 	W 	WEu00#h--@@D#eU_4to7MMN  $&&     ' S'+$$$%QRRR!A   k(9cDT>T'U!UVVVVx&&&s   ,C/C=<C=)r   r^   hubloadrN   r`   )r&   r/   r0   rt   _rZ   rW   r   rX   ry   r   s    ``   @@@@@r*   _make_silero_detectorr      s     LLLK'OOj83>??Oy~~)	   HE1 'RZ ' ' ' ' ' ' ' ' ' ' ' ', Nr,   c                   X    e Zd ZddZedee         fd            Zdej	        dd fdZ
dS )!ComputeSpeechFrameBoundariesMixinr    Nc                 "    d | _         d | _        d S Nstart_frame_
end_frame_selfs    r*   __init__z*ComputeSpeechFrameBoundariesMixin.__init__   s    +/)-r,   c                 @    | j         | j        d S | j        | j         z
  S r   r   r   s    r*   
num_framesz,ComputeSpeechFrameBoundariesMixin.num_frames   s'    $(?4!222r,   speech_framesc                     t          j        |dk              d         }t          |          dk    rLt          t          j        |                    | _        t          t          j        |                    | _        | S )Nre   r   )rN   nonzerorM   r^   rh   r   maxr   )r   r   nzs      r*   fit_boundariesz0ComputeSpeechFrameBoundariesMixin.fit_boundaries   s\     Z+,,Q/r77Q;; #BF2JJD!"&**ooDOr,   )r    N)__name__
__module____qualname__r   propertyr	   r^   r   rN   r`   r    r,   r*   r   r      sy        . . . . 3HSM 3 3 3 X3
Z	,     r,   r   c                        e Zd Z	 	 	 	 	 ddededededed	ee         d
ee         dededdf fdZdeddfdZ	dedd fdZ
dej        fdZ xZS )VideoSpeechTransformerr   NFrp   r&   r/   r0   r   ffmpeg_path
ref_streamvlc_modegui_moder    c
                     t          t          |                                            || _        || _        || _        || _        || _        || _        || _	        || _
        |	| _        d | _        d S r   )superr   r   rp   r&   r/   _non_speech_labelr   r   r   r   r   video_speech_results_)r   rp   r&   r/   r0   r   r   r   r   r   	__class__s             r*   r   zVideoSpeechTransformer.__init__   ss     	$d++44666 +)(8"/*5)3&&;?"""r,   fnamec                    g }g }| j         0t          t          dj        t	          d                              }n| j         g}|D ](}t          d| j        | j                  g}|                    dddd|d	d
                    |          dddg
           t          j
        |fi t          d          }t          j        |                                d                   }|j        dk    r nt!          t"          t%          | j                                                |          }	|	j        d         d         }
|                    |
           |                    |
j                   *t1          |          dk    r3| j         d}nd                    | j                   }t3          |          |t5          t7          j        |                             }|j        | _        d S )Nz0:s:{}r:   ffmpegffmpeg_resources_path	-loglevelfatal-nostdin-i-mapz{}-fr   -Tinclude_stdoutr   )r   rH   rA   z*Video file appears to lack subtitle streamzStream {} not found)r   listmapformatrg   r   r   r   extend
subprocessPopenr   ioBytesIOcommunicate
returncoder   r   r.   r   fitstepsrk   	max_time_rM   
ValueErrorr^   rN   argmaxsubtitle_speech_results_r   )r   r   embedded_subsembedded_subs_timesstreams_to_trystreamffmpeg_argsprocessoutputpipespeech_step	error_msgsubs_to_uses                r*   try_fit_using_embedded_subsz2VideoSpeechTransformer.try_fit_using_embedded_subs   s    ?"(,S%((-K-K(L(LNN"o.N$  	>  	>Fdm4CS  K
 KK''   !& .dCCC G Z 3 3 5 5a 899F!Q&&-D<NOOO  c&kk  *R.+K  ---&&{'<====}""&H		188II	Y'''#C	2E(F(F$G$GH%0%I"""r,   c                 
   d| j         v r| j        | j                            d          r}	 t                              d           |                     |           t                              d           | S # t          $ r$}t                              |           Y d }~nd }~ww xY w	 t          t          j	        |t          d| j        | j                            d         d	                   | j        z
  }n3# t          $ r&}t                              |           d }Y d }~nd }~ww xY wd
| j         v r!t          | j        | j        | j                  }nkd| j         v r!t'          | j        | j        | j                  }nAd| j         v r!t)          | j        | j        | j                  }nt+          d| j         z            g }t          d| j        | j                  g}| j        dk    r7|                    dt/          t1          | j                            g           |                    dddd|g           | j        6| j                            d          r|                    d| j        g           |                    ddddddddd t/          | j                  d!g           t3          j        |fi t7          d"#          }d$}	|	| j        z  | j        z  }
d%}d&}d }i }| j        }| j        r)	 dd'lm} t<          j        |d(<   n# t@          $ r d)}Y nw xY w|tB          d0d*            }|J tE          j#                    } ||          5  tI          j$        d1|| j%        d+|5 }	 |j        &                    |
|z            }|sntO          |          t          |	          z  | j        z  }|||z   |k    r||z
  }||z  }|(                    |           | j%        rE|CtS          d,tU          |d-z  |z            z             t<          j        +                                 |r*| j        sJ tS          |&                                           d| j         vrtY          j-        |tX          j.                  }|/                     ||                     2	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |0                                 tO          |          dk    rt+          d.          tY          j1        |          | _2        t                              d/tY          j3        | j2                             | S )2Nsubsz0:s:z&Checking video for subtitles stream...z...success!ffprober   )cmdr   durationwebrtcr[   silerozunknown vad: %sr   r   z-ss)secondsr   r   r   r   z0:a:r   r   s16lez-ac1z-acodec	pcm_s16lez-afzaresample=async=1z-arr   Tr   r6   i'  rI   )redirect_stderrfileFc              3      K   | V  d S r   r   )enter_results    r*   r   z3VideoSpeechTransformer.fit.<locals>.redirect_stderr  s      """"""r,   )totaldisablez%dg      Y@z_Unable to detect speech. Perhaps try specifying a different stream / track, or a different vad.ztotal of speech segments: %sr   r   )4rp   r   
startswithr   infor   rj   floatr   prober   r   r   r   warningru   r&   r/   r   rb   r   r   r   strr   r   r   r   
contextlibr   sysstdoutr\   r   r   StringIOtqdmr   readrM   updateprintr^   flushrN   r}   uint8rk   waitconcatenater   sum)r   r   r   ra   total_durationdetectorrU   r   r   rW   rX   windows_per_buffersimple_progressr   tqdm_extra_argsshould_print_redirected_stderrpbar_outputpbarin_bytesnewstuffs                       r*   r   zVideoSpeechTransformer.fit0  s   TXO#t'A'A&'I'I#DEEE00777M***   A	"L+% M262B       !+,	 	 $
% N  	" 	" 	"NN1!NNNNNN	" tx/ $/43I HH $(""- $/43I HH !!, $/43I HH .9:::*,$-t?O  

 !!	$*<===>>   	K*dEJKKK?&4?+E+Ef+M+M&8999#DO$$	
 	
 	
 ";WW/QU2V2V2VWW+do=AQQ")-&= 	77666666*-*'' 7 7 716...7"# # # ^# ***kmm_[)) 	= 	= $dm ?N  ==&~22),>>   H $ "8}}u_/E/EEWH&2+h6GG#1O#C#x/OKK)))} +)CdS5)@>)Q%R%RRSSS
((***5 2#},,}k..00111tx//#%=28#D#D!(((););<<</=
 = = = = = = = = = = = = = = =	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=8 	}""Y   &(^M%B%B"2BF4;U4V4VWWWsz   A
A7 7
B%B  B%)AC; ;
D+D&&D+8L LLS/D4R0$S0R4	4S7R4	8SSSc                     | j         S r   )r   r   r   s     r*   	transformz VideoSpeechTransformer.transform  s    ))r,   )r   NNFF)r   r   r   r   r^   r   r	   boolr   r   r   rN   r`   r  __classcell__r   s   @r*   r   r      s>        %)$(@ @@ @ 	@
  @ @ c]@ SM@ @ @ 
@ @ @ @ @ @01J 1J 1J 1J 1J 1JfE E%= E E E EN*rz * * * * * * * *r,   r   )}])({[_PAIRED_NESTERcontentis_beginning_or_endc                    |                                  } t          |           dk    rdS | d         t                                          v r| d         t          | d                  k    rdS |rd|                                 v rdS d| v rdS dS )Nr   TrH   englishz - F)striprM   r  keyslower)r  r  s     r*   _is_metadatar    s    mmooG
7||qt
n))++++BK>'!*555t ''4G45r,   c            	       f     e Zd Z	 ddedededdf fdZd	ee         dd fd
Zde	j
        fdZ xZS )r(   r   rE   r&   r   r'   r    Nc                     t          t          |                                            || _        || _        || _        d | _        d | _        d S r   )r   r(   r   r&   r   r'   r   r   )r   r&   r   r'   r   s       r*   r   z"SubtitleSpeechTransformer.__init__  sM     	'..77999 +"/&5>B%(,r,   r   c                    d}|D ])}t          ||j                                                  }*|| j        z
  | _        t          j        t          || j        z            dz   t                    }t          d          }d}t          |          D ]\  }}t          |j        |dk    p|dz   t          |          k              r6t          t          |j                                        | j        z
  | j        z                      }	t!          ||	          }|j                                        |j                                        z
  }
|	t          t          |
| j        z                      z   }t          ||          }t!          d| j        z  d          ||	|<   || _        |                     | j                   | S )Nr   r6   )dtypeinfrA   rE   )r   endtotal_secondsr   r   rN   rO   r^   r&   r   	enumerater  r  rM   roundrn   rh   r'   r   r   )r   r   r   max_timesubsamplesstart_frame	end_frameirn   r   r  s               r*   r   zSubtitleSpeechTransformer.fit  s    	> 	>C8SW%:%:%<%<==HH!D$66(3x$*::;;a?uMMMEll	oo 	F 	FFAsCKa)E1q5CII3EFF Y,,..1CCtGWW  E
 k511Kw,,..1H1H1J1JJH#eHt/?$?@@AAACIs++I!$S4+?%?!E!EGE#I(/%D9:::r,   c                 "    | j         J | j         S r   )r   r  s     r*   r  z#SubtitleSpeechTransformer.transform  s    ,888,,r,   )r   rE   )r   r   r   r^   r   r   r   r   r   rN   r`   r  r	  r
  s   @r*   r(   r(     s        QT- --/2-IN-	- - - - - -_- 6Q    2-rz - - - - - - - -r,   r(   c                   F     e Zd Zdeddf fdZddZdej        fdZ xZ	S )DeserializeSpeechTransformerr0   r    Nc                 r    t          t          |                                            || _        d | _        d S r   )r   r+  r   r   deserialized_speech_results_)r   r0   r   s     r*   r   z%DeserializeSpeechTransformer.__init__   s6    *D11::<<<(8BF)))r,   c                     t          j        |          }t          |d          r)d|j        v r	|d         }nt	          d|j        z            | j        ||dk     <   || _        | S )NfilesspeechzCcould not find "speech" array in serialized file; only contains: %srE   )rN   r   hasattrr/  r   r   r-  )r   r   r   r0  s       r*   r   z DeserializeSpeechTransformer.fit  s|    67## 	6<'') 9;A<H    $5v|,2)r,   c                 "    | j         J | j         S r   )r-  r  s     r*   r  z&DeserializeSpeechTransformer.transform  s    0<<<00r,   )r    r+  )
r   r   r   r   r   r   rN   r`   r  r	  r
  s   @r*   r+  r+    s        G G4 G G G G G G
   1rz 1 1 1 1 1 1 1 1r,   r+  )=osr   r   loggingr   r   r   datetimer   typingr   r   r   r   r	   r
   r   numpyrN   r   ffsubsync.constantsr   r   r   r   r   ffsubsync.ffmpeg_utilsr   r   ffsubsync.generic_subtitlesr   ffsubsync.sklearn_shimr   r   ffsubsync.subtitle_parserr   ffsubsync.subtitle_transformersr   basicConfigINFO	getLoggerr   r   Logger__annotations__r   r  r^   r   r.   r_   r`   rb   ru   r   r   r   r  r  r(   r+  r   r,   r*   <module>rC     s   					 % % % % % %  				     



       > > > > > > > > > > > > > > > >                    D C C C C C C C 7 7 7 7 7 7 3 3 3 3 3 3 + + + + + + : : : : : : : : : : : :  ', ' ' ' '**844 4 4 4 $ <..*+ *+	*+*+ *+ 	*+
 *+ *+ 8Xugx/001*+ *+ *+ *+Z33"%39>3ugrz!"3 3 3 3l"%9>ugrz!"   >(("%(9>(ugrz!"( ( ( (V       *T* T* T* T* T*- T* T* T*p 
		" "S#X   # D T    "&- &- &- &- &- 02S &- &- &-R1 1 1 1 1#3 1 1 1 1 1r,   