§
    oF§jL´  ã                   ó&  — d dl 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c m	Z
 d dlmc m	Z d dlZd dl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 d dlZd dlZd dlZd dlZd dlZddlm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/ d	„ Z0d
„ Z1dTd„Z2d„ Z3d„ Z4d„ Z5dUd„Z6dVd„Z7d„ Z8d„ Z9d„ Z:d„ Z;dWd„Z<d„ Z=d„ Z>d„ Z?dXd„Z@dUd „ZAdXd!„ZBdYd#„ZCd$„ ZDd%„ ZEd&„ ZFd'„ ZGdZd)„ZHd[d+eIdz  d,eId-eIfd.„ZJd+eIdz  d/eIdz  d-eKeI         fd0„ZLd1„ ZMd\d3„ZNd]d5„ZOd6eId-ePeIeQeIef         eRf         fd7„ZSd8„ ZTd^d:„ZU	 	 	 	 d_d;„ZV	 d`d<„ZWdad=„ZX	 	 	 	 	 	 	 	 dbdB„ZY	 	 	 	 	 	 dcdC„ZZdD„ Z[	 	 	 	 	 dddF„Z\dadG„Z]d dHlmZm^Z^ dI„ Z_dJ„ Z`dK„ ZadL„ ZbdM„ ZcdNZddO„ ZedP„ ZfdQ„ ZgdR„ ZhdS„ ZidS )eé    N)ÚAny)ÚImageé   )Úhdr10_x265_paramsÚhdr10_zscale_filterÚiter_hdr_gbrpf32_framesÚiter_video_chunks)Úprobe_video_stream_metadataÚresolve_media_binary)ÚSUPPORTED_VIDEO_CONTAINERSÚget_imageio_codec_paramsÚget_video_encode_argsÚvalidate_video_output_settings)Úget_virtual_media_entryÚparse_virtual_media_pathÚstrip_virtual_media_suffixc                  ó$   — t          d¦  «        pdS )NÚffmpeg©r   © ó    ú1C:\Users\johnn\Wan2GP\shared\utils\audio_video.pyÚ_ffmpeg_binaryr      s   € Ý Ñ)Ô)Ð5¨XÐ5r   c                  ó$   — t          d¦  «        pdS )NÚffprober   r   r   r   Ú_ffprobe_binaryr      s   € Ý 	Ñ*Ô*Ð7¨iÐ7r   é   Ú c                 óº   — t          j        t          j        | ¦  «        ¦  «                             d¦  «        }|r|                     d¦  «        sd|z   }||z  }|S )Núutf-8ú.)ÚbinasciiÚb2a_hexÚosÚurandomÚdecodeÚ
startswith)ÚlengthÚsuffixÚnames      r   Ú	rand_namer+   #   s_   € ÝÔ�BœJ vÑ.Ô.Ñ/Ô/×6Ò6°wÑ?Ô?€DØð Ø× Ò  Ñ%Ô%ð 	"Ø˜6‘\ˆFØ�‰ˆØ€Kr   c                 ó‚  — t          j        | ¦  «        rK|                      ¦   «                              ¦   «                              ¦   «                              ¦   «         } n t          j        | t          j        ¬¦  «        } | j	        dk    r4| j
        d         dk    r#| j
        d         | j
        d         k    r| j        } | S )N©Údtypeé   r   r   r   )ÚtorchÚ	is_tensorÚdetachÚcpuÚfloatÚnumpyÚnpÚasarrayÚfloat32ÚndimÚshapeÚT)Ú
audio_datas    r   Ú_prepare_audio_arrayr=   ,   s©   € Ý„�zÑ"Ô"ð >Ø×&Ò&Ñ(Ô(×,Ò,Ñ.Ô.×4Ò4Ñ6Ô6×<Ò<Ñ>Ô>ˆ
ˆ
å”Z 
µ"´*Ð=Ñ=Ô=ˆ
Ø„˜!ÒÐ 
Ô 0°Ô 3°qÒ 8Ð 8¸ZÔ=MÈaÔ=PÐS]ÔScÐdeÔSfÒ=fÐ=fØ”\ˆ
ØÐr   c                 ój   — t          |¦  «        }t          j        | |t          |¦  «        ¦  «         | S ©N)r=   ÚsfÚwriteÚint)Úpathr<   Úsample_rateÚaudio_arrays       r   Úwrite_wav_filerF   6   s0   € Ý& zÑ2Ô2€KÝ„HˆT�;¥ KÑ 0Ô 0Ñ1Ô1Ð1Ø€Kr   c                 óÒ  — t          j        | t           j        ¬¦  «        }t          |pd¦  «        }t          |pd¦  «        }|j        dk    s|dk    s|dk    s||k    r!|                     t           j        d¬¦  «        S dd lm} t          j	        |j
        dk    r|j                             ¦   «         n|d                               ¦   «         ¦  «                             t          j        ¬¦  «        }|                     |||¦  «                             ¦   «                              ¦   «         }|j
        dk    r|j        n|d                              t           j        d¬¦  «        S )Nr-   r   F)Úcopyr/   )r6   r7   r8   rB   ÚsizeÚastypeÚtorchaudio.functionalÚ
functionalr0   Ú
from_numpyr9   r;   rH   ÚtoÚresampler3   r5   )r<   Úsource_sample_rateÚtarget_sample_raterE   ÚtaFÚwaveÚ	resampleds          r   Úresample_audio_arrayrU   <   s]  € Ý”*˜Z­r¬zÐ:Ñ:Ô:€KÝÐ/Ð4°1Ñ5Ô5ÐÝÐ/Ð4°1Ñ5Ô5ÐØÔ˜1ÒÐÐ 2°aÒ 7Ð 7Ð;MÐQRÒ;RÐ;RÐVhÐl~ÒV~ÐV~Ø×!Ò!¥"¤*°5Ð!Ñ9Ô9Ð9Ø'Ð'Ð'Ð'Ð'Ð'ÝÔ°KÔ4DÈÒ4IÐ4I˜KœM×.Ò.Ñ0Ô0Ð0È{Ð[_ÔO`×OeÒOeÑOgÔOgÑhÔh×kÒkÕrwÔrÐkñ  Aô  A€DØ—’˜TÐ#5Ð7IÑJÔJ×NÒNÑPÔP×VÒVÑXÔX€IØ&Ô+¨qÒ0Ð0ˆIŒKˆK°iÀ´l×JÒJÍ2Ì:Ð\aÐJÑbÔbÐbr   c                 ó–  — t          j        |t           j        ¬¦  «        }|j        dk    r|S t	          |p|¦  «        }| �!t          j        | t           j        ¬¦  «        }n:|r6t          j        t          j        |¦  «        d|j	        dk    ¬¦  «        \  }}n|S |t	          |¦  «        k    rt          |||¦  «        }|d t          dt	          |¦  «        ¦  «        …         }|j        dk    r|S |j	        |j	        k    r2|j	        dk    r|d d …d f         n|}|j	        dk    r|d d …d f         n|}|j	        dk    rt|j        d         |j        d         k    rX|j        d         dk    r.t          j        |d d …d d…f         |j        d         d¬¦  «        n|d d …d |j        d         …f         }t          j        ||gd¬¦  «        S )Nr-   r   r8   r/   ©r.   Ú	always_2dr   ©Úaxis)r6   r7   r8   rI   rB   r@   Úreadr$   Úfspathr9   rU   Úmaxr:   ÚrepeatÚconcatenate)Úexisting_audio_dataÚexisting_audio_pathÚgenerated_audioÚaudio_sampling_rateÚcommitted_audio_samplesÚexisting_audio_sample_rateÚprefix_sample_rateÚprefix_audios           r   Úappend_sliding_window_audiorh   H   sN  € Ý”j ½¼
ÐCÑCÔC€OØÔ˜qÒ Ð ØÐÝÐ7ÐNÐ;NÑOÔOÐØÐ&Ý”zÐ"5½R¼ZÐHÑHÔHˆˆØ	ð Ý+-¬7µ2´9Ð=PÑ3QÔ3QÐYbÐn}ô  oCð  GHò  oHð  ,Iñ  ,Iô  ,IÑ(ˆÐ(Ð(àÐØ�SÐ!4Ñ5Ô5Ò5Ð5Ý+¨LÐ:LÐNaÑbÔbˆØÐ E¥ Q­Ð,CÑ(DÔ(DÑ!EÔ!EÐ EÔF€LØÔ˜AÒÐØÐØÔ˜OÔ0Ò0Ð0Ø0<Ô0AÀQÒ0FÐ0F�| A A A t GÔ,Ð,ÈLˆØ6EÔ6JÈaÒ6OÐ6O˜/¨!¨!¨!¨T¨'Ô2Ð2ÐUdˆØÔ˜AÒÐ ,Ô"4°QÔ"7¸?Ô;PÐQRÔ;SÒ"SÐ"SØ[gÔ[mÐnoÔ[pÐtuÒ[uÐ[u•r”y ¨a¨a¨a°°!°¨eÔ!4°oÔ6KÈAÔ6NÐUVÐWÑWÔWÐWð  |Hð  IJð  IJð  IJð  Leð  M\ô  Mbð  cdô  Með  Leð  Ieô  |fˆÝŒ>˜<¨Ð9ÀÐBÑBÔBÐBr   ç        é€>  Únull_audio_c           
      óX  — t          |¦  «        }t          dt          t          j        t	          |¦  «        |z  ¦  «        ¦  «        ¦  «        }t          j        |d| ¬¦  «        \  }}t          j        |¦  «         t          |t          j
        |t          j        ¬¦  «        |¦  «        S )Nr   ú.wav©Úprefixr)   Údirr-   )rB   r]   r6   Úceilr4   ÚtempfileÚmkstempr$   ÚcloserF   Úzerosr8   )Ú
