Ë
    �BæjÍ  ã                  óÞ   — U d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
Zdd„Ze G d„ d«      «       Zdd	„Zdd
„Zdd„Z ej"                  d«      Zdd„Zdd„Zi Zded<   dd„Zdd„Zy)z`ffmpeg/ffprobe helpers: stream selection, audio extraction, subtitle extraction, frame sampling.é    )ÚannotationsN)Ú	dataclass)ÚPathc                óF   — t        j                  | dd¬«      j                  S )NT)ÚcheckÚcapture_output)Ú
subprocessÚrunÚstdout)Úcmds    ú1/root/repos/pocs/video-evals/src/dubeval/media.pyÚ_runr      s   € Ü�>‰>˜# T¸$Ô?×FÑFÐFó    c                  óT   — e Zd ZU ded<   ded<   ded<   ded<   ded<   d	ed
<   d	ed<   y)ÚProber   ÚpathÚfloatÚdurationÚintÚwidthÚheightÚfpsú
list[dict]ÚaudioÚ	subtitlesN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r   r   r   r      s'   … à
ƒJØƒOØƒJØƒKØ	ƒJØÓØÔr   r   c                ój  — t        j                  t        dddddddt        | «      g«      «      }t	        d„ |d	   D «       «      }d
„ |d   j                  d«      D «       \  }}g g }}|d	   D ]‹  }|d   |j                  di «      j                  d«      |j                  d«      dœ}|d   dk(  r!|j                  i |¥dt        |«      i¥«       Œc|d   dk(  sŒl|j                  i |¥dt        |«      i¥«       Œ� t        | t        |d   d   «      t        |d   «      t        |d   «      ||z  ||«      S )NÚffprobeú-vÚerrorz-show_formatz-show_streamsz-ofÚjsonc              3  ó2   K  — | ]  }|d    dk(  sŒ|–— Œ y­w)Ú
codec_typeÚvideoNr    )Ú.0Úss     r   ú	<genexpr>zprobe.<locals>.<genexpr>   s   è ø€ ÒJ�q¨q°©À'Ó/I”ÑJùs   ‚�Ústreamsc              3  ó2   K  — | ]  }t        |«      –— Œ y ­w©N)r   )r)   Úxs     r   r+   zprobe.<locals>.<genexpr>   s   è ø€ ÒA˜1”�A—ÑAùs   ‚Úr_frame_rateú/ÚindexÚtagsÚlanguageÚ
codec_name)Ústream_indexÚlangÚcodecr'   r   ÚsubtitleÚformatr   r   r   )r%   Úloadsr   ÚstrÚnextÚsplitÚgetÚappendÚlenr   r   r   )	r   Úinfor(   ÚnumÚdenr   Úsubsr*   Úentrys	            r   ÚproberG      sG  € Ü�:‰:”d˜I t¨W°nÀoÐW\Ð^dÔfiÐjnÓfoÐpÓqÓr€DÜÑJ˜D ™OÔJÓJ€EÙA  nÑ 5× ;Ñ ;¸CÓ @ÔA�H€CˆØ�bˆ4€EØ�)‰_ò 7ˆØ!" 7¡°Q·U±U¸6À2Ó5F×5JÑ5JÈ:Ó5VÐab×afÑafÐgsÓatÑuˆØˆ\‰?˜gÒ%Ø�L‰LÐ7˜EÐ7 7¬C°«JÑ7Õ8Øˆ|‰_ 
Ó*Ø�K‰KÐ5˜5Ð5 '¬3¨t«9Ñ5Õ6ð7ô �”u˜T (™^¨JÑ7Ó8¼#¸eÀG¹nÓ:MÌsÐSXÐYaÑSbÓOcØ�s‘˜E 4ó)ð )r   c                ó’   — |j                  «       s6t        dddddt        | «      dd|› �dd	d
t        |«      t        |«      g«       |S )NÚffmpegr#   r$   ú-yú-iú-mapz0:a:z-acÚ1z-ar©Úexistsr   r<   )ÚsrcÚaudio_indexÚdstÚsrs       r   Úextract_audiorT   +   sK   € Ø�:‰:Œ<Üˆh˜˜g t¨T´3°s³8¸VÀtÈKÈ=ÐEYØ�S˜%¤ R£¬#¨c«(ð4ô 	5à€Jr   c                óx   — |j                  «       s)t        dddddt        | «      dd|› �t        |«      g	«       |S )NrI   r#   r$   rJ   rK   rL   z0:s:rN   )rP   Ú	sub_indexrR   s      r   Úextract_subtitlesrW   2   s=   € Ø�:‰:Œ<Üˆh˜˜g t¨T´3°s³8¸VÀtÈIÈ;ÐEWÔY\Ð]`ÓYaÐbÔcØ€Jr   z=(\d+):(\d+):(\d+)[,.](\d+)\s*-->\s*(\d+):(\d+):(\d+)[,.](\d+)c                óX  — g }t        j                  d| j                  dd¬«      j                  «       «      D ]ê  }|j                  «       j	                  «       }t        |«      D ]¼  \  }}t        j                  |«      }|sŒ|j                  «       D �cg c]  }t        |«      ‘Œ }}|d   dz  |d   dz  z   |d	   z   |d
   dz  z   }	|d   dz  |d   dz  z   |d   z   |d   dz  z   }
