ó
    œ“,j¸  ã                   ón   • S SK r S SKrS SKrSSKJr   " S S\R
                  5      rS rS
S jrS r	S	 r
g)é    Né   )Úloggerc                   óD   • \ rS rSrSrS rS r\S 5       rS
S jr	S r
Srg	)Ú
LogCatcheré   zÎThread to keep reading from stderr so that the buffer does not
fill up and stalls the ffmpeg process. On stderr a message is send
on every few frames with some meta information. We only keep the
last ones.
c                 ó´   • Xl         SU l        / U l        SU l        [        R
                  R                  U 5        SU l        SU l        U R                  5         g )NÚ ó    TF)
Ú_fileÚ_headerÚ_linesÚ
_remainderÚ	threadingÚThreadÚ__init__ÚdaemonÚ_should_stopÚstart)ÚselfÚfiles     Ú¥C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\imageio_ffmpeg/_parsing.pyr   ÚLogCatcher.__init__   sH   € ØŒ
ØˆŒØˆŒØˆŒÜ×Ñ×!Ñ! $Ô'ØˆŒØ!ˆÔØ�
‰
�r
   c                 ó   • SU l         g )NT)r   ©r   s    r   Ústop_meÚLogCatcher.stop_me   s
   € Ø ˆÕr
   c                 ó   • U R                   $ )z>Get header text. Empty string if the header is not yet parsed.)r   r   s    r   ÚheaderÚLogCatcher.header   s   € ð �|‰|Ðr
   c                 ó   • US:”  aŒ  [         R                   " 5       U-   nU R                  5       (       a_  [         R                   " 5       U:  aF  [         R                  " S5        U R                  5       (       a  [         R                   " 5       U:  a  MF  SR                  U R                  5      nU R
                  S-   UR                  SS5      -   $ )a  Get the whole text written to stderr so far. To preserve
memory, only the last 50 to 100 frames are kept.

If a timeout is given, wait for this thread to finish. When
something goes wrong, we stop ffmpeg and want a full report of
stderr, but this thread might need a tiny bit more time.
r   g{®Gáz„?ó   
Ú
úutf-8Úignore)ÚtimeÚis_aliveÚsleepÚjoinr   r   Údecode)r   ÚtimeoutÚetimeÚliness       r   Úget_textÚLogCatcher.get_text!   sŒ   € ð �Q‹;Ü—I’I“K 'Ñ)ˆEØ—-‘-—/‘/¤d§i¢i£k°EÓ&9Ü—
’
˜4Ô ð —-‘-—/‘/¤d§i¢i£k°EÕ&9ð —
‘
˜4Ÿ;™;Ó'ˆØ�|‰|˜dÑ" U§\¡\°'¸8Ó%DÑDÐDr
   c                 ód  • [         nU R                  (       Gd\  [        R                  " S5         U R                  R                  S5      nU(       d  GO!UR                  SS5      R                  SS5      nUR                  S5      nU R                  US   -   US'   UR                  S5      U l	        U R                  R                  U5        U R                  (       d[  [        U R                  5      (       a@  SR                  U R                  5      nU =R                  UR!                  SS5      -  sl        O(U R                  (       a  U" U R                  5      U l        U R                  (       d  GM\   U R                  R#                  5         g ! [         a     M)  f = f! [$         a     g f = f)	Nr   é   ó   r!   s   

éÿÿÿÿr#   r$   )Úlimit_linesr   r%   r'   r   ÚreadÚ
ValueErrorÚreplaceÚsplitr   Úpopr   Úextendr   Úget_output_video_liner(   r)   ÚcloseÚ	Exception)r   Úlimit_lines_localÚliner,   r   s        r   ÚrunÚLogCatcher.run3   sC  € ä'Ðà×#×#Ð#Ü�JŠJ�qŒMðØ—z‘z—‘ rÓ*�ö Ùà—<‘<  uÓ-×5Ñ5°g¸uÓEˆDØ—J‘J˜uÓ%ˆEØ—‘¨¨q©Ñ1ˆE�!‰HØ#Ÿi™i¨›mˆDŒOà�K‰K×Ñ˜uÔ%Ø—<—<Ü(¨¯©×5Ñ5Ø"ŸZ™Z¨¯©Ó4�FØ—L’L F§M¡M°'¸8Ó$DÑD•LøØ——Ù/°·±Ó<�”ð+ ×#×#Ò#ð2	Ø�J‰J×ÑÕøô+ ó Úðûô, ó 	Ùð	ús#   °F Å6F" Æ
FÆFÆ"
F/Æ.F/)r   r   r   r   r   r   N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   Úpropertyr   r-   r?   Ú__static_attributes__© r
   r   r   r      s0   † ñòò!ð ñó ðôEõ$ r
   r   c                 óÄ   • SnU  HX  nUR                  5       nUR                  S5      (       a  SnM-  U(       d  M6  UR                  S5      (       d  MN  SU;   d  MV  Us  $    g)zSGet the line that defines the video stream that ffmpeg outputs,
and which we read.
Fs   Output Ts   Stream s    Video:N)ÚlstripÚ
startswith)r,   Ú	in_outputr>   Úslines       r   r:   r:   V   sV   € ð €IÛˆØ—‘“ˆØ×Ñ˜J×'Ñ'ØŠIßˆYØ×Ñ 
×+Ó+°
¸eÕ0CØ’ò r
   c                 ó<   • [        U 5      SU-  :”  a	  S/X* S -   n U $ )z(When number of lines > 2*N, reduce to N.é   s#   ... showing only last few lines ...N)Úlen)r,   ÚNs     r   r3   r3   d   s*   € ä
ˆ5ƒz�A˜‘EÓØ7Ð8¸5ÀÀ¸:ÑEˆØ€Lr
   c                  ó  • [        U 5      S:X  a  [        U S   5      $ [        U 5      S:X  a   S[        U S   5      -  [        U S   5      -   $ [        U 5      S:X  a2  S[        U S   5      -  S[        U S   5      -  -   [        U S   5      -   $ g)zRconverts a time to second. Either cvsecs(min, secs) or
cvsecs(hours, mins, secs).
r   r   rO   é<   é   i  N)rP   Úfloat)Úargss    r   ÚcvsecsrW   k   sŠ   € ô ˆ4ƒy�Aƒ~Ü�T˜!‘W‹~ÐÜ	ˆT‹�a‹Ø”E˜$˜q™'“NÑ"¤U¨4°©7£^Ñ3Ð3Ü	ˆT‹�a‹Ø”e˜D ™G“nÑ$ r¬E°$°q±'«NÑ':Ñ:¼UÀ4ÈÁ7»^ÑKÐKð 
r
   c                 óü  • U R                  5       n0 nUS   R                  SS5      S   R                  S5      S   nUR                  5       S-   US   R                  5       -   US'   U Vs/ s H2  oDR                  5       R	                  S5      (       d  M(  S	U;   d  M0  UPM4     nnUS   nUR                  S
S5      S   R                  5       R                  SS5      S   R                  5       US'   [
        R                  " SUR                  S
S5      S   5      S   R                  5       US'   U Vs/ s H2  oDR                  5       R	                  S5      (       d  M(  SU;   d  M0  UPM4     nn[        U5      S:”  aL  US   nUR                  SS5      S   R                  5       R                  SS5      S   R                  5       US'   Sn	US   4 HB  n[
        R                  " SU5      n
U
(       d  M#  [        U
S   S   R                  5       5      n	MD     X’S'   US   n[
        R                  " SU5      nXkR                  5       UR                  5       S-
   R                  S5      n[        [        [        U5      5      US'   US   n[
        R                  " SU5      nXkR                  5       UR                  5       S-
   R                  S5      n[        [        [        U5      5      US'   US   US   :w  a,  [        R                   " SR#                  US   US   5      5        [
        R$                  " S5      nUR                  U 5      nSnUb  UR'                  5       S   n[        U5      US'   U Vs/ s H  nSU;   d  M  UPM     snS   n[
        R                  " SU5      nSnUb:  XkR                  5       S-   UR                  5        R                  S5      n[)        U6 nXòS'   U$ s  snf s  snf s  snf )Nr   Úversionr   r2   Ú	CopyrightÚ Úffmpeg_versionzStream z Video: zVideo: Úcodecz,\s*(?![^()]*\))Úpix_fmtz Audio: zAudio: Úaudio_codecz ([0-9]+\.?[0-9]*) (fps)Úfpsz [0-9]*x[0-9]*(,| )ÚxÚsource_sizeÚsizezIThe frame size for reading {} is different from the source frame size {}.zrotate\s+:\s([0-9]+)Úrotatez
Duration: z, [0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9]Ú:Úduration)Ú
splitlinesr7   ÚstriprJ   rK   ÚrerP   ÚfindallrU   Úsearchr   ÚendÚtupleÚmapÚintr   ÚwarningÚformatÚcompileÚgroupsrW   )Útextr,   ÚmetaÚverÚlÚ
videolinesr>   Ú
audiolinesÚ
audio_liner`   ÚmatchesÚmatchÚpartsÚ
reo_rotaterd   rf   Úhmss                    r   Úparse_ffmpeg_headerr€   w   sÀ  € Ø�O‰OÓ€EØ€Dð
 �‰(�.‰.˜ AÓ
& rÑ
*×
0Ñ
0°Ó
=¸aÑ
@€CØ ŸY™Y›[¨3Ñ.°°q±·±Ó1AÑA€DÐ	Ññ óÚˆaŸH™H›J×1Ñ1°)×<‹ÀÈqÁ�‘5ð ð ð
 �a‰=€DØ—J‘J˜y¨!Ó,¨RÑ0×7Ñ7Ó9×?Ñ?ÀÀQÓGÈÑJ×PÑPÓR€Dˆ�MÜ—h’hð 	Ø�
‰
�9˜aÓ  Ñ$ó	ð ñ		÷ 
‰‹ð 	ˆ�Oñ óÚˆaŸH™H›J×1Ñ1°)×<‹ÀÈqÁ�‘5ð ð ô ˆ:ƒ˜ÓØ ‘]ˆ
à×Ñ˜Y¨Ó*¨2Ñ.×5Ñ5Ó7×=Ñ=¸cÀ1ÓEÀaÑH×NÑNÓPð 	ˆ]Ñð €CØ˜A‘“ˆÜ—*’*Ð8¸$Ó?ˆßˆ7Ü˜ ™
 1™×+Ñ+Ó-Ó.ŠCñ  ð ˆ�Kð �a‰=€DÜ�IŠIÐ+¨TÓ2€EØ—‘“ §¡£¨q¡Ð1×7Ñ7¸Ó<€EÜ¤¤C¨£Ó0€DˆÑð �b‰>€DÜ�IŠIÐ+¨TÓ2€EØ—‘“ §¡£¨q¡Ð1×7Ñ7¸Ó<€EÜœœS %›Ó)€Dˆ�Lð ˆMÑ˜d 6™lÓ*Ü�Šð7ß7=±vØ�V‘˜d =Ñ1ó8ô	
ô —’Ð3Ó4€JØ×Ñ˜dÓ#€EØ€FØÑØ—‘“ Ñ"ˆÜ˜“[€Dˆ�Nñ Ó2’u�! °Ñ 1�A‘uÑ2°1Ñ5€DÜ�IŠIÐDÀdÓK€EØ€HØÑØ—;‘;“= 1Ñ$ u§y¡y£{Ð3×9Ñ9¸#Ó>ˆÜ˜3�<ˆØˆÑà€Kùò]ùò&ùòf 3s0   Á+'O/ÂO/ÂO/Ä4'O4ÅO4Å'O4Í9
O9ÎO9)é    )ri   r   r%   Ú_utilsr   r   r   r:   r3   rW   r€   rH   r
   r   Ú<module>rƒ      s<   ðÛ 	Û Û å ôK�×!Ñ!ô Kò\ôò	LóYr
   