output_dirÚduration_secondsrD   ro   Únum_samplesÚfdrC   s          r   Úcreate_silent_wav_filerz   `   s‰   € Ý�kÑ"Ô"€KÝ�a��RœW¥UÐ+;Ñ%<Ô%<¸{Ñ%JÑKÔKÑLÔLÑMÔM€KÝÔ v°fÀ*ÐMÑMÔM�H€BˆÝ„HˆR�L„L€LÝ˜$¥¤¨½B¼JÐ GÑ GÔ GÈÑUÔUÐUr   c                 ó”   — ||z  }t          ||z  ¦  «        }| j        d         t          ||z  ¦  «        z
  }| ||dk    r|nd …         S ©Nr   )rB   r:   )rb   Útrim_video_frames_beginningÚtrim_video_frames_endÚ	video_fpsrc   Úsamples_per_frameÚstartÚends           r   Útruncate_audiorƒ   h   s^   € Ø+¨iÑ7ÐÝÐ+Ð.?Ñ?Ñ@Ô@€EØ
Ô
 Ô
"¥SÐ)>ÐARÑ)RÑ%SÔ%SÑ
S€CØ˜5¨¨aª¨  °TÐ9Ô:Ð:r   c                 ó�   — g }| D ]@\  }}||z  }||z   }|dk    rŒt          d|¦  «        }|                     |||z
  f¦  «         ŒA|S r|   )r]   Úappend)Útrim_rangesÚoffset_framesÚshiftedÚstart_frameÚframe_countÚ	end_frames         r   Úshift_audio_trim_rangesrŒ   o   sn   € Ø€GØ$/ð ?ð ?Ñ ˆ�[Ø�}Ñ$ˆØ +Ñ-ˆ	Ø˜Š>ˆ>ØÝ˜!˜[Ñ)Ô)ˆØ�Š˜ Y°Ñ%<Ð=Ñ>Ô>Ð>Ð>Ø€Nr   c                 ó’  — t          |¦  «        dk    r| S t          j        | t          j        ¬¦  «        } ||z  }g }d}| j        d         }d}t          |¦  «        D ]•\  }	}
|	|z   }||
z   }t          |t          |t          ||z  ¦  «        ¦  «        ¦  «        }t          |t          |t          ||z  ¦  «        ¦  «        ¦  «        }||k    r| 	                    | ||…         ¦  «         |}||
z  }Œ–||k     r| 	                    | |d …         ¦  «         t          |¦  «        dk    rt          j
        |d¬¦  «        n	| d d…         S )Nr   r-   rY   )Úlenr6   r7   r8   r:   Úsortedr]   ÚminrB   r…   r_   )r<   r†   r   rc   r€   ÚpiecesÚcursorÚtotal_samplesÚremoved_framesr‰   rŠ   Úsource_start_frameÚsource_end_framer�   r‚   s                  r   Útrim_audio_rangesr—   {   se  € Ý
ˆ;ÑÔ˜1ÒÐØÐÝ”˜J­b¬jÐ9Ñ9Ô9€JØ+¨iÑ7ÐØ€FØ€FØÔ$ QÔ'€MØ€NÝ$*¨;Ñ$7Ô$7ð &ð &Ñ ˆ�[Ø(¨>Ñ9ÐØ-°Ñ;ÐÝ�F�C ­sÐ3EÐHYÑ3YÑ/ZÔ/ZÑ[Ô[Ñ\Ô\ˆÝ�%�˜]­CÐ0@ÐCTÑ0TÑ,UÔ,UÑVÔVÑWÔWˆØ�6Š>ˆ>Ø�MŠM˜* V¨E \Ô2Ñ3Ô3Ð3ØˆØ˜+Ñ%ˆˆØ�ÒÐØ�Š�j   Ô)Ñ*Ô*Ð*Ý-0°©[¬[¸1ª_¨_�2Œ>˜& qÐ)Ñ)Ô)Ð)À*ÈRÈaÈRÄ.ÐPr   c                 ó¤   — t          |¦  «        dk    r| S t          j        | d¬¦  «        \  }}t          ||||¦  «        }t	          |||¦  «        S )Nr   r8   r-   )rŽ   r@   r[   r—   rF   )Ú
audio_pathr†   r   Úoutput_pathr<   rc   Útrimmed_audios          r   Útrim_audio_file_rangesrœ   ’   s\   € Ý
ˆ;ÑÔ˜1ÒÐØÐÝ&(¤g¨jÀ	Ð&JÑ&JÔ&JÑ#€JÐ#Ý% j°+¸yÐJ]Ñ^Ô^€MÝ˜+ }Ð6IÑJÔJÐJr   Tc                 óÎ  — t          |¦  «        t          |¦  «        z  }t          |¦  «        t          |¦  «        z  }	t          j        | ¦  «        5 }
|
j        }|
j        }t          |
¦  «        }t          t          ||z  ¦  «        ¦  «        }d}|dk     r|r| }|dk     rd}t          t          |	|z  ¦  «        ¦  «        }||k    r#t          j	        d|ft          j
        ¬¦  «        }n;|
                     t          ||¦  «        ¦  «         |
                     |dd¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |r>|dk    r8t          j        t          j	        ||ft          j
        ¬¦  «        |gd¬¦  «        }|rb|r|nd|z   }|j        d         |k     rH||j        d         z
  }t          j        |t          j	        ||ft          j
        ¬¦  «        gd¬¦  «        }||fS )Nr   r-   r8   TrW   rY   )r4   r@   Ú	SoundFileÚ
samplerateÚchannelsrŽ   rB   Úroundr6   ru   r8   Úseekr�   r[   r_   r:   )r™   r‰   Ú
num_framesÚfpsrv   r)   Úpad_headÚpad_tailÚ	start_secÚduration_secÚ
audio_filerD   r    Útotal_framesÚstart_sampleÚ	pad_startÚframes_to_readÚdataÚtarget_framesÚpad_ends                       r   Úslice_audio_windowr±   š   s5  € Ý�kÑ"Ô"¥U¨3¡Z¤ZÑ/€IÝ˜Ñ$Ô$¥u¨S¡z¤zÑ1€Lå	Œ�jÑ	!Ô	!ð T ZØ Ô+ˆØÔ&ˆÝ˜:‘”ˆÝ�5 ¨[Ñ!8Ñ9Ô9Ñ:Ô:ˆØˆ	Ø˜!ÒÐ ÐØ%˜ˆIØ˜!ÒÐØˆLÝ�U <°+Ñ#=Ñ>Ô>Ñ?Ô?ˆØ˜,Ò&Ð&Ý”8˜Q ˜Mµ´Ð<Ñ<Ô<ˆDˆDà�OŠO�C ¨lÑ;Ô;Ñ<Ô<Ð<Ø—?’? >¸Èd�?ÑSÔSˆDðTð Tð Tñ Tô Tð Tð Tð Tð Tð Tð Tøøøð Tð Tð Tð Tð" ð a�I ’M�MÝŒ~�rœx¨°HÐ(=ÅRÄZÐPÑPÔPÐRVÐWÐ^_Ð`Ñ`Ô`ˆØð cØ&.Ð5˜˜°A¸ÑGˆØŒ:�aŒ=˜=Ò(Ð(Ø# d¤j°¤mÑ3ˆGÝ”> 4­¬°7¸HÐ2EÍRÌZÐ)XÑ)XÔ)XÐ"YÐ`aÐbÑbÔbˆDØ�ÐÐs   ÁCD4Ä4D8Ä;D8c                 ó&  — t          j        t          j        | ¦  «        t	          ¦   «         ¬¦  «        }t          d„ |d         D ¦   «         d ¦  «        }|�|                     d¦  «        st          d| › �¦  «        ‚t          |d         ¦  «        S )N©Úcmdc              3   óL   K  — | ]}|                      d ¦  «        dk    ¯|V — Œ dS ©Ú
codec_typeÚaudioN©Úget©Ú.0Ústreams     r   ú	<genexpr>z-get_audio_file_sample_rate.<locals>.<genexpr>»   ó9   è è € ÐfÐf FÀ&Ç*Â*È\ÑBZÔBZÐ^eÒBeÐBe˜ÐBeÐBeÐBeÐBeÐfÐfr   ÚstreamsrD   z&Unable to read audio sample rate from ©	r   Úprober$   r\   r   Únextrº   Ú
ValueErrorrB   ©r™   rÂ   Úaudio_streams      r   Úget_audio_file_sample_raterÇ   ¹   s�   € ÝŒL�œ :Ñ.Ô.µOÑ4EÔ4EÐFÑFÔF€EÝÐfÐf¨e°IÔ.>ÐfÑfÔfÐhlÑmÔm€LØÐ <×#3Ò#3°MÑ#BÔ#BÐÝÐNÀ*ÐNÐNÑOÔOÐOÝˆ|˜MÔ*Ñ+Ô+Ð+r   c                 ó&  — t          j        t          j        | ¦  «        t	          ¦   «         ¬¦  «        }t          d„ |d         D ¦   «         d ¦  «        }|�|                     d¦  «        st          d| › �¦  «        ‚t          |d         ¦  «        S )Nr³   c              3   óL   K  — | ]}|                      d ¦  «        dk    ¯|V — Œ dS r¶   r¹   r»   s     r   r¾   z*get_audio_file_channels.<locals>.<genexpr>Ã   r¿   r   rÀ   r    z(Unable to read audio channel count from rÁ   rÅ   s      r   Úget_audio_file_channelsrÊ   Á   s�   € ÝŒL�œ :Ñ.Ô.µOÑ4EÔ4EÐFÑFÔF€EÝÐfÐf¨e°IÔ.>ÐfÑfÔfÐhlÑmÔm€LØÐ <×#3Ò#3°JÑ#?Ô#?ÐÝÐPÀJÐPÐPÑQÔQÐQÝˆ|˜JÔ'Ñ(Ô(Ð(r   c                 óF  — t          j        t          j        | ¦  «        t	          ¦   «         ¬¦  «        }|                     di ¦  «                             d¦  «        }|dvrt          |¦  «        nd}g }|                     dg ¦  «        D ]“}|                     d¦  «        dk    rŒt          |                     d	d
¦  «        ¦  «        }|                     dd¦  «        }|dv r|dk    rdnd}n|r|r|dk    r|› d|› d�n|› d�}nd}|                     |¦  «         Œ”||fS )zKRead file duration and each audio track's channel layout, without decoding.r³   ÚformatÚduration)Nr   zN/ANrÀ   r·   r¸   r    r   Úchannel_layoutr   )r   r/   r   ÚMonoÚStereoÚunknownz (z
 channels)z	 channelszUnknown channel layout)	r   rÂ   r$   r\   r   rº   r4   rB   r…   )Ú
media_pathrÂ   rÍ   Úlayoutsr½   r    ÚlayoutÚlabels           r   Ú$get_media_duration_and_audio_layoutsrÖ   É   sM  € åŒL�œ :Ñ.Ô.µOÑ4EÔ4EÐFÑFÔF€EØ�yŠy˜ 2Ñ&Ô&×*Ò*¨:Ñ6Ô6€HØ"*Ð2CÐ"CÐ"C�u�X‰ŒˆÈ€HØ€GØ—)’)˜I rÑ*Ô*ð ð ˆØ�:Š:�lÑ#Ô# wÒ.Ð.ØÝ�v—z’z *¨aÑ0Ô0Ñ1Ô1ˆØ—’Ð,¨bÑ1Ô1ˆØ�vÐÐØ&¨!šm˜m�F�F°ˆEˆEØð 	-Ø9?ÐsÀFÈiÒDWÐDW�vÐ5Ð5 Ð5Ð5Ð5Ð5Ð`hÐ]sÐ]sÐ]sˆEˆEà,ˆEØ�Š�uÑÔÐÐØ�WÐÐr   c                 ó$  — t          | ¦  «        g}|pg D ]B}t          |                     dd¦  «        pd¦  «        }|dk    r|                     |¦  «         ŒC|pg D ]&}|r"|                     t          |¦  «        ¦  «         Œ't	          |¦  «        S )NrD   r   )rB   rº   r…   rÇ   r]   )Údefault_rateÚsource_audio_metadataÚaudio_pathsÚsample_ratesÚmetarD   r™   s          r   Úresolve_mux_audio_sampling_raterÝ   Þ   s¯   € Ý˜Ñ%Ô%Ð&€LØ%Ð+¨ð -ð -ˆÝ˜$Ÿ(š( =°!Ñ4Ô4Ð9¸Ñ:Ô:ˆØ˜Š?ˆ?Ø×Ò Ñ,Ô,Ð,øØ!Ð' Rð Hð Hˆ
Øð 	HØ×ÒÕ :¸:Ñ FÔ FÑGÔGÐGøÝˆ|ÑÔÐr   c                 óÞ  — t          j        | t           j        ¬¦  «        } |�£t          j        |t           j        ¬¦  «                             d¦  «        dk    }| j        dk    r1|d | j        d         …         }| d |j        d         …         |         } n0|d | j        d         …         }| d |j        d         …         |         } t          j        | ¦  «                             d¦  «        }|j        dk    rdS t          | 	                    ¦   «         ¦  «        }|dk    rdS d|z  }||k    }t          j
        |¦  «        r't          ||          	                    ¦   «         ¦  «        n|}||fS )	Nr-   éÿÿÿÿç      à?r   r   )ri   ri   ri   gš™™™™™¹?)r6   r7   r8   Úreshaper9   r:   ÚabsrI   r4   ÚmeanÚany)r<   Úactive_maskÚ	abs_audioÚavg_absÚ	thresholdÚactive_avg_abss         r   Ú_compute_active_abs_amplituderê   ê   se  € Ý”˜J­b¬jÐ9Ñ9Ô9€JØÐÝ”j µB´JÐ?Ñ?Ô?×GÒGÈÑKÔKÈcÒQˆØŒ?˜aÒÐØ%Ð&: zÔ'7¸Ô':Ð&:Ô;ˆKØ#Ð$9 [Ô%6°qÔ%9Ð$9Ô:¸;ÔGˆJˆJà%Ð&: zÔ'7¸Ô':Ð&:Ô;ˆKØ#Ð$9 [Ô%6°qÔ%9Ð$9Ô:¸;ÔGˆJÝ”�zÑ"Ô"×*Ò*¨2Ñ.Ô.€IØ„~˜ÒÐØˆxÝ�I—N’NÑ$Ô$Ñ%Ô%€GØ�#‚~€~ØˆxØ�g‘€IØ˜iÒ'€KÝ=?¼VÀKÑ=PÔ=PÐ]•U˜9 [Ô1×6Ò6Ñ8Ô8Ñ9Ô9Ð9ÐV]€NØ�NÐ"Ð"r   c           	      óz  — t          j        | t           j        ¬¦  «        } t          j        |t           j        ¬¦  «        }t          | |¦  «        \  }}t          ||¦  «        \  }}d||z   z  }d}	||	k    r||z  nd}