|j                  |	|
dj                  ||dz   d  «      j                  «       dœ«        Œê Œì |S c c}w )Nz\n\s*\nzutf-8Úreplace)ÚencodingÚerrorsr   i  é   é<   é   é   éè  é   é   é   é   ú )ÚstartÚendÚtext)Úrer>   Ú	read_textÚstripÚ
splitlinesÚ	enumerateÚ_TCÚsearchÚgroupsr   r@   Újoin)r   ÚcuesÚblockÚlinesÚiÚlineÚmr/   Úgrf   rg   s              r   Ú	parse_srtry   ;   s3  € Ø€DÜ—‘˜* d§n¡n¸gÈi nÓ&X×&^Ñ&^Ó&`Óaò 	ˆØ—‘“×(Ñ(Ó*ˆÜ  Ó'ò 	‰GˆAˆtÜ—
‘
˜4Ó ˆAÚØ%&§X¡X£ZÖ0 ”S˜•VÐ0�Ð0Ø˜!™˜t™ a¨¡d¨R¡iÑ/°!°A±$Ñ6¸¸1¹À¹ÑD�Ø˜‘d˜T‘k A a¡D¨2¡IÑ-°°!±Ñ4°q¸±t¸d±{ÑB�Ø—‘ e°CÀÇÁÈ%ÐPQÐTUÑPUÐPVÈ-ÓAX×A^ÑA^ÓA`ÑaÔbÙñ	ð	ð €Kùò 1s   ÂD'c                ó|  — t        | «      }t        t        |j                  |z  |j                  z  dz  «      dz  «      }t        ddddt        d|«      d›dt        | «      d	t        d
||z
  «      d›dd|› d|› d|› �dddddg«      }t        j                  |t        j                  «      j                  d||d«      S )zKRGB frames [N, H, W, 3] decoded with ffmpeg (fast seek), scaled to `width`.r^   rI   r#   r$   z-ssç        z.3frK   z-tgš™™™™™©?z-vfzfps=z,scale=ú:z-fÚrawvideoz-pix_fmtÚrgb24ú-éÿÿÿÿr_   )Úprobe_cachedr   Úroundr   r   r   Úmaxr<   ÚnpÚ
frombufferÚuint8Úreshape)rP   rf   rg   r   r   Úpr   Úraws           r   Úsample_framesrŠ   J   sÊ   € ä�SÓ€AÜ”�q—x‘x %Ñ'¨!¯'©'Ñ1°AÑ5Ó6¸Ñ:Ó;€FÜ
�˜$ ¨´3°s¸E³?À3Ð2GÈ$ÔPSÐTWÓPXØœ˜T 3¨¡;Ó/°Ð4°uÀÀSÀEÈÐQVÐPWÐWXÐY_ÐX`Ð>aØ�j *¨g°sð<ó =€Cô �=‰=˜œbŸh™hÓ'×/Ñ/°°F¸EÀ1ÓEÐEr   zdict[Path, Probe]Ú_PROBESc                óH   — | t         vrt        | «      t         | <   t         |    S r.   )r‹   rG   )r   s    r   r�   r�   W   s!   € Ø”7ÑÜ˜d›Œ�‰Ü�4‰=Ðr   c                óÀ   — t        t        t        d| «      dz  «      «      }t        |d«      \  }}t        |d«      \  }}t        |d«      \  }}|d›d|d›d|d›d|d›�S )	Nr{   r`   i€î6 i`ê  Ú02dr|   ú.Ú03d)r   r‚   rƒ   Údivmod)ÚsecondsÚmsÚhrw   r*   s        r   Útcr•   ]   sr   € Ü	ŒU”3�s˜GÓ$ tÑ+Ó,Ó	-€BÜ�2�yÓ!�E€A€rÜ�2�vÓ�E€A€rÜ�2�tÓ�E€A€rØ�ˆW�A�a˜�W˜A˜a ˜W A b¨ XÐ.Ð.r   )r   z	list[str]ÚreturnÚbytes)r   r   r–   r   )
rP   r   rQ   r   rR   r   rS   r   r–   r   )rP   r   rV   r   rR   r   r–   r   )r   r   r–   r   )rP   r   rf   r   rg   r   r   r   r   r   r–   z
np.ndarray)r’   r   r–   r<   )Ú__doc__Ú
__future__r   r%   ri   r	   Údataclassesr   Úpathlibr   Únumpyr„   r   r   rG   rT   rW   Úcompilern   ry   rŠ   r‹   r   r�   r•   r    r   r   ú<module>rž      s€   ðÚ fÝ "ã Û 	Û Ý !Ý ã óGð ÷ð ó ðó)óóð €b‡j�jÐQÓR€óóFð  €Ð	Ó óô/r   