||	k    r||z  nd}t	          |¦  «        t	          |¦  «        t	          |¦  «        t	          |¦  «        t	          |¦  «        t	          |
¦  «        t	          |¦  «        dœ}t          j        | t	          |
¦  «        z  dd¦  «        t          j        |t	          |¦  «        z  dd¦  «        |fS )Nr-   rà   g:Œ0âŽyE>ç      ð?)Úaudio1_avg_absÚaudio2_avg_absÚaudio1_active_avg_absÚaudio2_active_avg_absÚtarget_active_avg_absÚaudio1_gainÚaudio2_gaing      ð¿)r6   r7   r8   rê   r4   Úclip)Úaudio1Úaudio2Úactive_mask1Úactive_mask2Úavg1Úactive1Úavg2Úactive2ÚmidpointÚepsÚgain1Úgain2Ústatss                r   Únormalize_audio_pair_volumesr     s%  € ÝŒZ˜¥b¤jÐ1Ñ1Ô1€FÝŒZ˜¥b¤jÐ1Ñ1Ô1€FÝ1°&¸,ÑGÔG�M€Dˆ'Ý1°&¸,ÑGÔG�M€Dˆ'Ø�g Ñ'Ñ(€HØ
€CØ")¨C¢- -ˆH�wÑÐ°S€EØ")¨C¢- -ˆH�wÑÐ°S€Eå ™+œ+Ý ™+œ+Ý!& w¡¤Ý!& w¡¤Ý!& x¡¤Ý˜U‘|”|Ý˜U‘|”|ðð €Eõ Œ7�6�E %™LœLÑ(¨$°Ñ4Ô4µb´g¸fÅuÈUÁ|Ä|Ñ>SÐUYÐ[^Ñ6_Ô6_ÐafÐfÐfr   Úaudio_norm_c                 óž  — |€dnGt          t          |¦  «        t          j        t	          j        | ¦  «        ¦  «        j        z  ¦  «        }|€dnGt          t          |¦  «        t          j        t	          j        |¦  «        ¦  «        j        z  ¦  «        }t          j        t	          j        | ¦  «        |dd¬¦  «        \  }	}
t          j        t	          j        |¦  «        |dd¬¦  «        \  }}t          |	|||¬¦  «        \  }}}|�t	          j	        |d¬¦  «         t          j        |dz   d	|¬
¦  «        \  }}t	          j        |¦  «         t          j        |dz   d	|¬
¦  «        \  }}t	          j        |¦  «         t          j        ||t          |
¦  «        ¦  «         t          j        ||t          |¦  «        ¦  «         |||fS )Nrß   r8   F)Úframesr.   rX   )r÷   rø   T)Úexist_okÚ1_rm   rn   Ú2_)r¡   r4   r@   Úinfor$   r\   rŸ   r[   r  Úmakedirsrr   rs   rt   rA   rB   )Úaudio_path1Úaudio_path2rv   ro   r÷   rø   Úmax_duration_secondsÚframes1Úframes2rõ   Úsr1rö   Úsr2Únorm1Únorm2r  Úfd1Úout1Úfd2Úout2s                       r   Ú*normalize_audio_pair_volumes_to_temp_filesr    s½  € Ø(Ð0ˆbˆbµe½EÐBVÑ<WÔ<WÕZ\ÔZaÕbdÔbkÐlwÑbxÔbxÑZyÔZyô  [Eñ  =Eñ  7Fô  7F€GØ(Ð0ˆbˆbµe½EÐBVÑ<WÔ<WÕZ\ÔZaÕbdÔbkÐlwÑbxÔbxÑZyÔZyô  [Eñ  =Eñ  7Fô  7F€GÝ”'�"œ) KÑ0Ô0¸È	Ð]bÐcÑcÔc�K€FˆCÝ”'�"œ) KÑ0Ô0¸È	Ð]bÐcÑcÔc�K€FˆCÝ6°v¸vÐT`Ðo{Ð|Ñ|Ô|Ñ€Eˆ5�%àÐÝ
Œ�J¨Ð.Ñ.Ô.Ð.åÔ ¨°©¸fÈ*ÐUÑUÔU�I€CˆÝ„HˆS�M„M€MÝÔ ¨°©¸fÈ*ÐUÑUÔU�I€CˆÝ„HˆS�M„M€MÝ„HˆT�5�#˜c™(œ(Ñ#Ô#Ð#Ý„HˆT�5�#˜c™(œ(Ñ#Ô#Ð#Ø��uÐÐr   c                 óÀ   — | sd} t          | ¦  «                             ¦   «         } | dk    rd} dddœddddœddddœddddœd	œ}|                     | |d         ¦  «        S )
NÚwavÚmp3Úmp3_192)ÚextrÌ   Ú128k)r  rÌ   ÚbitrateÚ192kÚ320k)r  Úmp3_128r  Úmp3_320©ÚstrÚlowerrº   ©Ú	codec_keyÚsettingss     r   Ú_get_audio_codec_settingsr*  (  sŽ   € Øð Øˆ	Ý�I‘”×$Ò$Ñ&Ô&€IØ�EÒÐØˆ	à¨Ð.Ð.Ø ¨E¸fÐEÐEØ ¨E¸fÐEÐEØ ¨E¸fÐEÐEð	ð €Hð �<Š<˜	 8¨E¤?Ñ3Ô3Ð3r   c                 ó¼   — | sdn t          | ¦  «                             ¦   «         } ddddœddddœddddœddddœd	d d
dœdœ}|                     | |d         ¦  «        S )NÚaac_128Úaacr  z.aac©Úcodecr  r  r   Ú256kr!  Úalacz.m4a)r,  Úaac_192Úaac_256Úaac_320r1  r$  r'  s     r   Úget_mp4_audio_codec_settingsr5  7  sŠ   € Ø!*ÐF�	�	µ°I±´×0DÒ0DÑ0FÔ0F€Ià"¨v¸fÐEÐEØ"¨v¸fÐEÐEØ"¨v¸fÐEÐEØ"¨v¸fÐEÐEØ ¨T¸&ÐAÐAðð €Hð �<Š<˜	 8¨IÔ#6Ñ7Ô7Ð7r   c                 ó  — t          j        | ¦  «        rÁ| j        dk    r4t          | j        d         ¦  «        t          | j        d         ¦  «        fS | j        dk    rw| j        d         dv r4t          | j        d         ¦  «        t          | j        d         ¦  «        fS t          | j        d         ¦  «        t          | j        d         ¦  «        fS t          | t          t          f¦  «        r| D ]}t          |¦  «        }|�|c S Œd S )Né   rß   éþÿÿÿé   ©r   é   r9  r/   r   )	r0   r1   r9   rB   r:   Ú
isinstanceÚlistÚtupleÚ_infer_video_dimensions)ÚtensorÚchunkÚdimss      r   r?  r?  C  s  € Ý„�vÑÔð @ØŒ;˜!ÒÐÝ�v”| BÔ'Ñ(Ô(­#¨f¬l¸2Ô.>Ñ*?Ô*?Ð?Ð?ØŒ;˜!ÒÐØŒ|˜BÔ 9Ð,Ð,Ý˜6œ<¨œ?Ñ+Ô+­S°´¸a´Ñ-AÔ-AÐAÐAÝ�v”| BÔ'Ñ(Ô(­#¨f¬l¸2Ô.>Ñ*?Ô*?Ð?Ð?Ý�&�4¥˜-Ñ(Ô(ð Øð 	ð 	ˆEÝ*¨5Ñ1Ô1ˆDØÐØ���ð  àˆ4r   c                 óŽ   — t          |¦  «        }d x}}|�|\  }}t          | |||t          ¬¦  «        }|�t          |¦  «        ‚d S )N)ÚwidthÚheightÚallowed_containers)r?  r   r   ÚRuntimeError)r·   Ú	containerr@  rB  rD  rE  Úerrors          r   Ú_validate_video_save_settingsrJ  S  sk   € Ý" 6Ñ*Ô*€DØÐ€EˆFØÐØ‰ˆˆvÝ*¨:°yÈÐV\õ  rLð  Mñ  Mô  M€EØÐÝ˜5Ñ!Ô!Ð!ð Ðr   ©rß   r   c                 ó   — | j         t          j        k    rJ|                      ¦   «                              ¦   «                              ¦   «                              ¦   «         S |                      ¦   «                              t          j        d¬¦  «        } |r]t          |¦  «        t          |¦  «        }}|                      ||¦  «                             |¦  «                             ||z
  ¦  «         |                      d¦  «                             ¦   «                              dd¦  «                             t          j        ¦  «                             ¦   «                              ¦   «                              ¦   «         S )NT)r.   rH   ç     ào@r   éÿ   )r.   r0   Úuint8r2   r3   Ú
contiguousr5   rN   r8   r�   r]   Úclamp_Úsub_Údiv_Úmul_Úround_)ÚframeÚ	normalizeÚvalue_rangeÚ	value_minÚ	value_maxs        r   Ú_video_frame_tensor_to_uint8r[  ]  s  € Ø„{•e”kÒ!Ð!Ø�|Š|‰~Œ~×!Ò!Ñ#Ô#×.Ò.Ñ0Ô0×6Ò6Ñ8Ô8Ð8Ø�LŠL‰NŒN×Ò¥E¤M¸ÐÑ=Ô=€EØð WÝ" ;Ñ/Ô/µ°[Ñ1AÔ1A�9ˆ	Ø�Š�Y 	Ñ*Ô*×/Ò/°	Ñ:Ô:×?Ò?À	ÈIÑ@UÑVÔVÐVØ�:Š:�eÑÔ×#Ò#Ñ%Ô%×,Ò,¨Q°Ñ4Ô4×7Ò7½¼ÑDÔD×HÒHÑJÔJ×UÒUÑWÔW×]Ò]Ñ_Ô_Ð_r   Ú18r(  ÚdefaultÚreturnc                 ó  — t          | pd¦  «                             ¦   «                              ¦   «         } t          j        d| ¦  «        r| S t          j        d| ¦  «        }|�|                     d¦  «        nt          |¦  «        S )Nr   z\d+z_(\d+)$r   )r%  Ústripr&  ÚreÚ	fullmatchÚsearchÚgroup)r(  r]  Úmatchs      r   Ú_crf_from_video_codecrf  g  su   € Ý�I�O Ñ$Ô$×*Ò*Ñ,Ô,×2Ò2Ñ4Ô4€IÝ	„|�F˜IÑ&Ô&ð ØÐÝŒI�j )Ñ,Ô,€EØ"Ð.ˆ5�;Š;�q‰>Œ>ˆ>µC¸±L´LÐ@r   rH  c                 ó€   — t          | d¬¦  «        }dt          ¦   «         ddddd|d	d
dddddddddt          ¦   «         gS )Nr\  )r]  z-vfú-c:vÚlibx265z-presetÚmediumz-crfú-pix_fmtÚyuv420p10lez-tag:vÚhvc1z-color_primariesÚbt2020z
-color_trcÚ	smpte2084z-colorspaceÚbt2020ncz-x265-params)rf  r   r   )r(  rH  Úcrfs      r   Úget_hdr_video_encode_argsrr  o  s^   € Ý
 	°4Ð
8Ñ
8Ô
8€CàÕ"Ñ$Ô$Ø�	Ø�8Ø�Ø�MØ�&Ø˜HØ�kØ�zØÕ)Ñ+Ô+ðð r   c                 ó,   — t          | ¦  «        d         S )Nr  )r*  )r(  s    r   Úget_audio_codec_extensionrt    s   € Ý$ YÑ/Ô/°Ô6Ð6r   Fc                 ó  — t          ¦   «         dddd| g}|r|                     d¦  «         |d|gz  }|r|d|gz  }|r!|dt          t          |¦  «        ¦  «        gz  }|                     |¦  «         t	          j        |d	d	d	¬
¦  «         d S )Nú-yú-vrI  ú-iz-vnú-c:aú-b:aú-arT©ÚcheckÚcapture_outputÚtext)r   r…   r%  rB   Ú
subprocessÚrun)Ú
input_pathrš   r/  r  rD   Ú
drop_videor´   s          r   Ú_run_ffmpeg_encoder„  ƒ  s±   € ÝÑÔ˜T 4¨°$¸
Ð
C€CØð Ø�
Š
�5ÑÔÐØˆF�Eˆ?Ñ€CØð !Ø�˜Ð Ñ ˆØð .Ø�•s�3˜{Ñ+Ô+Ñ,Ô,Ð-Ñ-ˆØ‡J‚Jˆ{ÑÔÐÝ„N�3˜d°4¸dÐCÑCÔCÐCÐCÐCr   r  c                 ón  — t          |¦  «        }|d         }|                      ¦   «                              d|› �¦  «        s t          j        | ¦  «        d         d|› �z   } |d         dk    rt          | ||¦  «        S t          j        dd¬¦  «        \  }}t          j	        |¦  «         	 t          |||¦  «         t          || d	|                     d
¦  «        |¬¦  «         	 t          j        |¦  «         n:# t          $ r Y n.w xY w# 	 t          j        |¦  «         w # t          $ r Y w w xY wxY w| S )Nr  r!   r   rÌ   r  rm   Úaudio_©r)   ro   Ú
libmp3lamer  )r  rD   )r*  r&  ÚendswithÚospÚsplitextrF   rr   rs   r$   rt   r„  rº   ÚremoveÚOSError)rC   r<   rD   r(  r)  r  ry   Útmp_paths           r   Úsave_audio_filer�  �  sY  € Ý(¨Ñ3Ô3€HØ
�5Œ/€CØ�:Š:‰<Œ<× Ò   S  Ñ+Ô+ð 1ÝŒ|˜DÑ!Ô! !Ô$ y¨3 y yÑ0ˆØ�Ô˜UÒ"Ð"Ý˜d J°Ñ<Ô<Ð<ÝÔ#¨6¸(ÐCÑCÔC�L€BˆÝ„HˆR�L„L€LðÝ�x ¨[Ñ9Ô9Ð9Ý˜8 T¨<ÀÇÂÈiÑAXÔAXÐfqÐrÑrÔrÐrð	ÝŒI�hÑÔÐÐøÝð 	ð 	ð 	ØˆDð	øøøøð	ÝŒI�hÑÔÐÐøÝð 	ð 	ð 	ØˆDð	øøøøøøà€KsB   Â-8D Ã&C; Ã;
DÄDÄD2ÄD"Ä!D2Ä"
D/Ä,D2Ä.D/Ä/D2Ú
video_pathc                 ó  — t          | t          j        ¦  «        rdi dfS t          | ¦  «        �di dfS t          | ¦  «        }t	          j        t          | ¦  «        ¦  «        }i }|€||dfS t          | ¦  «        }|�Ñ|                     d¦  «        �¼t          |                     d¦  «        pd¦  «        }t          |                     d¦  «        p|¦  «        }t          |                     d¦  «        p|                     d¦  «        pd¦  «        }|dk    r5t          d||z  ¦  «        |d<   t          |d         |d	z   |z  ¦  «        |d
<   |j        €d	n!t          d	t          |j        ¦  «        ¦  «        }|||d	z
  fS )Nr   r   Úvirtual_end_frameÚvirtual_start_frameÚ	fps_floatr¤   ri   Ússr   rN   )r<  r   r   r   r$   r\   r   r
   rº   rB   r4   r]   Úaudio_track_no)	r�  ÚspecÚsource_pathÚ	time_argsÚmetadatar‰   r‹   r”  r–  s	            r   Ú_resolve_virtual_audio_segmentr›  ¤  sƒ  € Ý�*�eœkÑ*Ô*ð Ø�2�qˆyÐÝ˜zÑ*Ô*Ð6Ø�2�qˆyÐÝ# JÑ/Ô/€DÝ”)Õ6°zÑBÔBÑCÔC€KØ "€IØ€|Ø˜I qÐ(Ð(Ý*¨:Ñ6Ô6€HØÐ §¢Ð-@Ñ AÔ AÐ MÝ˜(Ÿ,š,Ð'<Ñ=Ô=ÐBÀÑCÔCˆÝ˜ŸšÐ%8Ñ9Ô9ÐH¸[ÑIÔIˆ	Ý˜(Ÿ,š, {Ñ3Ô3ÐQ°x·|²|ÀEÑ7JÔ7JÐQÈcÑRÔRˆ	Ø�qŠ=ˆ=Ý! # {°YÑ'>Ñ?Ô?ˆI�d‰OÝ! )¨D¤/°IÀ±MÀYÑ3NÑOÔOˆI�d‰OØÔ-Ð5�Q�Q½3¸qÅ#ÀdÔFYÑBZÔBZÑ;[Ô;[€NØ˜	 >°AÑ#5Ð5Ð5r   c           	      ó˜  — | sd S t          | t          j        ¦  «        rd S t          j        | ¦  «        } t	          | ¦  «        \  }}}t          |¦  «        dk    rd S dd l}	 d|› �ddœ}  |j        |fi |¤Žj        |fi |¤Ž 	                    ¦   «          
                    t          ¦   «         d¬¦  «         n’# |j        $ r…}t          |dd¦  «        }t          |t          t          f¦  «        r|                     d	d
¬¦  «        }|pt#          |¦  «                             ¦   «         }t'          d|› d|› d|› �¦  «        |‚d }~ww xY w|S )Nr   ú0:a:Ú	pcm_s16le)ÚmapÚacodecT©r´   ÚquietÚstderrr   r    Úignore©Úerrorsz ffmpeg audio extract failed for z -> ú: )r<  r   r$   r\   r›  rŽ   r   ÚinputÚoutputÚoverwrite_outputr�  r   ÚErrorÚgetattrÚbytesÚ	bytearrayr&   r%  r`  rG  )	r�  rš   r˜  r™  Úaudio_track_indexr   Úoutput_kwargsÚerrr£  s	            r   Úextract_audio_track_to_wavr²  º  s£  € Øð ØˆtÝ�*�eœkÑ*Ô*ð ØˆtÝ”˜:Ñ&Ô&€JÝ0NÈzÑ0ZÔ0ZÑ-€K�Ð-Ý
ˆ;ÑÔ˜1ÒÐØˆtØ€M€M€MðqØ :Ð'8Ð :Ð :ÀkÐRÐRˆØ5ˆˆŒ�[Ð.Ð. IÐ.Ð.Ô5°kÐSÐSÀ]ÐSÐS×dÒdÑfÔf×jÒjÕo}ÑoÔoð  HLÐjñ  	Mô  	Mð  	Mð  	MøØŒ<ð qð qð qÝ˜˜h¨Ñ,Ô,ˆÝ�f�u¥iÐ0Ñ1Ô1ð 	=Ø—]’] 7°8�]Ñ<Ô<ˆFØÐ$�C ™HœH×+Ò+Ñ-Ô-ˆÝÐf¸kÐfÐfÈ{ÐfÐfÐ^dÐfÐfÑgÔgÐmpÐpøøøøðqøøøð Ðs   Á"AB8 Â8
EÃB EÅEr,  c                 óh  — t          | t          j        ¦  «        r|rdng g fS t          | ¦  «        \  }}}t          |¦  «        dk    r|rdng g fS t          j                             |¦  «        s%d| › �}|rt          |¦  «         t          |¦  «        ‚	 t          j
        |t          ¦   «         ¬¦  «        }	n§# t          j        $ r•}
t          |
dd¦  «        }t          |t          t          f¦  «        r|                     dd¬¦  «        }|pt#          |
¦  «                             ¦   «         }d	|› d
|› �}|rt          |¦  «         t'          |¦  «        |
‚d}
~
ww xY wd„ |	d         D ¦   «         }t)          |	d                              dd¦  «        ¦  «        }|�(d|cxk    rt          |¦  «        k     rn n	||         gng }|s|rdS |rt          d| › �¦  «         g g fS |rt          |¦  «        S |r$t          dt          |¦  «        › d|d›d�¦  «         g }g }|dk    rddddœ}nt-          |¦  «        }t/          |¦  «        D �]e\  }}t1          j        d|› |d         › �d¬¦  «        \  }}t	          j        |¦  «         |                     |¦  «         |                     |                     d¦  «        t9          |                     dd¦  «        ¦  «        t9          |                     d d¦  «        ¦  «        ||                     d!i ¦  «                             d"d¦  «        d#œ¦  «         |€|n|}d$d%|› �d&|d'         i}|d(         r|d(         |d)<    t          j        |fi |¤Žj        |fi |¤Ž                     ¦   «                               tC          ¦   «         | ¬*¦  «         �Œg||fS )+az  
    Extract all audio tracks from a source video into temporary audio files.

    Returns:
        Tuple:
          - List of temp file paths for extracted audio tracks
          - List of corresponding metadata dicts:
              {'codec', 'sample_rate', 'channels', 'duration', 'language'}
              where 'duration' is set to container duration (for consistency).
    r   z!ffprobe skipped; file not found: r³   r£  r   r    r¤  r¥  zffprobe failed for r§  Nc                 ó*   — g | ]}|d          dk    ¯|‘ŒS )r·   r¸   r   ©r¼   Úss     r   ú
<listcomp>z(extract_audio_tracks.<locals>.<listcomp>ò  s&   € ÐOÐOÐO˜1°A°l´OÀwÒ4NÐ4N�QÐ4NÐ4NÐ4Nr   rÀ   rÌ   rÍ   ri   zNo audio track found in zFound z& audio track(s), container duration = ú.3fr¶  r  rž  rm   r.  Ú_trackr  r†  r‡  Ú
codec_namerD   r    ÚtagsÚlanguage)r/  rD   r    rÍ   r¼  rŸ  r�  r   r/  r  zb:ar¡  )"r<  r   r›  rŽ   r$   rC   ÚexistsÚprintÚFileNotFoundErrorr   rÂ   r   r«  r¬  r­  r®  r&   r%  r`  rG  r4   rº   r5  Ú	enumeraterr   rs   rt   r…   rB   r¨  r©  rª  r�  r   )Úsource_videoÚverboseÚ
query_onlyr(  Útemp_formatr˜  r™  Úselected_track_indexÚmsgrÂ   r±  r£  ÚmessageÚaudio_streamsÚcontainer_durationÚ
file_pathsrš  Úaudio_settingsÚir½   ry   Ú	temp_pathÚstream_indexr°  s                           r   Úextract_audio_tracksrÏ  Ñ  sk  € õ �,¥¤Ñ,Ô,ð -ØÐ,ˆqˆq R¨ HÐ,Ý3QÐR^Ñ3_Ô3_Ñ0€K�Ð0Ý
ˆ;ÑÔ˜1ÒÐØÐ,ˆqˆq R¨ HÐ,ÝŒ7�>Š>˜+Ñ&Ô&ð %Ø@°,Ð@Ð@ˆØð 	Ý�#‰JŒJˆJÝ Ñ$Ô$Ð$ð
-Ý”˜[­oÑ.?Ô.?Ð@Ñ@Ô@ˆˆøÝŒ<ð -ð -ð -Ý˜˜h¨Ñ,Ô,ˆÝ�f�u¥iÐ0Ñ1Ô1ð 	=Ø—]’] 7°8�]Ñ<Ô<ˆFØÐ$�C ™HœH×+Ò+Ñ-Ô-ˆØ?¨Ð?Ð?°vÐ?Ð?ˆØð 	Ý�'‰NŒNˆNÝ˜7Ñ#Ô#¨Ð,øøøøð-øøøð PÐO  iÔ 0ÐOÑOÔO€MÝ˜u Xœ×2Ò2°:¸sÑCÔCÑDÔDÐØÐ'ØABÐFZÐAoÐAoÒAoÐAoÕ]`ÐanÑ]oÔ]oÒAoÐAoÐAoÐAoÐAo˜Ð';Ô<Ð=Ð=Ðuwˆàð ØÐ˜a˜aØÐD•EÐC°\ÐCÐCÑDÔDÐDØ�2ˆvˆàð "Ý�=Ñ!Ô!Ð!àð lÝÐj•s˜=Ñ)Ô)ÐjÐjÐQcÐjÐjÐjÐjÑkÔkÐkà€JØ€HØ�eÒÐØ#.¸4ÈÐOÐOˆˆå5°iÑ@Ô@ˆå˜}Ñ-Ô-ð Rñ R‰	ˆˆ6Ý Ô(Ð0S¸Ð0S¸NÈ5Ô<QÐ0SÐ0SÐ\dÐeÑeÔe‰ˆˆIÝ
Œ�‰Œˆà×Ò˜)Ñ$Ô$Ð$Ø�ŠØ—Z’Z Ñ-Ô-Ý˜vŸzšz¨-¸Ñ;Ô;Ñ<Ô<Ý˜FŸJšJ z°1Ñ5Ô5Ñ6Ô6Ø*ØŸ
š
 6¨2Ñ.Ô.×2Ò2°:¸tÑDÔDð
ð 
ñ 	ô 	ð 	ð 1Ð8�q�qÐ>RˆØÐ!6¨Ð!6Ð!6¸À.ÐQXÔBYÐZˆØ˜)Ô$ð 	=Ø#1°)Ô#<ˆM˜%Ñ Ø5�Œ�[Ð.Ð. IÐ.Ð.Ô5°iÐQÐQÀ=ÐQÐQ×bÒbÑdÔd×hÒhÕm{Ñm}Ôm}ð  JQð  FQÐhñ  	Rô  	Rð  	Rñ  	Rà�xÐÐs   Â"B9 Â9EÃBEÅEc
                 ó:  — t          |¦  «        }
|
d         }|
d         }d|gg ddgdf\  }}}}g }|pg }|pg }t          |¦  «        dk    ot          |¦  «        dk    }|dk    rt          |¦  «        n+t          t          |¦  «        t          |¦  «        ¦  «        pd}t          |¦  «        D �]º}|t          |¦  «        k     r||         n|r|d         nd }t          |¦  «        |k    r||         n|r|d         nd }|r|t          |¦  «        k     r||         ni }|r%t	          |                     dd¦  «        pd¦  «        nd}|r|dk    rt          |¦  «        }|rt          |¦  «        nd}t          ||¦  «        d	k    rd
nd}|dk    rP|r-|d|gz  }|                     d|› d|› d|› d�¦  «         |dz  }�nŸ|                     d|› d|› d|› d�¦  «         �n~|rå|d|gz  }|                     d¦  «        |k    p@|                     d¦  «        |k    p'||d
k    rd	ndk    p|                     dd¦  «        |k     }|r)|                     d|› d|› d|› d|› d|› d|› d�¦  «         n"|                     d|› d|› d|› d|› d�	¦  «         |                     d¦  «        x}r|dt          |¦  «        z   d|› �gz  }|dz  }n"|                     d|› d|› d|› d|› d�	¦  «         |rW|d|gz  }|rdn|}|                     d|› d|› d|› d|› d|› d�¦  «         |                     d |› d!|› d"|› d�¦  «         |dz  }n|                     d |› d#|› d�¦  «         |dd$|› d�gz  }�Œ¼t          ¦   «         d%g|¢d&‘d' 
                    |¦  «        ‘|¢|¢d(‘d)‘d*‘|‘d+‘t          |¦  «        ‘d,‘| ‘} |r	d-|g| d.d.…<   |	rt          d/| › �¦  «         	 t          j        | d0d0d0¬1¦  «         d S # t          j        $ r}!t          d2|!j        › �¦  «        ‚d }!~!ww xY w)3Nr/  r  rx  ú-mapú0:vr   r   r    r/   ÚstereoÚmonoú[z:a]aformat=channel_layouts=z,apad=pad_dur=100[aoutú]zanullsrc=r=z:cl=rD   rÍ   z:a]aresample=z,aformat=channel_layouts=z,apad=pad_dur=z	,atrim=0:z,asetpts=PTS-STARTPTS[sz:a]apad=pad_dur=r¼  ú-metadata:s:a:ú	language=Ú0z,atrim=start=z,asetpts=PTS-STARTPTS[nz[sz][nz]concat=n=2:v=0:a=1[aoutz]apad=pad_dur=100[aoutz[aoutrv  z-filter_complexú;rh  rH   ry  r{  z	-shortestrz  éüÿÿÿzffmpeg command: Tr|  zFFmpeg error: )r5  rŽ   r]   ÚrangerB   rº   rÊ   r…   r%  r   Újoinr¾  r€  r�  ÚCalledProcessErrorÚ	Exceptionr£  )"Úsave_path_tmpr�  Úsource_audio_tracksÚnew_audio_tracksÚsource_audio_durationrc   Únew_audio_from_startrÙ   Úaudio_codec_keyrÂ  rË  Úaudio_codecÚaudio_bitrateÚinputsÚfiltersÚmapsÚidxÚmetadata_argsÚsourcesÚnewsÚduplicate_sourceÚNrÌ  r¶  ÚnrÜ   Úsource_channelsÚnew_channelsrÎ   Úneeds_filterÚlangr�   r´   Úes"                                     r   Ú/combine_and_concatenate_video_with_audio_tracksr÷     sÆ  € õ 2°/ÑBÔB€NØ  Ô)€KØ" 9Ô-€MØ"&¨
Ð!3°R¸&À%¸È!Ð!KÑ€FˆG�T˜3Ø€MØ!Ð' R€GØÐ!˜r€Då˜7‘|”| qÒ(Ð:­S°©Y¬Y¸ª]ÐØ*¨aÒ/Ð/�ˆD‰	Œ	ˆ	µS½¸W¹¼ÅsÈ4ÁyÄyÑ5QÔ5QÐ5VÐUV€Aå�1‰XŒXð 4'ñ 4'ˆØ�s 7™|œ|Ò+Ð+ˆW�QŒZˆZØ 0Ð:�'˜!”*�*°dð 	
å˜4‘y”y A’~�~ˆD�ŒGˆG°tÐ,E¨D°¬G¨GÀˆØ+@ÐkÀQÍÐMbÑIcÔIcÒEcÐEcÐ$ QÔ'Ð'ÐikˆØ?@ÐG�#˜dŸhšh z°1Ñ5Ô5Ð:¸Ñ;Ô;Ð;ÀaˆØð 	9� AÒ%Ð%Ý5°aÑ8Ô8ˆOØ56Ð=Õ.¨qÑ1Ô1Ð1¸AˆÝ%(¨¸,Ñ%GÔ%GÈ1Ò%LÐ%L˜˜ÐRXˆà  AÒ%Ð%Øð rØ˜4 ˜)Ñ#�Ø—’Ðm 3ÐmÐmÀ>ÐmÐmÐijÐmÐmÐmÑnÔnÐnØ�q‘�‘à—’ÐpÐ-@ÐpÐpÀnÐpÐpÐlmÐpÐpÐpÑqÔqÐqÑqàð HØ˜4 ˜)Ñ#�à—H’H˜WÑ%Ô%¨Ò4ð DØ—H’H˜]Ñ+Ô+Ð/BÒBðDà#¨^¸xÒ-GÐ-G¨¨ÈQÒOðDð —H’H˜Z¨Ñ+Ô+Ð.CÒCð	 ð  ð EØ—N’Nð{˜Cð {ð {Ð.Að {ð {Ð\jð {ð {Ø(=ð{ð {ØH]ð{ð {Øvwð{ð {ð {ñ|ô |ð |ð |ð —N’Nð D˜Cð  Dð  DÐ1Fð  Dð  DÐQfð  Dð  Dð  @Að  Dð  Dð  DñEô Eð EàŸ8š8 JÑ/Ô/Ð/�4ð UØ!Ð&6½¸Q¹¼Ñ&?ÐASÈTÐASÐASÐ%TÑT�MØ�q‘��à—’ð GÐ"5ð  Gð  G¸>ð  Gð  GÐTið  Gð  Gð  CDð  Gð  Gð  GñHô Hð Hð ð 	CØ˜4 ˜)Ñ#�Ø3ÐN˜˜Ð9N�Ø—’ðF˜ð Fð FÐ*=ð Fð FÐXfð Fð FØ#(ðFð FØABðFð Fð FñGô Gð Gð —’ÐI AÐIÐI¨!ÐIÐIÀQÐIÐIÐIÑJÔJÐJØ�q‘��à—’ÐA AÐAÐA¸QÐAÐAÐAÑBÔBÐBà�˜ ˜˜˜Ð&Ñ&ˆ‰åÑÔ˜Tð ' Fð 'Øð'Ø!Ÿhšh wÑ/Ô/ð'àð'à ð'ð ð'ð ð'ð ð	'ð ð	'ð
 ð'õ
 Ð)Ñ*Ô*ð'ð ð'ð &ð'€Cð ð -Ø˜mÐ,ˆˆBˆrˆE‰
àð (ÝÐ& Ð&Ð&Ñ'Ô'Ð'ð5ÝŒ�s $°tÀ$ÐGÑGÔGÐGÐGÐGøÝÔ(ð 5ð 5ð 5ÝÐ3¨¬Ð3Ð3Ñ4Ô4Ð4øøøøð5øøøs   ÏO/ Ï/PÏ>PÐPc           
      óˆ  — |s|rt          d¦  «         dS |€Rt          t          d„ t          j        | t          ¦   «         ¬¦  «        d         D ¦   «         ¦  «        d         ¦  «        }|}|rt          d|d›d	�¦  «         t          ¦   «         d
d| g}|D ]	}	|d|	gz  }Œ
|ddgz  }t          t          |¦  «        ¦  «        D ]}
|d|
dz   › d�gz  }Œt          |pg ¦  «        D ]6\  }
}| 
                    d¦  «        x}r|dt          |
¦  «        z   d|› �gz  }Œ7t          |¦  «        }|ddd|d         gz  }|d         r|d|d         gz  }|dt          |¦  «        |gz  }t          j        || d¬¦  «        }|j        dk    rt!          d|j        › �¦  «        ‚|r#t          d|› dt          |¦  «        › d �¦  «         dS )!NzNo audio tracks to combine.Fc              3   ó2   K  — | ]}|d          dk    ¯|V — ŒdS )r·   ÚvideoNr   rµ  s     r   r¾   z2combine_video_with_audio_tracks.<locals>.<genexpr>‚  s<   è è € ð $>ð $>¨!Ø"# L¤/°WÒ"<Ð"<ð %&Ø"<Ð"<Ð"<Ð"<ð$>ð $>r   r³   rÀ   rÍ   zVideo duration: r¸  r¶  rv  rx  rÑ  rÒ  r   z:ar¼  r×  rØ  rh  rH   ry  r/  r  rz  z-tT)r~  r  r   zFFmpeg error:
zCreated z with z audio track(s))r¾  r4   rÃ   r   rÂ   r   r   rÜ  rŽ   rÀ  rº   r%  r5  r€  r�  Ú
returncoderß  r£  )Útarget_videoÚaudio_tracksÚoutput_videoÚaudio_metadatarå  rÂ  Úvideo_durationÚdurr´   rC   rÌ  rÜ   rõ  rË  Úresults                  r   Úcombine_video_with_audio_tracksr  |  s\  € àð GØÐF•EÐ7Ñ8Ô8Ð8ÀÀàÐÝ�tð $>ð $>­v¬|¸LÍoÑN_ÔN_Ð/`Ñ/`Ô/`ÐajÔ/kð $>ñ $>ô $>ñ  >ô  >Ø>Hô Jñ Kô Kˆà
€CØÐ4•Ð3¨Ð3Ð3Ð3Ð3Ñ4Ô4Ð4åÑÔ˜T 4¨Ð
6€CØð ð ˆØ��dˆ|ÑˆˆàˆF�Eˆ?Ñ€CÝ•3�|Ñ$Ô$Ñ%Ô%ð $ð $ˆØ�˜1˜Q™3˜
˜
˜
Ð#Ñ#ˆˆå˜^Ð1¨rÑ2Ô2ð Cð C‰ˆˆ4Ø—H’H˜ZÑ(Ô(Ð(ˆDð 	CØÐ$¥s¨1¡v¤vÑ-Ð/A¸4Ð/AÐ/AÐBÑBˆCøå1°/ÑBÔB€NØˆF�F˜F N°7Ô$;Ð<Ñ<€CØ�iÔ ð 3Ø�˜ yÔ1Ð2Ñ2ˆØˆD•#�c‘(”(˜LÐ)Ñ)€CåŒ^˜C°G°À$ÐGÑGÔG€FØÔ˜AÒÐÝÐ9¨&¬-Ð9Ð9Ñ:Ô:Ð:Øð QÝÐO˜ÐOÐO­S°Ñ->Ô->ÐOÐOÐOÑPÔPÐPØˆ4r   c                 óx  — d}| D ]™}	 t           j                             |¦  «        r-t          j        |¦  «         |dz  }|rt	          d|› �¦  «         ŒP# t
          $ r t	          d|› d�¦  «         Y Œot          $ r}t	          d|› d|› �¦  «         Y d}~Œ’d}~ww xY w|r|dk    rt	          d	|› d
�¦  «         |S )zì
    Clean up temporary audio files.
    
    Args:
        audio_tracks: List of audio file paths to delete
        verbose: Enable verbose output (default: False)
        
    Returns:
        Number of files successfully deleted
    r   r   zCleaned up zWarning: Could not delete z (file may be in use)zWarning: Error deleting r§  NzSuccessfully deleted z temporary audio file(s))r$   rC   r½  Úunlinkr¾  ÚPermissionErrorrß  )rý  rÂ  Údeleted_countr™   rö  s        r   Úcleanup_temp_audio_filesr  ¡  s+  € ð €Mà"ð 
@ð 
@ˆ
ð		@ÝŒw�~Š~˜jÑ)Ô)ð 6Ý”	˜*Ñ%Ô%Ð%Ø Ñ"�Øð 6ÝÐ4¨
Ð4Ð4Ñ5Ô5Ð5øøÝð 	Rð 	Rð 	RÝÐP¨zÐPÐPÐPÑQÔQÐQÐQÐQÝð 	@ð 	@ð 	@ÝÐ>¨ZÐ>Ð>¸1Ð>Ð>Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?øøøøð	@øøøð ð O�= 1Ò$Ð$ÝÐM mÐMÐMÐMÑNÔNÐNàÐs   ˆAAÁBÁ4	BÁ=BÂBé   Ú	libx264_8Úmp4r7  c	           
      ó  — t          j        | ¦  «        r-t          | j        ¦  «        dk    r|                      d¦  «        } t          ||| ¦  «         d|› �}	|€#t          j        dt          |	¬¦  «        ¦  «        n|}
|
 	                    |	¦  «        st          j
        |
¦  «        d         |	z   }
t          ||¦  «        }d}t          |¦  «        D �].}	 t          j        |
f|ddœ|¤Ž}	 t          j        | ¦  «        �rÐ| j        t           j        k    r€| j        d	k    ru| j        d         d
k    rd|d
k    r^| d                              d
ddd¦  «        }|D ];}|                     |                     ¦   «                              ¦   «         ¦  «         Œ<�n| j        t           j        k    r:|                      ¦   «                              d¦  «                             d¦  «        } |                      d¦  «        D ]Õ}|                     t7          |¦  «        t9          |¦  «        ¦  «        }t:          j                             ||||¬¦  «        }|                      d¦  «         !                    t           j        ¦  «                             d
dd¦  «                             ¦   «                              ¦   «         }|                     |¦  «         ŒÖnÐtE          | tF          tH          f¦  «        rš| r˜t          j        | d         ¦  «        r~| D ]z}|€Œ|j        dk    rU|j        d         dv r|}n|                     d
ddd¦  «        }|D ]'}|                     tK          |||¬¦  «        ¦  «         Œ(Œe|                     |¦  «         Œ{n| D ]}|                     |¦  «         Œ| &                    ¦   «          n# | &                    ¦   «          w xY w|
c S # tN          $ r"}|}tQ          d|› d|› �¦  «         Y d}~�Œ(d}~ww xY wdS )zCSave tensor as video with configurable codec and container options.r9  r   r!   Nú/tmp©r)   rI  )r¤   Úffmpeg_log_levelr7  r   r/   r;  g     à_@rì   ©ÚnrowrW  rX  rN  rß   r:  )rW  rX  zerror saving r§  ))r0   r1   rŽ   r:   Ú	unsqueezerJ  rŠ  rÝ  r+   r‰  r‹  Ú_get_codec_paramsrÜ  ÚimageioÚ
get_writerr.   rO  r9   ÚpermuteÚappend_datar3   r5   r4   rS  rR  ÚunbindÚclampr�   r]   ÚtorchvisionÚutilsÚ	make_gridÚmulÚtyper<  r=  r>  r[  rt   rß  r¾  )r@  Ú	save_filer¤   r·   rH  r  rW  rX  Úretryr)   Ú
cache_fileÚcodec_paramsrI  Ú_Úwriterr  rV  ÚuÚgridrA  rö  s                        r   Ú
save_videor'  À  si  € õ „�vÑÔð %¥3 v¤|Ñ#4Ô#4¸Ò#9Ð#9Ø×!Ò! !Ñ$Ô$ˆå! *¨i¸Ñ@Ô@Ð@à�ˆ_ˆ_€FØ?HÐ?P•”˜&¥)°6Ð":Ñ":Ô":Ñ;Ô;Ð;ÐV_€JØ×Ò˜vÑ&Ô&ð :Ý”\ *Ñ-Ô-¨aÔ0°6Ñ9ˆ
õ % Z°Ñ;Ô;€Lð €EÝ�5‰\Œ\ð ,4ñ ,4ˆð+	4åÔ'¨
Ðf¸ÈgÐfÐfÐYeÐfÐfˆFð"Ý”? 6Ñ*Ô*ñ 2à”|¥u¤{Ò2Ð2°v´{ÀaÒ7GÐ7GÈFÌLÐYZÌOÐ_`ÒL`ÐL`ÐeiÐmnÒenÐenØ!'¨¤×!2Ò!2°1°a¸¸AÑ!>Ô!>˜Ø%+ð Dð D˜EØ"×.Ò.¨u¯yªy©{¬{×/@Ò/@Ñ/BÔ/BÑCÔCÐCÐCñDð "œ<­5¬;Ò6Ð6Ø%+§\¢\¡^¤^×%8Ò%8¸Ñ%?Ô%?×%DÒ%DÀSÑ%IÔ%I˜FØ!'§¢¨qÑ!1Ô!1ð 6ð 6˜AØ !§¢­¨KÑ(8Ô(8½#¸kÑ:JÔ:JÑ KÔ K˜AÝ#.Ô#4×#>Ò#>Ø !¨¸	È{ð $?ñ $ô $˜Dð %)§H¢H¨S¡M¤M×$6Ò$6µu´{Ñ$CÔ$C×$KÒ$KÈAÈqÐRSÑ$TÔ$T×$XÒ$XÑ$ZÔ$Z×$`Ò$`Ñ$bÔ$b˜EØ"×.Ò.¨uÑ5Ô5Ð5Ð5ð6õ   ­­u¨Ñ6Ô6ð 2¸6ð 2ÅeÄoÐV\Ð]^ÔV_ÑF`ÔF`ð 2Ø!'ð 6ð 6˜Ø ˜=Ø$Ø œ:¨š?˜?Ø$œ{¨2œ°)Ð;Ð;Ø).  à).¯ª°q¸!¸QÀÑ)BÔ)B Ø)/ð Fð F Ø &× 2Ò 2Õ3OÐPUÐajð  yDð  4Eñ  4Eô  4Eñ  !Fô  !Fð  !Fð  !FðFð #×.Ò.¨uÑ5Ô5Ð5Ð5ð6ð "(ð 2ð 2˜Ø×*Ò*¨5Ñ1Ô1Ð1Ð1à—’‘”��ø�—’‘”��øøøàÐÐÐøåð 	4ð 	4ð 	4ØˆEÝÐ2 )Ð2Ð2¨qÐ2Ð2Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ñ3øøøøð	4øøøðU,4ð ,4s1   ÃOÃ,J5N6Î!OÎ6OÏOÏ
O?ÏO:Ï:O?c                 ó
  — d|› �}|€#t          j        dt          |¬¦  «        ¦  «        n|}|                     |¦  «        st          j        |¦  «        d         |z   }t          d¦  «        }	|	€t          d¦  «        ‚dx}
}t          | ¦  «        D ]l}|€Œ|j        dk    r|j	        d         d	k    r|d         n|}|j        d
k    r6t          |j	        d         ¦  «        t          |j	        d         ¦  «        }
} nŒm|
�|€t          d¦  «        ‚d}t          |¦  «        D �]Ì}|	dddddddd|
› d|› �dt          |¦  «        d›ddgt          ||¦  «        ¢d‘|‘}t          j        |t          j        t          j        t          j        ¬¦  «        }	 |j        €J ‚d}t'          | ¦  «        D ]}|j                             |¦  «         d}Œ|st          d¦  «        ‚|j                             ¦   «          |j        �@|j                             ¦   «                              d d!¬"¦  «                             ¦   «         nd#}|                     ¦   «         }|dk    rt          |pd$¦  «        ‚|c S # t6          $ rt}|}	 |j        �%|j        j        s|j                             ¦   «          n# t6          $ r Y nw xY w|                     ¦   «          t=          d%|› d&|› �¦  «         Y d}~�ŒÆd}~ww xY w|pt          d'|› �¦  «        ‚)(z7Save linear HDR video as a tagged 10-bit HEVC HDR file.r!   Nr  r  r   r   zffmpeg binary not foundr7  r   r9  r/   r;  z)Unable to determine HDR video dimensions.rv  rw  rI  z-fÚrawvideork  Ú	gbrpf32lez-video_sizeÚxz
-frameratez.12grx  zpipe:0z-an)ÚstdinÚstdoutr£  FTz No HDR frames available to save.r    r¤  r¥  r   zffmpeg HDR encode failedzerror saving HDR r§  zFailed to save HDR video: )rŠ  rÝ  r+   r‰  r‹  r   rG  r	   r9   r:   rB   rÜ  r4   rr  r€  ÚPopenÚPIPEÚDEVNULLr,  r   rA   rt   r£  r[   r&   r`  Úwaitrß  ÚclosedÚkillr¾  )r@  r  r¤   r·   rH  Úpreview_exposurer   r)   Úoutput_fileÚffmpeg_pathrD  rE  rA  ÚcurrI  r#  r´   ÚprocessÚwrote_frameÚframe_bytesr£  Úretrö  s                          r   Úsave_hdr_videor<  	  s‹  € ð �ˆ_ˆ_€FØ@IÐ@Q•#”(˜6¥9°FÐ#;Ñ#;Ô#;Ñ<Ô<Ð<ÐW`€KØ×Ò Ñ'Ô'ð <Ý”l ;Ñ/Ô/°Ô2°VÑ;ˆÝ& xÑ0Ô0€KØÐÝÐ4Ñ5Ô5Ð5àÐ€EˆFÝ" 6Ñ*Ô*ð ð ˆØˆ=ØØœ*¨š/˜/¨e¬k¸!¬nÀÒ.AÐ.Aˆe�AŒhˆhÀuˆØŒ8�qŠ=ˆ=Ý ¤	¨!¤Ñ-Ô-­s°3´9¸Q´<Ñ/@Ô/@�EˆFØˆEð ð €}˜˜ÝÐFÑGÔGÐGØ€EÝ�5‰\Œ\ð #8ñ #8ˆà˜˜t WØ�*Ø˜Ø˜eÐ.Ð. fÐ.Ð.Ø�U 3™ZœZÐ.Ð.Ø�(ð

õ ' z°9Ñ=Ô=ð

ð ð

ð ð

ˆõ Ô" 3­j¬oÅjÔFXÕakÔapÐqÑqÔqˆð	8Ø”=Ð,Ð,Ð,ØˆKÝ6°vÑ>Ô>ð #ð #�Ø”×#Ò# KÑ0Ô0Ð0Ø"��Øð GÝ"Ð#EÑFÔFÐFØŒM×ÒÑ!Ô!Ð!ØW^ÔWeÐWq�W”^×(Ò(Ñ*Ô*×1Ò1°'À(Ð1ÑKÔK×QÒQÑSÔSÐSÐwyˆFØ—,’,‘.”.ˆCØ�aŠxˆxÝ" 6Ð#GÐ-GÑHÔHÐHØÐÐÐøÝð 	8ð 	8ð 	8ØˆEðØ”=Ð,°W´]Ô5IÐ,Ø”M×'Ò'Ñ)Ô)Ð)øøÝð ð ð Ø�ðøøøà�LŠL‰NŒNˆNÝÐ6 iÐ6Ð6°1Ð6Ð6Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ñ7øøøøð	8øøøð Ð
I•<Ð H¸YÐ HÐ HÑIÔIÐIs=   ÆCI0É0
K.É:K)É=,J*Ê)K)Ê*
J7Ê4K)Ê6J7Ê7,K)Ë)K.c                 ó"   — t          | |¦  «        S )z7Get codec parameters based on codec type and container.)r   )r·   rH  s     r   r  r  L  s   € å# J°	Ñ:Ô:Ð:r   Újpeg_95c                 óN  — | j         d         dk    }t          ||¬¦  «        }t          j        |¦  «        d         |d         z   }d}	t	          |¦  «        D �]3}
	 |d         s|�rv| j        t          j        k    r\t          j	         
                    | |d¬¦  «                             d	d
d¦  «                             ¦   «                              ¦   «         }nÔ|                      t          |¦  «        t!          |¦  «        ¦  «        } t          j	         
                    | |||¬¦  «        }|                     d¦  «                             d¦  «                             dd¦  «                             d	d
d¦  «                             dt          j        ¦  «                             ¦   «         }|rdnd}t+          j        ||¬¦  «        } |j        |fi |d         ¤Ž n”| j        t          j        k    }|r'|                      ¦   «                              d¦  «        n/|                      t          |¦  «        t!          |¦  «        ¦  «        } t          j	        j        | |f||rdn||dœ|d         ¤Ž  n3# t6          $ r}|}	Y d}~�Œ-d}~ww xY wt9          d|› d|› d|	› �¦  «        |	‚|S )z:Save tensor as image with configurable format and quality.r   r9  )Úrgbar  NÚuse_pilF)r  rW  r   r/   r  rN  rà   r3   ÚRGBAÚRGB)ÚmodeÚparamsrM  zFailed to save image 'z' after z attempts: )r:   Úget_image_formatrŠ  r‹  rÜ  r.   r0   rO  r  r  r  r  r3   r5   r  r�   r]   r  Úadd_rQ  rN   r   Ú	fromarrayÚsaver4   rS  Ú
save_imagerß  r�  )r@  r  r  rW  rX  Úqualityr   rB  Úformat_inforI  r#  r&  rD  ÚimgÚ	was_uint8rö  s                   r   rJ  rJ  S  sâ  € ð Œ<˜Œ?˜aÒ€Dõ # 7°Ð6Ñ6Ô6€Kõ ”˜YÑ'Ô'¨Ô*¨[¸Ô-?Ñ?€Ið €Eå�5‰\Œ\ð hñ hˆð	Ø˜9Ô%ð j¨ñ jà”<¥5¤;Ò.Ð.Ý&Ô,×6Ò6°vÀDÐTYÐ6ÑZÔZ×bÒbÐcdÐfgÐijÑkÔk×oÒoÑqÔq×wÒwÑyÔy�D�Dà#Ÿ\š\­#¨kÑ*:Ô*:½CÀÑ<LÔ<LÑMÔM�FÝ&Ô,×6Ò6°vÀDÐT]ÐkvÐ6ÑwÔw�DØŸ8š8 C™=œ=×-Ò-¨cÑ2Ô2×9Ò9¸!¸SÑAÔA×IÒIÈ!ÈQÐPQÑRÔR×UÒUÐV[Õ]bÔ]hÑiÔi×oÒoÑqÔq�DØ!%Ð0�v�v¨5�Ý”o d°Ð6Ñ6Ô6�Ø�”˜Ð<Ð< k°(Ô&;Ð<Ð<Ð<Ð<ð #œL­E¬KÒ7�	Ø7@Ðv˜Ÿš™œ×,Ò,¨UÑ3Ô3Ð3ÀfÇlÂlÕSVÐWbÑScÔScÕehÐitÑeuÔeuÑFvÔFv�ÝÔ!Ô,¨V°Yð  jÀTÐ^gÐUvÐUZÐUZÐmvð  EPð  jð  jð  T_ð  `hô  Tið  jð  jð  jØˆEøÝð 	ð 	ð 	ØˆEØˆHˆHˆH‰Høøøøð	øøøõ Ð[¨yÐ[Ð[À%Ð[Ð[ÐTYÐ[Ð[Ñ\Ô\ÐbgÐgàÐs   ÁHI2É2
J	É<JÊJ	c                 óÐ   — |rd} dddiddœdddiddœdddiddœddd	iddœd
i ddœdddiddœdddiddœdddiddœddd	iddœdddiddœdœ
}|                      | |d         ¦  «        S )zDGet the saved format and parameters; transparent images require PNG.Úpngú.jpgrK  é_   T)r  rE  rA  éU   éF   é2   ú.pngFú.webpÚlossless)
r>  Újpeg_85Újpeg_70Újpeg_50rP  Úwebp_95Úwebp_85Úwebp_70Úwebp_50Úwebp_losslessr>  r¹   )rK  r@  Úformatss      r   rF  rF  ƒ  sä   € àð Øˆð "¨i¸¨_ÈÐNÐNØ!¨i¸¨_ÈÐNÐNØ!¨i¸¨_ÈÐNÐNØ!¨i¸¨_ÈÐNÐNð ¨¸Ð>Ð>ð #¨y¸"¨oÈ$ÐOÐOØ"¨y¸"¨oÈ$ÐOÐOØ"¨y¸"¨oÈ$ÐOÐOØ"¨y¸"¨oÈ$ÐOÐOØ!(°ZÀÐ4FÐSWÐXÐXðð €Gð" �;Š;�w ¨	Ô 2Ñ3Ô3Ð3r   )r   ÚPngImagePluginc                 ó‚   — d|                       d¦  «        z   S # t          $ r d|                       d¦  «        z   cY S w xY w)Nó   ASCII   Úasciió   UNICODE úutf-16le)ÚencodeÚUnicodeEncodeError)r¶  s    r   Ú_enc_ucrj  �  sH   € Ø §¢¨'Ñ!2Ô!2Ñ2Ð	2øÝÐIÐIÐI l°Q·X²X¸jÑ5IÔ5IÑ&IÐIÐIÐIÐIøøøs   � ™">½>c                 ót  — t          | t          t          f¦  «        s!t          | ¦  «        } n# t          $ r Y d S w xY w|                      d¦  «        r| dd …                              dd¦  «        S |                      d¦  «        r| dd …                              dd¦  «        S |                      dd¦  «        S )Nrd  r   re  r¤  rf  rg  r    )r<  r­  r®  rß  r'   r&   )Úbs    r   Ú_dec_ucrm  ¡  s­   € Ý�a�%¥Ð+Ñ,Ô,ð &Ý�q‘”ˆQˆQøÝÐ%Ð%Ð%   Ð%øøøØ‡|‚|�NÑ#Ô#ÐK¨A¨a¨b¨b¬E¯LªL¸À(Ñ,KÔ,KÐ%KØ‡|‚|�LÑ!Ô!ÐN¨A¨a¨b¨b¬E¯LªL¸ÀXÑ,NÔ,NÐ%NØ�8Š8�G˜XÑ&Ô&Ð&s   �- ­
;º;c                  ó   — i i i i d dœS )N)Ú0thÚExifÚGPSÚ1stÚ	thumbnailr   r   r   r   Ú_blank_exif_dictrt  ª  s   € Ø˜r¨"°RÀdÐKÐKÐKr   c                 ó^  — dd l }	 |dv r|                     | ¦  «        S |dk    rkt          j        | ¦  «        5 }|j                             d¦  «        }d d d ¦  «         n# 1 swxY w Y   |r|                     |¦  «        nt          ¦   «         S n# t          $ r Y nw xY wt          ¦   «         S )Nr   ©rQ  ú.jpegrW  Úexif)ÚpiexifÚloadr   Úopenr	  rº   rt  rß  )Ú
image_pathr  ry  ÚimÚ
exif_bytess        r   Ú_load_exif_dictr  ®  s  € Ø€M€M€MðØÐ#Ð#Ð#Ø—;’;˜zÑ*Ô*Ð*Ø�'Š>ˆ>Ý”˜JÑ'Ô'ð 1¨2ØœWŸ[š[¨Ñ0Ô0�
ð1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1à.8ÐP�6—;’;˜zÑ*Ô*Ð*Õ>NÑ>PÔ>PÐPð øõ ð ð ð ØˆðøøøåÑÔÐs9   †B ŸB ¹A ÁB Á A$Á$B Á'A$Á('B Â
BÂBc                 óð   — dd l }t          | |¦  «        }|                     di ¦  «         t          |¦  «        |d         |j        j        <   |                     |                     |¦  «        | ¦  «         d S )Nr   rp  )ry  r  Ú
setdefaultrj  ÚExifIFDÚUserCommentÚinsertÚdump)r|  Úcomment_textr  ry  Ú	exif_dicts        r   Ú_insert_exif_user_commentrˆ  ¼  sr   € Ø€M€M€MÝ 
¨CÑ0Ô0€IØ×Ò˜ Ñ$Ô$Ð$Ý4;¸LÑ4IÔ4I€IˆfÔ�f”nÔ0Ñ1Ø
‡M‚M�&—+’+˜iÑ(Ô(¨*Ñ5Ô5Ð5Ð5Ð5r   s   ‰PNG

c                 ó®   — t          j        dt          |¦  «        ¦  «        | z   |z   t          j        dt          j        | |z   ¦  «        dz  ¦  «        z   S )Nú>Il   ÿÿ )ÚstructÚpackrŽ   ÚzlibÚcrc32©Ú
chunk_typer®   s     r   Ú_build_png_chunkr‘  Ç  sN   € ÝŒ;�t�S ™YœYÑ'Ô'¨*Ñ4°tÑ;½f¼kÈ$ÕPTÔPZÐ[eÐhlÑ[lÑPmÔPmÐpzÑPzÑ>{Ô>{Ñ{Ð{r   c                 óN   — | dvrdS |                      dd¦  «        d         dk    S )N>   ó   iTXtó   tEXtó   zTXtFó    r   r   s   comment)Úsplitr�  s     r   Ú_is_png_comment_chunkr˜  Ë  s1   € ØÐ4Ð4Ð4ØˆuØ�:Š:�g˜qÑ!Ô! !Ô$¨
Ò2Ð2r   c                 óø  — t          | d¦  «                             ¦   «         }|                     t          ¦  «        st	          d¦  «        ‚t          dd|                     d¦  «        z   ¦  «        }t          t          ¦  «        }t          t          ¦  «        }d}|t          |¦  «        k     rü|dz   t          |¦  «        k    rt	          d¦  «        ‚t          j
        d	|||d
z   …         ¦  «        d         }||d
z   |dz   …         }|dz   |z   }	|	t          |¦  «        k    rt	          d¦  «        ‚||dz   |dz   |z   …         }
|||	…         }|	}t          ||
¦  «        rŒÈ|s|dk    r|                     |¦  «         d}|                     |¦  «         |t          |¦  «        k     °ü|st	          d¦  «        ‚t          | d¦  «        5 }|                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚrbúInvalid PNG signaturer“  s   comment     r    Fr   zCorrupted PNG chunk headerrŠ  r9  r   é   zCorrupted PNG chunk payloads   IDATTzPNG image data chunk not foundÚwb)r{  r[   r'   Ú_PNG_SIGNATURErÄ   r‘  rh  r®  rŽ   r‹  Úunpackr˜  ÚextendrA   )r|  r†  ÚrawÚcomment_chunkÚoutÚposÚinsertedr(   r�  r‚   Ú
chunk_datarA  r$  s                r   Ú_write_png_comment_metadatar§  Ñ  sF  € Ý
ˆz˜4Ñ
 Ô
 ×
%Ò
%Ñ
'Ô
'€CØ�>Š>�.Ñ)Ô)ð 2ÝÐ0Ñ1Ô1Ð1Ý$ WÐ.LÈ|×ObÒObÐcjÑOkÔOkÑ.kÑlÔl€MÝ
•NÑ
#Ô
#€CÝ
�nÑ
Ô
€CØ€HØ
•�C‘”Š.ˆ.Ø�‰7•S˜‘X”XÒÐÝÐ9Ñ:Ô:Ð:Ý”˜t S¨¨S°1©W¨Ô%5Ñ6Ô6°qÔ9ˆØ˜˜q™  q¡˜Ô)ˆ
Ø�B‰h˜ÑˆØ•�S‘”Š>ˆ>ÝÐ:Ñ;Ô;Ð;Ø˜˜q™  q¡¨6Ñ!1Ð1Ô2ˆ
Ø�C˜�G”ˆØˆÝ  ¨ZÑ8Ô8ð 	ØØð 	˜J¨'Ò1Ð1Ø�JŠJ�}Ñ%Ô%Ð%ØˆHØ�
Š
�5ÑÔÐð! •�C‘”Š.ˆ.ð" ð ;ÝÐ9Ñ:Ô:Ð:Ý	ˆj˜$Ñ	Ô	ð  6Ø�Š�SÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÇG/Ç/G3Ç6G3c                 ón  — 	 t          j        |d¬¦  «        }t          j                             | ¦  «        d                              ¦   «         }|dk    rt          | |¦  «         dS |dv rt          | ||¦  «         dS t          d¦  «        ‚# t          $ r}t          d|› �¦  «         Y d }~dS d }~ww xY w)	NF)Úensure_asciir   rV  T)rQ  rw  rW  zUnsupported formatzError saving metadata: )ÚjsonÚdumpsr$   rC   r‹  r&  r§  rˆ  rÄ   rß  r¾  )r|  Úmetadata_dictÚsave_kwargsÚjr  rö  s         r   Úsave_image_metadatar¯  ï  sÑ   € ð	;ÝŒJ�}°5Ð9Ñ9Ô9ˆÝŒg×Ò˜zÑ*Ô*¨1Ô-×3Ò3Ñ5Ô5ˆØ�&Š=ˆ=Ý'¨
°AÑ6Ô6Ð6¸t¸tØÐ,Ð,Ð,Ý% j°!°SÑ9Ô9Ð9À$À$ÝÐ-Ñ.Ô.Ð.øÝð ;ð ;ð ;ÝÐ+¨Ð+Ð+Ñ,Ô,Ð,°U°U°U°U°U°Uøøøøð;øøøs$   ‚A#B Á'B Á>B Â
B4ÂB/Â/B4c                 ó2  — 	 t           j                             | ¦  «        d                              ¦   «         }|dk    �r6t	          | d¦  «        5 }|                     d¦  «        t          k    rt          d¦  «        ‚t          j	        |¦  «        }	 	 |                     ¦   «         \  }}}|dk    rnL|dv r.| 
                    |||¦  «        }|                     ||¦  «         n|                     |d	z   d¦  «         Œk|j                             d
¦  «        }|rt          j        |¦  «        nd 	 |                     ¦   «          cd d d ¦  «         S # |                     ¦   «          w xY w# 1 swxY w Y   t%          j        | ¦  «        5 }	|dv �r“dd l}
	 |
                     | ¦  «                             di ¦  «                             |
j        j        ¦  «        }|rt/          |¦  «        nd }|r t          j        |¦  «        cd d d ¦  «         S n# t0          $ r Y nw xY w|	j                             d
¦  «        }t5          |t6          t8          f¦  «        r|                     dd¦  «        }|r0t          j        |¦  «        cd d d ¦  «         S # t0          $ r Y nw xY w t=          |	dd„ ¦  «        ¦   «         }|rZ|                     d¦  «        }|rt/          |¦  «        nd }|r0t          j        |¦  «        cd d d ¦  «         S # t0          $ r Y nw xY w	 d d d ¦  «         d S |dk    r«dd l}
|	j                             d¦  «        }|s	 d d d ¦  «         d S |
                     |¦  «                             di ¦  «                             |
j        j        ¦  «        }|rt/          |¦  «        nd }|rt          j        |¦  «        nd cd d d ¦  «         S 	 d d d ¦  «         d S # 1 swxY w Y   d S # t0          $ r}t?          d|› �¦  «         Y d }~d S d }~ww xY w)Nr   rV  rš  r   r›  Ts   IEND)r”  r•  r“  r9  Úcommentrv  r   rp  r    r¤  Úgetexifc                  ó   — d S r?   r   r   r   r   ú<lambda>z%read_image_metadata.<locals>.<lambda>!  s   € °d€ r   i†’  rW  rx  zError reading metadata: ) r$   rC   r‹  r&  r{  r[   rž  rÄ   rb  Ú	PngStreamÚcallÚcrcr¢   Úim_textrº   rª  Úloadsrt   r   ry  rz  r‚  rƒ  rm  rß  r	  r<  r­  r®  r&   r¬  r¾  )r|  r  ÚfprP  Úcidr¤  r(   r®   Úvalr}  ry  Úucr¶  rx  r~  rö  s                   r   Úread_image_metadatar¾  û  sM  € ð6;ÝŒg×Ò˜zÑ*Ô*¨1Ô-×3Ò3Ñ5Ô5ˆØ�&Š=‰=å�j $Ñ'Ô'ð  ¨2Ø—7’7˜1‘:”:¥Ò/Ð/Ý$Ð%<Ñ=Ô=Ð=Ý$Ô.¨rÑ2Ô2�ð ð3Ø+.¯8ª8©:¬:Ñ(˜˜S &Ø 'š>˜>Ø!ØÐ"=Ð=Ð=Ø#&§8¢8¨C°°fÑ#=Ô#=˜DØŸGšG C¨Ñ.Ô.Ð.Ð.àŸGšG F¨Q¡J°Ñ2Ô2Ð2ð3ð œ+Ÿ/š/¨)Ñ4Ô4�CØ.1Ð;�4œ: c™?œ?˜?°tÐ;à—I’I‘K”K�Kð# ð  ð  ð  ñ  ô  ð  ð  øð" —I’I‘K”K�K�Køøøð# ð  ð  ð  øøøð  ð  ð  ð  õ$ ŒZ˜
Ñ#Ô#ð 	 rØÐ'Ð'Ñ'Ø���ðØŸš ZÑ0Ô0×4Ò4°V¸RÑ@Ô@×DÒDÀVÄ^ÔE_Ñ`Ô`�BØ')Ð3� ™œ˜¨t�AØð -Ý#œz¨!™}œ}ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð-øå ð ð ð Ø�Dðøøøà”g—k’k )Ñ,Ô,�Ý˜c¥E­9Ð#5Ñ6Ô6Ð[¸c¿jºjÈÐRZÑ>[Ô>[¸Øð +Ý $¤
¨3¡¤ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	øõ %Ð*Ð*Ð* d dÐ*øøøØ;•w˜r 9¨l¨lÑ;Ô;Ñ=Ô=�Øð /ØŸš %™œ�BØ')Ð3� ™œ˜¨t�AØð /Ý$(¤J¨q¡M¤Mð)	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	øõ*  )Ð.Ð.Ð.¨$¨$Ð.øøøØð-	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð. �gŠ~ˆ~Ø���ØœWŸ[š[¨Ñ0Ô0�
Ø!Ð.¨$ð5	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð6 —[’[ Ñ,Ô,×0Ò0°¸Ñ<Ô<×@Ò@ÀÄÔA[Ñ\Ô\�Ø#%Ð/•G˜B‘K”K�K¨4�Ø()Ð3•t”z !‘}”}�}¨tð;	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð< ð=	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	øõ> ð ;ð ;ð ;ÝÐ,¨Ð,Ð,Ñ-Ô-Ð-°d°d°d°d°d°døøøøð;øøøs  ‚AO/ ÁAE+ÂBEÄ1E+ÅO/ ÅE(Å(E+Å+E/Å/O/ Å2E/Å3O/ Æ

O"ÆA.HÈO/ ÈO"È
HÈO"ÈHÈAO"É/JÊO/ Ê
JÊO"ÊJÊA	O"Ë%LË8O/ Ì
LÌO"ÌLÌO"ÌO/ Ì#'O"Í
O/ ÍA0O"ÏO/ ÏO"ÏO/ Ï"O&Ï&O/ Ï)O&Ï*O/ Ï/
PÏ9PÐP)r   r   r?   )Nri   rj   rk   )Nr   TT)NN)Nr  NNN)TrK  )r\  )NNF)r  )FFr,  N)FNr,  F)Nr,  FN)F)Nr	  r
  r  r   TrK  r7  )Nr	  r
  r  ri   r7  )r   TrK  r>  r7  )jr€  rr   r$   r   r‹  Útypingr   Ú!torchvision.transforms.functionalÚ
transformsrL   ÚTFÚtorch.nn.functionalÚnnÚFÚcv2r  r"   r  r0   ÚPILr   Úos.pathrC   rŠ  rª  r5   r6   Ú	soundfiler@   r�  ra  Úhdrr   r   r   r	   Úvideo_decoder
   r   Úvideo_codecsr   r   r   r   Úvirtual_mediar   r   r   r   r   r+   r=   rF   rU   rh   rz   rƒ   rŒ   r—   rœ   r±   rÇ   rÊ   rÖ   rÝ   rê   r  r  r*  r5  r?  rJ  r[  r%  rf  r=  rr  rt  r„  r�  r>  ÚdictrB   r›  r²  rÏ  r÷  r  r  r'  r<  r  rJ  rF  rb  rj  rm  rt  r  rˆ  rž  r‘  r˜  r§  r¯  r¾  r   r   r   ú<module>rÏ     sK  ðØ Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cà KÐ KÐ KÐ KÐ KÐ KÐ KÐ Kð Fð  Fð  Fð  Fð  Fð  Fð  Fð  Fð  Fð  Fð  Fð  FØ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hð6ð 6ð 6ð8ð 8ð 8ðð ð ð ðð ð ðð ð ð	cð 	cð 	cðCð Cð Cð Cð0Vð Vð Vð Vð;ð ;ð ;ð	ð 	ð 	ðQð Qð Qð.Kð Kð Kðð ð ð ð>,ð ,ð ,ð)ð )ð )ðð ð ð*	ð 	ð 	ð 	ð#ð #ð #ð #ð,gð gð gð gð*ð ð ð ð&4ð 4ð 4ð	8ð 	8ð 	8ðð ð ð "ð "ð "ð`ð `ð `ð `ðAð A S¨4¡Zð A¸#ð AÈð Að Að Að Að¨¨t©ð ÀÀdÁ
ð ÈtÐTWÌyð ð ð ð ð 7ð 7ð 7ð
Dð 
Dð 
Dð 
Dðð ð ð ð(6¨sð 6°u¸SÀ$ÀsÈCÀxÄ.ÐRUÐ=UÔ7Vð 6ð 6ð 6ð 6ð,ð ð ð.K ð K ð K ð K ðf ØØØðY5ð Y5ð Y5ð Y5ðz txð"ð "ð "ð "ðJð ð ð ð@ ØØ&ØØØØ#ØðF4ð F4ð F4ð F4ðV ØØ&ØØ!$Øð@Jð @Jð @Jð @JðF;ð ;ð ;ð ØØ#Ø!Øð-ð -ð -ð -ð`4ð 4ð 4ð 4ð0 &Ð %Ð %Ð %Ð %Ð %Ð %Ð %ðJð Jð Jð'ð 'ð 'ðLð Lð Lðð ð ð6ð 6ð 6ð &€ð|ð |ð |ð3ð 3ð 3ðð ð ð<
;ð 
;ð 
;ð7;ð 7;ð 7;ð 7;ð 7;r   