Ë
    š„j˜¾  ã                   ó´  — 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Zd dlZd dlZddl	m
Z
 ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z! ddd	d
d
ddddddddœZ"dddddddddœZ#d„ Z$d„ Z% G d„ de«      Z& G d„ d e
«      Z' G d!„ d"e'«      Z( G d#„ d$e'«      Z) G d%„ d&e)«      Z* G d'„ d(e'«      Z+ G d)„ d*e'«      Z, G d+„ d,e'«      Z- G d-„ d.e'«      Z. G d/„ d0e.«      Z/ G d1„ d2e.«      Z0 G d3„ d4e.«      Z1 G d5„ d6e.«      Z2 G d7„ d8e.«      Z3 G d9„ d:e3«      Z4 G d;„ d<e3«      Z5 G d=„ d>e'«      Z6 G d?„ d@e'«      Z7 G dA„ dBe'«      Z8 G dC„ dDe'«      Z9y)Eé    Né   )ÚPostProcessoré   )Úimghdr)ÚMEDIA_EXTENSIONSÚISO639UtilsÚPopenÚPostProcessingErrorÚ_get_exe_version_outputÚdeprecation_warningÚdetect_exe_versionÚdetermine_extÚdfxp2srtÚencodeArgumentÚfilter_dictÚfloat_or_noneÚis_outdated_versionÚ
orderedSetÚprepend_extensionÚreplace_extensionÚshell_quoteÚtraverse_objÚvariadicÚwrite_json_fileÚadtsÚflacÚipodÚmatroskaÚmpegÚoggÚmpegtsÚasfÚwebmÚwebvtt)Úaacr   Úm4aÚmkaÚmkvÚmpgÚogvÚtsÚwmaÚwmvÚwebaÚvtt)Úmp3Ú
libmp3lame© )r&   r%   )ú-fr   )r&   r%   )ú-bsf:aÚaac_adtstoasc)ÚopusÚlibopusr2   )r    Ú	libvorbisr2   )r   r   r2   )r&   N)ú-acodecÚalac)ÚwavN)r3   r;   )r0   r%   r&   r6   Úvorbisr   r:   r;   c           	      ó†   — t        j                  dj                  dj                  dj                  | «      «      «      «      S )Nz{0}(?:/{0})*$z(?:\s*\w+\s*>)?\s*(?:{})\s*ú|)ÚreÚcompileÚformatÚjoin)Ú	supporteds    úR/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/postprocessor/ffmpeg.pyÚcreate_mapping_rerE   ?   s6   € Ü�:‰:Ð&×-Ñ-Ð.L×.SÑ.SÐTW×T\ÑT\Ð]fÓTgÓ.hÓiÓjÐjó    c                 ó  — |j                  «       j                  d«      D ]_  }|j                  dd«      }t        |«      dk(  s|d   j                  «       | k(  sŒ:|d   j                  «       }|| k(  r	|d| › �fc S |dfc S  dd| › �fS )	zo
    Get corresponding item from a mapping string like 'A>B/C>D/E'
    @returns    (target, error_message)
    ú/ú>r   r   éÿÿÿÿzalready is in target format Nzcould not find a mapping for )ÚlowerÚsplitÚlenÚstrip)ÚsourceÚmappingÚpairÚkvÚtargets        rD   Úresolve_mappingrT   C   s™   € ð
 —‘“×%Ñ% cÓ*ò  ˆØ�Z‰Z˜˜QÓˆÜˆr‹7�aŠ<˜2˜a™5Ÿ;™;›=¨FÓ2Ø˜‘V—\‘\“^ˆFØ˜ÒØÐ!=¸f¸XÐFÐFÒFØ˜4�<Òð ð Ð0°°Ð9Ð9Ð9rF   c                   ó   — e Zd Zy)ÚFFmpegPostProcessorErrorN)Ú__name__Ú
__module__Ú__qualname__r2   rF   rD   rV   rV   R   s   „ ØrF   rV   c                   ó  — e Zd Z ej                  dd¬«      Zd&d„Zed&d„«       Zed&d„«       Z	d„ Z
ddii cZZd„ Zed	„ «       Zej"                  d
„ «       Zej"                  d„ «       Zd„ Zej"                  d„ «       Zej"                  d„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed'ddœd„«       Zd„ Zd„ Zg fd„Zd„ Zd„ Z d'd„Z!d(d„Z"d„ Z#ddœd„Z$d „ Z%ed!„ «       Z&ed"„ «       Z'd#„ Z(d&d$„Z)e*d&d%„«       Z+y))ÚFFmpegPostProcessorÚffmpeg_locationN)Údefaultc                 óZ   — t        j                  | |«       | j                  «       | _        y ©N)r   Ú__init__Ú_determine_executablesÚ_paths)ÚselfÚ
downloaders     rD   r`   zFFmpegPostProcessor.__init__Y   s"   € Ü×Ñ˜t ZÔ0Ø×1Ñ1Ó3ˆ�rF   c                 óH   — t        | «      }|j                  |j                  fS r_   )r[   Ú	_versionsÚ	_features)rd   Úpps     rD   Úget_versions_and_featuresz-FFmpegPostProcessor.get_versions_and_features]   s   € ä  Ó,ˆØ�|‰|˜RŸ\™\Ð)Ð)rF   c                 ó2   — t         j                  | «      d   S )Nr   )r[   ri   )rd   s    rD   Úget_versionsz FFmpegPostProcessor.get_versionsb   s   € ä"×<Ñ<¸ZÓHÈÑKÐKrF   c                 ój  ‡— ddg}| j                  d| j                  j                  «       «      }|€|D �ci c]  }||“Œ c}S t        j                  j                  |«      s| j                  d|› d�d¬«       i S t        j                  j                  |«      r|d d c}}Šnpt        j                  j                  |«      Št        ˆfd„|D «       d«      }t        j                  j                  t        j                  j                  |«      «      }|D �ci c]#  }|t        j                  j                  ||«      “Œ% }}|r`|‰v r\|D ]W  }t        j                  j                  |‰j                  ||«      «      }t        j                  j                  |«      sŒS|||<   ŒY |r|||<   |S c c}w c c}w )	NÚffmpegÚffprober\   zffmpeg-location z* does not exist! Continuing without ffmpegT)Ú	only_oncec              3   ó,   •K  — | ]  }|‰v sŒ|–— Œ y ­wr_   r2   )Ú.0ÚpÚfilenames     €rD   ú	<genexpr>z=FFmpegPostProcessor._determine_executables.<locals>.<genexpr>u   s   øè ø€ ÒB 1°A¸²MœQÑBùs   ƒ	�)Ú	get_paramÚ_ffmpeg_locationÚgetÚosÚpathÚexistsÚreport_warningÚisdirÚbasenameÚnextÚdirnameÚabspathrB   Úreplace)	rc   ÚprogramsÚlocationrr   r   r}   Úpathsry   rs   s	           @rD   ra   z*FFmpegPostProcessor._determine_executablesf   s~  ø€ Ø˜iÐ(ˆà—>‘>Ð"3°T×5JÑ5J×5NÑ5NÓ5PÓQˆØÐØ"*Ö+˜Q�A�q‘DÒ+Ð+ä�w‰w�~‰~˜hÔ'Ø×ÑØ" 8 *Ð,VÐWÐcgð  ô iàˆIÜ�W‰W�]‰]˜8Ô$Ø*2°D¸$Ð'ˆG�X™xä—w‘w×'Ñ'¨Ó1ˆHÜÓB¨ÔBÀHÓMˆHÜ—g‘g—o‘o¤b§g¡g§o¡o°hÓ&?Ó@ˆGà6>Ö?°�”B—G‘G—L‘L ¨!Ó,Ñ,Ð?ˆÐ?Ù˜ HÑ,Øò $�Ü—w‘w—|‘| G¨X×-=Ñ-=¸hÈÓ-JÓK�Ü—7‘7—>‘> $Õ'Ø#�E˜!’Hð$ñ Ø&ˆE�(‰OØˆùò+ ,ùò @s   ¶
F+Ä(F0c                 óf  — | j                   j                  |«      }|| j                  v r+| j                  |   | j                  j                  |i «      fS t	        |dg«      }|rt        |«      nd}|r5ddg}|D ],  }t        j                  ||«      }|sŒ|j                  d«      }Œ. || j                  |<   |dk7  s|s|i fS t        j                  d|«      }|r!|j                  d«      j                  d	d
«      nd }d|v d|j                  «       v t        |dd«      dœx| j                  |<   }	||	fS )Nz-bsfsFz'(?:\d+:)?([0-9.]+)-[0-9]+ubuntu[0-9.]+$zn([0-9.]+)$r   rm   z>(?m)^\s+libavformat\s+(?:[0-9. ]+)\s+/\s+(?P<runtime>[0-9. ]+)Úruntimeú Ú z--enable-libfdk-aacÚsettsz	57.56.100)Úfdkr‰   Úneeds_adtstoasc)rb   rw   Ú_version_cacheÚ_features_cacher   r   r?   ÚmatchÚgroupÚsearchr�   Ú
splitlinesr   )
rc   Úprogry   ÚoutÚverÚregexsÚregexÚmobjÚlavf_runtime_versionÚfeaturess
             rD   Ú_get_ffmpeg_versionz'FFmpegPostProcessor._get_ffmpeg_version„   sK  € Ø�{‰{�‰˜tÓ$ˆØ�4×&Ñ&Ñ&Ø×&Ñ& tÑ,¨d×.BÑ.B×.FÑ.FÀtÈRÓ.PÐPÐPÜ% d¨W¨IÓ6ˆÙ),Ô  Ô%°%ˆÙà:ØðˆFð
  ò (�Ü—x‘x  sÓ+�ÚØŸ*™* Q›-‘Cð(ð %(ˆ×Ñ˜DÑ!Ø�8Ò¡3Ø˜�7ˆNä�y‰yÐZÐ\_Ó`ˆÙIM˜tŸz™z¨)Ó4×<Ñ<¸SÀ"ÔEÐSWÐà(¨CÐ/Ø §¡Ó 0Ð0Ü2Ð3GÈÐV[Ó\ñ1
ð 	
ˆ×Ñ˜TÑ" Xð
 �Hˆ}ÐrF   c                 óp   — t        | j                  | j                  | j                  | j                  i«      S r_   )r   r}   Ú_versionÚprobe_basenameÚ_probe_version©rc   s    rD   rf   zFFmpegPostProcessor._versions¡   s*   € ä˜DŸM™M¨4¯=©=¸$×:MÑ:MÈt×ObÑObÐcÓdÐdrF   c                 ó2   — | j                   }| j                  S r_   )rœ   r}   ©rc   Ú_s     rD   r}   zFFmpegPostProcessor.basename¥   s   € à�M‰MˆØ�}‰}ÐrF   c                 ó2   — | j                   }| j                  S r_   )rž   r�   r¡   s     rD   r�   z"FFmpegPostProcessor.probe_basenameª   s   € à×ÑˆØ×"Ñ"Ð"rF   c                 ó–   ‡ — |f}t        t        d„ ˆ fd„|D «       «      d d i f«      \  }}}|dk(  r||c‰ _        ‰ _        |S |‰ _        |S )Nc                 ó   — | d   S ©Nr   r2   )Úxs    rD   ú<lambda>z2FFmpegPostProcessor._get_version.<locals>.<lambda>²   s
   € �a˜‘d€ rF   c              3   óH   •K  — | ]  }|g‰j                  |«      ¢­–— Œ y ­wr_   )rš   )rq   rr   rc   s     €rD   rt   z3FFmpegPostProcessor._get_version.<locals>.<genexpr>²   s$   øè ø€ ÒTÀ1˜aÐ> $×":Ñ":¸1Ó"=Õ>ÑTùs   ƒ"rm   )r~   Úfilterr}   rg   r�   )rc   ÚkindÚexecutablesr}   Úversionr™   s   `     rD   Ú_get_versionz FFmpegPostProcessor._get_version¯   si   ø€ Ø�hˆÜ&*¬6ÙÓTÈÔTó,VØX\Ð^bÐdfÐWgó'iÑ#ˆ�'˜8à�8ÒØ,4°hÐ)ˆDŒM˜4œ>ð ˆð #+ˆDÔØˆrF   c                 ó$   — | j                  d«      S )Nrm   ©r®   rŸ   s    rD   rœ   zFFmpegPostProcessor._version¹   s   € à× Ñ  Ó*Ð*rF   c                 ó$   — | j                  d«      S )Nrn   r°   rŸ   s    rD   rž   z"FFmpegPostProcessor._probe_version½   s   € à× Ñ  Ó+Ð+rF   c                 ó   — | j                   d uS r_   )r}   rŸ   s    rD   Ú	availablezFFmpegPostProcessor.availableÁ   s   € ð
 �}‰} DÐ(Ð(rF   c                 óL   — | j                   j                  | j                  «      S r_   )rb   rw   r}   rŸ   s    rD   Ú
executablezFFmpegPostProcessor.executableÈ   s   € à�{‰{�‰˜tŸ}™}Ó-Ð-rF   c                 ó   — | j                   d uS r_   )r�   rŸ   s    rD   Úprobe_availablez#FFmpegPostProcessor.probe_availableÌ   s   € à×"Ñ"¨$Ð.Ð.rF   c                 óL   — | j                   j                  | j                  «      S r_   )rb   rw   r�   rŸ   s    rD   Úprobe_executablez$FFmpegPostProcessor.probe_executableÐ   s   € à�{‰{�‰˜t×2Ñ2Ó3Ð3rF   ©Úextc             #   óz   K  — dE d {  –—†  dE d {  –—†  | r
dE d {  –—†  |dv rdE d {  –—†  y y 7 Œ*7 Œ"7 Œ7 Œ­w)N)ú-mapÚ0)z-dnz-ignore_unknown)ú-cÚcopy)Úmp4Úmovr&   )z-c:sÚmov_textr2   )rÀ   r»   s     rD   Ústream_copy_optsz$FFmpegPostProcessor.stream_copy_optsÔ   sP   è ø€ à × Ð ð .×-Ð-ÙØ%×%Ð%ØÐ'Ñ'Ø+×+Ñ+ð (ð 	!øð 	.øà%øà+ús0   ‚;ˆ3‰	;’5“;ž7Ÿ;¬9­;µ;·;¹;c           	      óÂ   — | j                   st        d«      ‚d}t        | j                  |«      r0| j	                  d| j
                  › d| j
                  › d|› d�«       y y )NzLffmpeg not found. Please install or provide the path using --ffmpeg-locationz1.0zYour copy of z is outdated, update z to version z% or newer if you encounter any errors)r³   rV   r   rœ   r{   r}   )rc   Úrequired_versions     rD   Úcheck_versionz!FFmpegPostProcessor.check_versionß   sm   € Ø�~Š~Ü*Ð+yÓzÐzà ÐÜ˜tŸ}™}Ð.>Ô?Ø×Ñ -°·±¨Ð>SÐTX×TaÑTaÐSbð c.Ø.>Ð-?Ð?dð!fõ gð @rF   c                 ó„  — | j                   s| j                  st        d«      ‚	 | j                   r| j                  t	        d«      g}n| j
                  t	        d«      g}|j                  | j                  |«      «       | j                  | j                  › dt        |«      › �«       t        j                  |dt        j                  t        j                  t        j                  ¬«      \  }}}|| j                   rdndk7  ry 	 | j                   r|n|}| j                   rgd }|j!                  d	«      D ]P  }|j#                  d
«      r#|j!                  d«      d   j%                  «       }Œ7|j%                  «       dk(  sŒK|€ŒN|c S  y t'        j(                  d|«      }	|	r|	j+                  d«      S y # t        $ r Y y w xY w)NzXffprobe and ffmpeg not found. Please install or provide the path using --ffmpeg-locationú-show_streamsú-iz command line: T)ÚtextÚstdinÚstdoutÚstderrr   r   ú
zcodec_name=ú=zcodec_type=audiozNStream\s*#\d+:\d+(?:\[0x[0-9a-f]+\])?(?:\([a-z]{3}\))?:\s*Audio:\s*([0-9a-z]+))r·   r³   r
   r¹   r   rµ   ÚappendÚ_ffmpeg_filename_argumentÚwrite_debugr}   r   r	   ÚrunÚ
subprocessÚPIPEÚOSErrorrL   Ú
startswithrN   r?   r�   r�   )
rc   ry   ÚcmdrÍ   rÎ   Ú
returncodeÚoutputÚaudio_codecÚliner—   s
             rD   Úget_audio_codecz#FFmpegPostProcessor.get_audio_codecè   s¨  € Ø×#Ò#¨D¯NªNÜ%ð  'Aó  Bð  Bð	Ø×#Ò#à×)Ñ)Ü" ?Ó3ð5‘ð
 —O‘OÜ" 4Ó(ð*�ð �J‰J�t×5Ñ5°dÓ;Ô<Ø×Ñ §¡˜¨o¼kÈ#Ó>NÐ=OÐPÔQÜ).¯©Ø˜$¤j§o¡o¼j¿o¹oÔV`×VeÑVeô*gÑ&ˆF�F˜Jà 4×#7Ò#7™a¸QÒ?Øð @ð  ×/Ò/‘°VˆØ×ÒØˆKØŸ™ TÓ*ò '�Ø—?‘? =Ô1Ø"&§*¡*¨S£/°!Ñ"4×":Ñ":Ó"<‘KØ—Z‘Z“\Ð%7Ó7¸KÑ<SØ&Ò&ð	'ð ô —9‘9ØaØóˆDñ Ø—z‘z !“}Ð$Øøô# ò 	Ùð	ús   ¥CF3 Æ3	F?Æ>F?c                 óL  — | j                   dk7  r(| j                  r| j                  d«       t        d«      ‚| j	                  «        | j
                  t        d«      t        d«      t        d«      t        d«      t        d«      g}||z  }|j                  | j                  |«      «       | j                  d	t        |«      › �«       t        j                  |d
t        j                  t        j                  t        j                  ¬«      \  }}}t        j                   |«      S )Nrn   z1Only ffprobe is supported for metadata extractionzMffprobe not found. Please install or provide the path using --ffmpeg-locationú-hide_bannerz-show_formatrÉ   z-print_formatÚjsonzffprobe command line: T©rË   rÍ   rÎ   rÌ   )r�   r·   r{   r
   rÇ   r¹   r   rÑ   rÒ   rÓ   r   r	   rÔ   rÕ   rÖ   rá   Úloads)rc   ry   ÚoptsrÙ   rÍ   r¢   s         rD   Úget_metadata_objectz'FFmpegPostProcessor.get_metadata_object  sõ   € Ø×Ñ )Ò+Ø×#Ò#Ø×#Ñ#Ð$WÔXÜ%Ð&uÓvÐvØ×ÑÔð ×!Ñ!Ü˜>Ó*Ü˜>Ó*Ü˜?Ó+Ü˜?Ó+Ü˜6Ó"ð
ˆð 	ˆt‰ˆØ�
‰
�4×1Ñ1°$Ó7Ô8Ø×ÑÐ1´+¸cÓ2BÐ1CÐDÔEÜ—y‘y ¨4¼
¿¹ÔPZ×P_ÑP_Ôgq×gvÑgvÔw‰ˆ��1Ü�z‰z˜&Ó!Ð!rF   c                 ó†   ‡‡— | j                  |«      d   }t        ˆˆfd„t        |«      D «       d «      }|t        |«      fS )NÚstreamsc              3   óL   •K  — | ]  \  }}t        |‰d ¬«      ‰k(  sŒ|–— Œ y­w)F©Ú	casesenseN)r   )rq   ÚiÚstreamÚkeysÚvalues      €€rD   rt   z8FFmpegPostProcessor.get_stream_number.<locals>.<genexpr>&  s'   øè ø€ Òk‘9�1�f´lÀ6È4Ð[`Ô6aÐejÓ6jŒQÑkùs   ƒ$�$)rå   r~   Ú	enumeraterM   )rc   ry   rí   rî   rç   Únums     ``  rD   Úget_stream_numberz%FFmpegPostProcessor.get_stream_number#  sC   ù€ Ø×*Ñ*¨4Ó0°Ñ;ˆÜÜk¤	¨'Ó 2ÔkØóˆð ”C˜“LÐ Ð rF   c                 ót   — t        |d«      }|r*|j                  d«      s| j                  |d   «      |d<   y y y )N)ÚchaptersrJ   Úend_timeÚfilepath)r   rw   Ú_get_real_video_duration)rc   ÚinfoÚlast_chapters      rD   Ú_fixup_chaptersz#FFmpegPostProcessor._fixup_chapters*  s@   € Ü# DÐ*:Ó;ˆÙ × 0Ñ 0°Ô <Ø'+×'DÑ'DÀTÈ*ÑEUÓ'VˆL˜Ò$ð !=ˆ<rF   c                 óÊ   — 	 t        t        | j                  |«      d«      «      }|st        d«      ‚|S # t        $ r$}|rt        d|j                  › �«      ‚Y d }~y d }~ww xY w)N)rA   Údurationzffprobe returned empty durationz$Unable to determine video duration: )r   r   rå   r
   Úmsg)rc   rõ   Úfatalrû   Úes        rD   rö   z,FFmpegPostProcessor._get_real_video_duration/  sr   € ð	ZÜ$Ü˜T×5Ñ5°hÓ?ÐAWÓXóZˆHáÜ)Ð*KÓLÐLØˆOøÜ"ò 	ZÙÜ)Ð,PÐQR×QVÑQVÐPWÐ*XÓYÐYô ûð	Zús   ‚25 µ	A"¾AÁA"c                 ó.   — |r|sy t        ||z
  «      |kD  S r_   )Úabs)rc   Úd1Úd2Ú	tolerances       rD   Ú_duration_mismatchz&FFmpegPostProcessor._duration_mismatch:  s   € Ù™Øô �2˜‘7‹|˜iÑ'Ð'rF   c                 óZ   —  | j                   |D �cg c]  }|g f‘Œ c}||fgfi |¤ŽS c c}w r_   )Úreal_run_ffmpeg)rc   Úinput_pathsÚout_pathrä   Úkwargsry   s         rD   Úrun_ffmpeg_multiple_filesz-FFmpegPostProcessor.run_ffmpeg_multiple_filesA  s?   € Ø#ˆt×#Ñ#Ø$/Ö0˜Dˆd�BŠZÒ0Ø˜ÐÐñ*à"(ñ*ð 	*ùÚ0s   ‘()r   )Úexpected_retcodesc                óü  ‡ ‡‡— ‰ j                  «        t        d„ |D «       «      }‰ j                  t        d«      g}‰ j                  dk(  r|t        d«      t        d«      gz  }ˆ fd„Šd|fd|ffD ]:  \  Š}|t
        j                  j                  ˆˆfd	„t        |«      D «       «      z  }Œ< ‰ j                  d
t        |«      › �«       t        j                  |dt        j                  t        j                  t        j                  ¬«      \  }}}	|	t        |«      vr;‰ j                  |«       t!        |j#                  «       j%                  «       d   «      ‚|D ]  \  }
}|
sŒ	‰ j'                  |
||«       Œ |S )Nc              3   óf   K  — | ])  \  }}|sŒ	t        j                  |«      j                  –— Œ+ y ­wr_   )rx   ÚstatÚst_mtime)rq   ry   r¢   s      rD   rt   z6FFmpegPostProcessor.real_run_ffmpeg.<locals>.<genexpr>I  s+   è ø€ ò KÙ'. t¨QÂTŒB�G‰G�D‹M×"Õ"ñKùs   ‚
1�$1z-yrm   z	-loglevelzrepeat+infoc                 ó,  •— d|› |› �d|› �g}|dk(  r|ddgz  }|dk(  r|j                  d«       |‰j                  ‰j                  |«      z  }|dk(  r|j                  d«       |D �cg c]  }t        |«      ‘Œ c}‰j	                  | «      gz   S c c}w )	Nr¢   Úoz	-movflagsz
+faststartr   rˆ   rë   rÊ   )rÑ   Ú_configuration_argsr}   r   rÒ   )ÚfileÚargsÚnameÚnumberrí   Úargrc   s         €rD   Ú	make_argsz6FFmpegPostProcessor.real_run_ffmpeg.<locals>.make_argsQ  s¥   ø€ Ø˜�v˜f˜XÐ&¨!¨D¨6¨
Ð3ˆDØ�sŠ{Ø˜ lÐ3Ñ3�Ø˜Q’;Ø—K‘K ”OØ�D×,Ñ,¨T¯]©]¸DÓAÑAˆDØ�sŠ{Ø—‘˜DÔ!à04Ö5¨” Õ$Ò5Ø×1Ñ1°$Ó7Ð8ñ9ð:ùÚ5s   Á)Brë   r  c              3   ó\   •K  — | ]#  \  }\  }}|r ‰|t        |«      ‰|d z   «      –— Œ% y­w)r   N)Úlist)rq   rë   ry   rä   Úarg_typer  s       €€rD   rt   z6FFmpegPostProcessor.real_run_ffmpeg.<locals>.<genexpr>_  s8   øè ø€ ò 1Eá#�A‘|˜˜d¹tñ ˜$¤ T£
¨H°a¸!±e×<ñ1Eùs   ƒ),zffmpeg command line: Trâ   rJ   )rÇ   Úminrµ   r   r}   Ú	itertoolsÚchainÚfrom_iterablerï   rÓ   r   r	   rÔ   rÕ   rÖ   r   rV   rN   r‘   Ú	try_utime)rc   Úinput_path_optsÚoutput_path_optsr  Úoldest_mtimerÙ   Ú	path_optsr¢   rÎ   rÚ   r  r  r  s   `          @@rD   r  z#FFmpegPostProcessor.real_run_ffmpegF  sy  ú€ Ø×ÑÔäñ KØ2AôKó Kˆð �‰¤¨tÓ 4Ð5ˆà�=‰=˜HÒ$Ø”N ;Ó/´ÀÓ1NÐOÑOˆCô	:ð &)¨/Ð$:¸SÐBRÐ<SÐ#Tò 	EÑˆH�iØ”9—?‘?×0Ñ0ô 1Eä'0°Ó';ô1Eó Eñ E‰Cð	Eð
 	×ÑÐ0´¸SÓ1AÐ0BÐCÔDÜ %§	¡	Ø�d¤:§?¡?¼:¿?¹?ÔR\×RaÑRaô!cÑˆˆ6�:àœXÐ&7Ó8Ñ8Ø×Ñ˜VÔ$Ü*¨6¯<©<«>×+DÑ+DÓ+FÀrÑ+JÓKÐKØ+ò 	E‰KˆH�aÚØ—‘˜x¨°|ÕDð	Eð ˆrF   c                 ó.   —  | j                   |g||fi |¤ŽS r_   )r
  )rc   ry   r  rä   r	  s        rD   Ú
run_ffmpegzFFmpegPostProcessor.run_ffmpegn  s    € Ø-ˆt×-Ñ-¨t¨f°hÀÑOÈÑOÐOrF   c                 ó@   — | j                  d«      r| S | dk7  rd| z   S | S )N)zhttp://zhttps://ú-zfile:)rØ   )Úfns    rD   rÒ   z-FFmpegPostProcessor._ffmpeg_filename_argumentq  s+   € ð �=‰=Ð0Ô1ØˆIØ! Sšyˆw˜‰|Ð0¨bÐ0rF   c                 óŽ   — | j                  dd«      j                  dd«      } | d   dk(  r| dd  nd| z   } | d   dk(  r| d d S | dz   S )Nú'z'\''z'''r   r   rJ   )r�   )Ústrings    rD   Ú_quote_for_ffmpegz%FFmpegPostProcessor._quote_for_ffmpeg{  s]   € ð
 —‘  WÓ-×5Ñ5°e¸SÓAˆà% a™y¨CÒ/�˜˜‘°S¸6±\ˆØ$ R™j¨CÒ/ˆv�c�rˆ{ÐA°V¸c±\ÐArF   c                 ó
  — t        |«      }|d   dk(  r|dd  }t        |d«      }| j                  d|› d�«       | j                  ||g | j	                  dt        |«      ¬«      ¢d‘d	j                  d
„ |D «       «      ‘«       |S )Nr   r   zkeyframes.tempzRe-encoding "z" with appropriate keyframesFrº   z-force_key_framesú,c              3   ó$   K  — | ]  }|d ›–— Œ
 y­w)z.6fNr2   )rq   Úts     rD   rt   z6FFmpegPostProcessor.force_keyframes.<locals>.<genexpr>�  s   è ø€ Ò)I¸¨Q¨s¨G«*Ñ)Iùs   ‚)r   r   Ú	to_screenr&  rÄ   r   rB   )rc   rs   Ú
timestampsÚkeyframe_files       rD   Úforce_keyframesz#FFmpegPostProcessor.force_keyframes…  s¤   € Ü 
Ó+ˆ
Ø�a‰=˜AÒØ# A B˜ˆJÜ)¨(Ð4DÓEˆØ�‰˜ x jÐ0LÐMÔNØ�‰˜ -ð 2KØ×"Ñ" 5¬m¸HÓ.EÐ"ÓFð2Kàð2Kà!$§¡Ñ)I¸jÔ)IÓ!Ið2Kô 	Lð ÐrF   c                 ó\  — |› d�}| j                  d|› �«       t        |dd¬«      5 }|j                  | j                  ||«      «       ddd«       t	        | j                  t        |«      ¬«      «      }| j                  |g d¢fg||fg«       | j                  |«       y# 1 sw Y   ŒYxY w)	zð
        Use concat demuxer to concatenate multiple files having identical streams.

        Only inpoint, outpoint, and duration concat options are supported.
        See https://ffmpeg.org/ffmpeg-formats.html#concat-1 for details
        z.concatzWriting concat spec to Úwúutf-8©ÚencodingNrº   )rà   z-nostdinr3   Úconcatz-safer¾   )	rÓ   ÚopenÚ
writelinesÚ_concat_specr  rÄ   r   r  Ú_delete_downloaded_files)rc   Úin_filesÚout_fileÚconcat_optsÚconcat_fileÚfÚ	out_flagss          rD   Úconcat_filesz FFmpegPostProcessor.concat_files�  sº   € ð "˜
 'Ð*ˆØ×ÑÐ2°;°-Ð@ÔAÜ�+˜s¨WÔ5ð 	C¸Ø�L‰L˜×*Ñ*¨8°[ÓAÔB÷	Cô ˜×.Ñ.´=ÀÓ3JÐ.ÓKÓLˆ	à×ÑØÒUÐVÐWØ˜	Ð"Ð#ô	%ð 	×%Ñ% kÕ2÷	Cð 	Cús   ¨"B"Â"B+c              #   óà   K  — |€i gt        |«      z  }d–— t        ||d¬«      D ]D  \  }}d| j                  | j                  |«      «      › d�–— dD ]  }||v sŒ|› d||   › d�–— Œ ŒF y ­w)Nzffconcat version 1.0
T©Ústrictzfile rÏ   )ÚinpointÚoutpointrû   r‡   )rM   Úzipr-  rÒ   )Úclsr@  rB  r  rä   Ú	directives         rD   r>  z FFmpegPostProcessor._concat_spec£  s”   è ø€ àÐØ˜$¤ X£Ñ.ˆKØ&Ò&Ü˜h¨¸DÔAò 	=‰JˆD�$Ø˜#×/Ñ/°×0MÑ0MÈdÓ0SÓTÐUÐUWÐXÒXà>ò =�	Ø Ò$Ø&˜K q¨¨i©Ð(9¸Ð<Ó<ñ=ñ	=ùs   ‚AA.ÁA.r_   )T)r   ),rW   rX   rY   ÚcontextvarsÚ
ContextVarrv   r`   Ústaticmethodri   rk   ra   rŒ   r�   rš   Úpropertyrf   Ú	functoolsÚcached_propertyr}   r�   r®   rœ   rž   r³   rµ   r·   r¹   rÄ   rÇ   rÞ   rå   rñ   rù   rö   r  r
  r  r&  rÒ   r-  r5  rF  Úclassmethodr>  r2   rF   rD   r[   r[   V   sÝ  „ Ø-�{×-Ñ-Ð.?ÈÔNÐó4ð ò*ó ð*ð òLó ðLòð8 (,¨T l°BÐ#€N�Oòð: ñeó ðeð ×Ññó ðð ×Ññ#ó ð#òð ×Ññ+ó ð+ð ×Ññ,ó ð,ð ñ)ó ð)ð ñ.ó ð.ð ñ/ó ð/ð ñ4ó ð4ð ð,¨4ó ,ó ð,ògò#ðJ .0ó "ò,!òWó
	Zó(ò*ð
 W[ô &òPPð ñ1ó ð1ð ñBó ðBò	ó3ð& ò	=ó ñ	=rF   r[   c                   ó¸   — e Zd Zg ej                  ¢d‘­Z eej                  «       «      Z	 e
dge	¢­«      Zd
d„Zd„ Zd„ Z ej                   d¬«      d	„ «       Zy)ÚFFmpegExtractAudioPPr,   ÚbestNFc                 ót   — t         j                  | |«       |xs d| _        t        |«      | _        || _        y )NrX  )r[   r`   rP   r   Ú_preferredqualityÚ_nopostoverwrites)rc   rd   ÚpreferredcodecÚpreferredqualityÚnopostoverwritess        rD   r`   zFFmpegExtractAudioPP.__init__µ  s4   € Ü×$Ñ$ T¨:Ô6Ø%Ò/¨ˆŒÜ!.Ð/?Ó!@ˆÔØ!1ˆÕrF   c                 ó  — | j                   €g S | j                   dkD  rd| j                   › d�gS dddddœj                  |«      }|sg S |d	   |d
   |d	   z
  | j                   dz  z  z   }|dk(  rdt        |«      › gS d|› gS )Né
   z-b:aÚk)r`  r   )r   r`  )gš™™™™™¹?é   )r   é   )r1   r8   r%   Ú
libfdk_aacr   r   rd  z-vbrz-q:a)rZ  rw   Úint)rc   ÚcodecÚlimitsÚqs       rD   Ú_quality_argsz"FFmpegExtractAudioPP._quality_args»  sº   € Ø×!Ñ!Ð)ØˆIØ×#Ñ# bÒ(Ø˜t×5Ñ5Ð6°aÐ8Ð9Ð9ð "Ø ð Ø ñ
÷ ‰#ˆe‹*ð 	ñ ØˆIà�1‰I˜ ™ V¨A¡YÑ.°4×3IÑ3IÈBÑ3NÑOÑOˆØ�LÒ Øœs 1›v˜hÐ(Ð(Ø˜1˜#ÐÐrF   c                 ó¨   — |€g }nd|g}dg|¢|¢}	 t         j                  | |||«       y # t        $ r}t        d|j                  › �«      ‚d }~ww xY w)Nr9   ú-vnzaudio conversion failed: )r[   r&  rV   r
   rü   )rc   ry   r  rf  Ú	more_optsÚacodec_optsrä   Úerrs           rD   r&  zFFmpegExtractAudioPP.run_ffmpegÑ  sk   € Øˆ=Ø‰Kà$ eÐ,ˆKØÐ0˜Ð0 iÐ0ˆð	MÜ×*Ñ*¨4°°xÀÕFøÜ'ò 	MÜ%Ð(AÀ#Ç'Á'ÀÐ&KÓLÐLûð	Mús   ’+ «	A´AÁA©Úimagesc                 óê  — |d   x}}t        |d   | j                  «      \  }}|dk(  r|d   | j                  v rd\  }}|s| j                  d|› d|› �«       g |fS | j	                  |«      }|€t        d«      ‚|dk(  r|d	v rg t        d
   ¢d‘­\  }}}	}
nP|dk(  s||k(  r	 g t        |   ¢d‘­\  }}}	}
n1t        |   \  }}
}	|
dk(  r| j                  j                  d«      rdg }	}
t        |	«      }	|
dk7  r| j                  |
«      }	t        |||d   «      x}}||k(  r8|
dk(  r| j                  d|› d|› �«       g |fS t        |d«      }t        |d«      }| j                  rWt        j                   j#                  |«      r8t        j                   j#                  |«      r| j                  d|› d�«       g |fS | j                  d|› �«       | j%                  |||
|	«       t        j&                  ||«       t        j&                  ||«       ||d<   ||d<   |j                  d«      �*| j)                  |t+        j*                  «       |d   d¬«       |g|fS # t        $ r t        d   \  }}
}	Y �ŒŠw xY w)Nrõ   r»   rX  )Nz,the file is already in a common audio formatzNot converting audio z; z7WARNING: unable to obtain file audio codec with ffprober%   )r&   rX  r&   rÀ   r0   rŠ   rd  z#; file is already in target format ÚorigÚtempzPost-process file z exists, skippingzDestination: Úfiletimez!Cannot update utime of audio file)Úerrnote)rT   rP   ÚCOMMON_AUDIO_EXTSr2  rÞ   r
   ÚACODECSÚKeyErrorrg   rw   r  ri  r   r   r[  rx   ry   rz   r&  r�   r   Útime)rc   ÚinformationÚ	orig_pathry   Útarget_formatÚ	_skip_msgÚ	filecodecÚ	extensionr¢   rl  ÚacodecÚ	temp_pathÚnew_paths                rD   rÔ   zFFmpegExtractAudioPP.runÜ  s·  € à& zÑ2Ð2ˆ	�DÜ#2°;¸uÑ3EÀtÇ|Á|Ó#TÑ ˆ�yØ˜FÒ" {°5Ñ'9¸T×=SÑ=SÑ'SØ'[Ñ$ˆM˜9ÙØ�N‰NÐ2°9°+¸RÀ	¸{ÐKÔLØ�{�?Ð"à×(Ñ(¨Ó.ˆ	ØÐÜ%Ð&_Ó`Ð`à˜Ò -°?Ñ"Bà.E¬w°u©~Ð.E¸vÑ.EÑ+ˆI�q˜)¡VØ˜fÒ$¨¸Ò(Bð>Ø2M´7¸9Ñ3EÐ2MÀvÑ2MÑ/�	˜1˜i©ô
 ,3°=Ñ+AÑ(ˆI�v˜yØ˜Š 4§>¡>×#5Ñ#5°eÔ#<Ø$0°"˜	�ä˜“Oˆ	Ø�VÒØ×*Ñ*¨6Ó2ˆIä0°°yÀ+ÈeÑBTÓUÐUˆ	�Hà�tÒØ˜ÒØ—‘Ð!6°y°kÐAdÐerÐdsÐtÔuØ˜;�Ð&Ü)¨$°Ó7ˆIÜ)¨$°Ó7ˆIØ×"Ò"¤r§w¡w§~¡~°hÔ'?Ü—G‘G—N‘N 9Ô-Ø�N‰NÐ/°¨zÐ9JÐKÔLØ�{�?Ð"à�‰˜ x jÐ1Ô2Ø�‰˜˜i¨°Ô;ä
�
‰
�4˜Ô#Ü
�
‰
�9˜hÔ'Ø"*ˆ�JÑØ&ˆ�EÑð �?‰?˜:Ó&Ð2Ø�N‰NØœ$Ÿ)™)›+ {°:Ñ'>ÐHkð ô mð ˆ{˜KÐ'Ð'øôM ò >Ü/6°u©~Ñ,�	˜6£9ð>ús   Â"I ÉI2É1I2)NNNF)rW   rX   rY   r   Úcommon_audiorv  Útuplerw  rí   ÚSUPPORTED_EXTSrE   Ú	FORMAT_REr`   ri  r&  r   Ú_restrict_torÔ   r2   rF   rD   rW  rW  °  sl   „ Ø?Ð*×7Ñ7Ð?¸Ñ?ÐÙ˜7Ÿ<™<›>Ó*€NÙ! 6Ð";¨NÑ";Ó<€Ió2ò ò,	Mð  €]×Ñ uÔ-ñ:(ó .ñ:(rF   rW  c                   óÜ   ‡ — e Zd Zg  eg ej
                  ¢d‘­«      ¢ eg ej                  ¢d‘d‘­«      ¢­Z ee«      Z	dZ
d
ˆ fd„	Zed„ «       Z ej                  d¬«      d	„ «       Zˆ xZS )ÚFFmpegVideoConvertorPPÚgifr%   r<   Ú
convertingc                 ó2   •— t         ‰| �  |«       || _        y r_   ©Úsuperr`   rP   )rc   rd   ÚpreferedformatÚ	__class__s      €rD   r`   zFFmpegVideoConvertorPP.__init__"  s   ø€ Ü‰Ñ˜Ô$Ø%ˆ�rF   c              #   ón   K  — t         j                  d«      E d {  –—†  | dk(  rdE d {  –—†  y y 7 Œ7 Œ­w)NFÚavi)z-c:vÚlibxvidz-vtagÚXVID©r[   rÄ   ©Ú
target_exts    rD   Ú_optionszFFmpegVideoConvertorPP._options&  s9   è ø€ ä&×7Ñ7¸Ó>×>Ð>Ø˜ÒØ;×;Ñ;ð ð 	?øà;ús   ‚5›1œ5ª3«5³5Fro  c           	      ó¦  — |d   |d   j                  «       }}t        || j                  «      \  }}|r(| j                  d| j                  › d|› d|› �«       g |fS t        |||«      }| j                  | j                  j                  «       › d|› d|› d|› �«       | j                  ||| j                  |«      «       ||d<   |x|d	<   |d<   |g|fS )
Nrõ   r»   zNot z media file "ú"; z video from z to z; Destination: rA   )	rK   rT   rP   r2  Ú_ACTIONr   Útitler&  r˜  )rc   r÷   rs   Ú
source_extr—  r}  Úoutpaths          rD   rÔ   zFFmpegVideoConvertorPP.run,  så   € à# JÑ/°°e±×1BÑ1BÓ1D�*ˆÜ /°
¸D¿L¹LÓ IÑˆ
�IÙØ�N‰N˜T $§,¡, ¨}¸X¸JÀcÈ)ÈÐUÔVØ�t�8ˆOä# H¨j¸*ÓEˆØ�‰˜$Ÿ,™,×,Ñ,Ó.Ð/¨|¸J¸<ÀtÈJÈ<ÐWfÐgnÐfoÐpÔqØ�‰˜ '¨4¯=©=¸Ó+DÔEà"ˆˆZÑØ'1Ð1ˆˆX‰˜˜e™Øˆz˜4ÐÐrF   ©NN)rW   rX   rY   Úsortedr   Úcommon_videorƒ  r…  rE   r†  r›  r`   rQ  r˜  r   r‡  rÔ   Ú__classcell__©r�  s   @rD   r‰  r‰    s˜   ø„ ðÙ	Ð7Ð"×/Ñ/Ð7°Ñ7Ó	8ðá	ÐAÐ"×/Ñ/ÐA°ÐA¸ÑAÓ	Bñ€Nñ " .Ó1€IØ€Gõ&ð ñ<ó ð<ð
  €]×Ñ uÔ-ñ ó .ô rF   r‰  c                   ó    — e Zd ZdZed„ «       Zy)ÚFFmpegVideoRemuxerPPÚremuxingc                 ó*   — t         j                  «       S r_   r•  r–  s    rD   r˜  zFFmpegVideoRemuxerPP._options@  s   € ä"×3Ñ3Ó5Ð5rF   N)rW   rX   rY   r›  rQ  r˜  r2   rF   rD   r¥  r¥  =  s   „ Ø€Gàñ6ó ñ6rF   r¥  c                   óV   ‡ — e Zd ZdZdˆ fd„	Z ej                  d¬«      d„ «       Zˆ xZS )ÚFFmpegEmbedSubtitlePP)rÁ   rÂ   r&   r#   r(   r'   Fc                 ó2   •— t         ‰| �  |«       || _        y r_   )rŽ  r`   Ú_already_have_subtitle)rc   rd   Úalready_have_subtitler�  s      €rD   r`   zFFmpegEmbedSubtitlePP.__init__H  s   ø€ Ü‰Ñ˜Ô$Ø&;ˆÕ#rF   ro  c                 óJ  — |d   | j                   vr2| j                  ddj                  | j                   «      › d�«       g |fS |j                  d«      }|s| j                  d«       g |fS |d   }	 |d   }g g g }}}d}d}	|j	                  «       D ]ü  \  }
}t
        j                  j                  |j                  dd	«      «      s| j                  d
|
› d�«       ŒK|d   }|dk(  r| j                  d«       nt|dk7  s
|dk(  rK|dk(  rF|j                  |
«       |j                  |j                  d«      «       |j                  |d   «       n|s|dk(  r|dk7  rd}| j                  d«       |	rŒÞ|dk(  sŒä|dk(  sŒêd}	| j                  d«       Œþ |sg |fS |g|¢}g | j                  |d   ¬«      ¢d‘d‘}t        t        ||d¬«      «      D ]w  \  }\  }
}|j                  d|dz   › d�g«       t        j                  |
«      xs |
}|j                  d|› �d|› �g«       |sŒW|j                  d|› �d|› �d|› �d|› �g«       Œy t!        |d «      }| j                  d!|› d"�«       | j#                  |||«       t        j$                  ||«       | j&                  rg n|}||fS )#Nr»   z"Subtitles can only be embedded in ú, z filesÚrequested_subtitlesz#There aren't any subtitles to embedrõ   Frˆ   úSkipping embedding ú% subtitle because the file is missingrá   z!JSON subtitles cannot be embeddedr#   r/   r  Tz3Only WebVTT subtitles can be embedded in webm filesrÁ   ÚasszEASS subtitles cannot be properly embedded in mp4 files; expect issuesrº   r½   z-0:srH  r   z:0z-metadata:s:s:z	language=zhandler_name=útitle=rs  zEmbedding subtitles in "ú")r…  r2  rB   rw   Úitemsrx   ry   rz   r{   rÑ   rÄ   rï   rL  Úextendr   Ú
short2longr   r
  r�   r«  )rc   r÷   Ú	subtitlesrs   r»   Ú	sub_langsÚ	sub_namesÚsub_filenamesÚwebm_vtt_warnÚmp4_ass_warnÚlangÚsub_infoÚsub_extÚinput_filesrä   rë   r  Ú	lang_codeÚtemp_filenameÚfiles_to_deletes                       rD   rÔ   zFFmpegEmbedSubtitlePP.runL  s  € à�‰;˜d×1Ñ1Ñ1Ø�N‰NÐ?ÀÇ	Á	È$×J]ÑJ]Ó@^Ð?_Ð_eÐfÔgØ�t�8ˆOØ—H‘HÐ2Ó3ˆ	ÙØ�N‰NÐAÔBØ�t�8ˆOà˜
Ñ#ˆð
	ð �5‰kˆØ.0°"°b˜m�9ˆ	ØˆØˆà'Ÿo™oÓ/ò 	m‰NˆD�(Ü—7‘7—>‘> (§,¡,¨z¸2Ó">Ô?Ø×#Ñ#Ð&9¸$¸Ð?dÐ$eÔfØØ˜u‘oˆGØ˜&Ò Ø×#Ñ#Ð$GÕHØ˜’ 3¨&¢=°WÀÒ5EØ× Ñ  Ô&Ø× Ñ  §¡¨fÓ!5Ô6Ø×$Ñ$ X¨jÑ%9Õ:á$¨°ª¸7ÀeÒ;KØ$(�MØ×'Ñ'Ð(]Ô^Ú C¨5£L°WÀÓ5EØ#�Ø×#Ñ#Ð$kÕlð#	mñ& Ø�t�8ˆOàÐ0 -Ð0ˆð
Ø×"Ñ" t¨E¡{Ð"Ó3ð
ð ð	
ð ð	
ˆô  )¬¨Y¸	È$Ô)OÓPò 	E‰OˆA‰|��dØ�K‰K˜ A¨¡E 7¨" Ð.Ô/Ü#×.Ñ.¨tÓ4Ò<¸ˆIØ�K‰K˜>¨!¨Ð-°¸9¸+Ð/FÐGÔHÚØ—‘˜~¨a¨SÐ1°]À4À&Ð3IØ-¨a¨SÐ1°V¸D¸6°?ðDõ Eð	Eô *¨(°FÓ;ˆØ�‰Ð1°(°¸1Ð=Ô>Ø×&Ñ& {°MÀ4ÔHÜ
�
‰
�= (Ô+à $× ;Ò ;™"ÀˆØ Ð$Ð$rF   )NF)	rW   rX   rY   r…  r`   r   r‡  rÔ   r¢  r£  s   @rD   r©  r©  E  s0   ø„ Ø@€Nõ<ð  €]×Ñ uÔ-ñF%ó .ôF%rF   r©  c                   ór   — e Zd Zd
d„Zed„ «       Z ej                  d¬«      d„ «       Zed„ «       Z	d„ Z
d„ Zy	)ÚFFmpegMetadataPPc                 óZ   — t         j                  | |«       || _        || _        || _        y r_   )r[   r`   Ú_add_metadataÚ_add_chaptersÚ_add_infojson)rc   rd   Úadd_metadataÚadd_chaptersÚadd_infojsons        rD   r`   zFFmpegMetadataPP.__init__˜  s*   € Ü×$Ñ$ T¨:Ô6Ø)ˆÔØ)ˆÔØ)ˆÕrF   c              #   ót   K  — | dk(  }t         j                  | «      E d {  –—†  |rdE d {  –—†  y y 7 Œ7 Œ­w)Nr&   )rk  r9   rÀ   r•  )r—  Ú
audio_onlys     rD   r˜  zFFmpegMetadataPP._optionsž  sA   è ø€ à 5Ñ(ˆ
Ü&×7Ñ7¸J¸ÓG×GÐGÙØ1×1Ñ1ð ð 	Høà1ús   ‚8¡4¢8­6®8¶8Fro  c           
      ó”  — | j                  |«       |d   d }}g g }}| j                  rR|j                  d«      rAt        |d«      }|j	                  | j                  |d   |«      «       |j                  |«       | j                  r |j	                  | j                  |«      «       | j                  r{|d   dv rU|j                  d«      }|j	                  | j                  ||«      «       |s@|j                  |j                  d«      «       n| j                  du r| j                  d«       |s| j                  d	«       g |fS t        |d
«      }| j                  d|› d�«       | j                  ||f|t        j                  | j!                  |d   «      g|¢­Ž «        | j"                  |Ž  t%        j&                  ||«       g |fS )Nrõ   ró   Úmetar»   )r(   r'   Úinfojson_filenameTz3The info-json can only be attached to mkv/mka fileszThere isn't any metadata to addrs  zAdding metadata to "r´  )rù   rÉ  rw   r   r¶  Ú_get_chapter_optsrÑ   rÈ  Ú_get_metadata_optsrÊ  Ú_get_infojson_optsr2  r   r
  r  r  r˜  r?  rx   r�   )rc   r÷   rs   Úmetadata_filenamerÄ  ÚoptionsrÒ  rÃ  s           rD   rÔ   zFFmpegMetadataPP.run¥  s¨  € à×Ñ˜TÔ"Ø&*¨:Ñ&6¸Ð#ˆØ#% r˜ˆØ×Ò $§(¡(¨:Ô"6Ü 1°(¸FÓ CÐØ�N‰N˜4×1Ñ1°$°zÑ2BÐDUÓVÔWØ×"Ñ"Ð#4Ô5Ø×ÒØ�N‰N˜4×2Ñ2°4Ó8Ô9à×ÒØ�E‰{˜nÑ,Ø$(§H¡HÐ-@Ó$AÐ!Ø—‘˜t×6Ñ6°tÐ=NÓOÔPÙ(Ø#×*Ñ*¨4¯8©8Ð4GÓ+HÕIØ×#Ñ# tÑ+Ø—‘ÐTÔUáØ�N‰NÐ=Ô>Ø�t�8ˆOä)¨(°FÓ;ˆØ�‰Ð-¨h¨Z°qÐ9Ô:Ø×&Ñ&ØÐ(Ð)¨=Ü�O‰O˜DŸM™M¨$¨u©+Ó6ÐA¸ÒAô	Cð 	&ˆ×%Ñ% Ñ7Ü
�
‰
�= (Ô+Ø�4ˆxˆrF   c              #   ó  K  — t        |dd¬«      5 }d„ }d}| D ]F  }|dz  }|d|d   d	z  z  z  }|d
|d   d	z  z  z  }|j                  d«      }|sŒ8|d ||«      › d�z  }ŒH |j                  |«       d d d «       d–— y # 1 sw Y   ŒxY w­w)Nr7  r8  r9  c                 ó0   — t        j                  dd| «      S )Nz([\\=;#\n])z\\\1)r?   Úsub)rË   s    rD   Úffmpeg_escapez9FFmpegMetadataPP._get_chapter_opts.<locals>.ffmpeg_escapeÊ  s   € Ü—v‘v˜n¨g°tÓ<Ð<rF   z;FFMETADATA1
z[CHAPTER]
TIMEBASE=1/1000
z	START=%d
Ú
start_timeiè  zEND=%d
rô   rœ  r³  rÏ   )z-map_metadataÚ1)r<  rw   Úwrite)ró   rÖ  rD  rÛ  Úmetadata_file_contentÚchapterÚchapter_titles          rD   rÓ  z"FFmpegMetadataPP._get_chapter_optsÇ  sË   è ø€ äÐ# S°7Ô;ð 	+¸qò=ð %5Ð!Ø#ò W�Ø%Ð)GÑGÐ%Ø%¨¸ÀÑ9NÐQUÑ9UÑ)VÑVÐ%Ø%¨°w¸zÑ7JÈTÑ7QÑ)RÑRÐ%Ø '§¡¨GÓ 4�Ú Ø)¨v±mÀMÓ6RÐ5SÐSUÐ-VÑVÑ)ðWð �G‰GÐ)Ô*÷	+ð %Ó$÷	+ð 	+üs"   ‚B‘?B Á"B Á3BÂ B	ÂBc              #   ó>  ‡‡‡K  — dŠt        j                  t        «      Šd7ˆˆˆfd„	} |dd«        |dd«        |dd«        |d	d
«        |dd«        |dd«        |dd«        |dd«        |dd«        |dd«        |dd«        |dd«        |d«        |dd«        |dd«       d | j                  d!g «      v r |d"d«       ‰d#   j	                  d$d «       t        j                  ‰«      › d%�}‰j                  «       D ][  \  }}t        j                  ||«      }|€Œ|sŒ"|j                  d&d'«      ‰|j                  d(«      xs d#   |j                  d)«      <   Œ] d*–— ‰d#   j                  «       D ]  \  }}d+|› d,|› �f–— Œ d-}‰j                  d.«      xs ‰gD ]ð  }	d/|	j                  d0«      |	j                  d1«      fvrd2nd3}
|	j                  d4«      xs d'}t        |«      d5k(  r|j                  «       }n't        j                  |j                  «       «      xs |}t!        |||
z   «      D ]T  }|r‰t#        |«         j%                  d4|«       ‰t#        |«         j                  «       D ]  \  }}d6|› �|› d,|› �f–— Œ ŒV ||
z  }Œò y ­w)8NrÑ  c                 ó6  •— t        ˆfd„‰› d�gt        |xs | «      ¢D «       d «      }|dvrldj                  t        t        t        |«      «      «      }|j                  dd«      }‰d   j                  t        j                  t        | «      |«      «       y y )Nc              3   óJ   •K  — | ]  }‰j                  |«      �‰|   –— Œ y ­wr_   )rw   )rq   Úkeyr÷   s     €rD   rt   zCFFmpegMetadataPP._get_metadata_opts.<locals>.add.<locals>.<genexpr>Ý  s+   øè ø€ ò .Ø!Ø—8‘8˜C“=Ð,ð �S•	ñ.ùs   ƒ #r¢   )rˆ   Nr®  ú rˆ   Úcommon)	r~   r   rB   ÚmapÚstrr�   ÚupdateÚdictÚfromkeys)Ú	meta_listÚ	info_listrî   r÷   Úmeta_prefixÚmetadatas      €€€rD   Úaddz0FFmpegMetadataPP._get_metadata_opts.<locals>.addÜ  s’   ø€ Üó .Ø)4¨°QÐ&7Ð%[¼(À9ÒCYÐPYÓ:ZÐ%[ô.à/3ó5ˆEð ˜JÑ&ØŸ	™	¤#¤c¬8°E«?Ó";Ó<�ØŸ™ d¨BÓ/�Ø˜Ñ"×)Ñ)¬$¯-©-¼ÀÓ8KÈUÓ*SÕTð 'rF   rœ  )Útrackrœ  ÚdateÚupload_date)ÚdescriptionÚsynopsisrõ  )ÚpurlÚcommentÚwebpage_urlrò  Útrack_numberÚartist)rû  ÚartistsÚcreatorÚcreatorsÚuploaderÚuploader_idÚcomposer)r  Ú	composersÚgenre)r  ÚgenresÚ
categoriesÚtagsÚalbum)r  ÚseriesÚalbum_artist)r	  Úalbum_artistsÚdiscÚdisc_numberÚshowr  Úseason_numberÚ
episode_id)Úepisoder  Úepisode_sortÚepisode_numberzembed-metadataÚcompat_optsrø  rç  rö  z(?P<i>\d+)?_(?P<key>.+)ræ  rˆ   rë   rå  )z-write_id3v1rÝ  z	-metadatarÐ   r   Úrequested_formatsÚnoneÚvcodecr€  r   r   Úlanguageé   ú-metadata:s:r_   )ÚcollectionsÚdefaultdictrë  ru   Úpopr?   Úescaperµ  Ú	fullmatchr�   r�   rw   rM   rK   r   r·  Úrangeré  Ú
setdefault)rc   r÷   rñ  Ú
meta_regexrå  rî   r—   r  Ú
stream_idxÚfmtÚstream_countr¾  rë   rï  rð  s    `           @@rD   rÔ  z#FFmpegMetadataPP._get_metadata_optsØ  sË  úè ø€ ØˆÜ×*Ñ*¬4Ó0ˆ÷	Uñ 	ˆGÐ'Ô(ÙˆF�MÔ"ÙÐ'¨Ô7ÙÐ Ô/ÙˆG�^Ô$ÙˆHÐ]Ô^ÙˆJÐ1Ô2ÙˆGÐ>Ô?ÙˆGÐ(Ô)ÙˆNÐ=Ô>ÙˆF�MÔ"ÙˆF�HÔÙˆOÔÙˆLÐ3Ô4ÙˆNÐ,Ô-Ø˜tŸ~™~¨m¸RÓ@Ñ@Ù�	˜=Ô)Ø�XÑ×"Ñ" :¨tÔ4äŸ™ ;Ó/Ð0Ð0GÐHˆ
ØŸ*™*›,ò 	c‰JˆC�Ü—<‘< 
¨CÓ0ˆDØÑ ¢TØKPÏ=É=ÐY]Ð_aÓKb�˜Ÿ™ C›Ò4¨HÑ5°d·j±jÀÓ6GÒHð	cð $Ò#à# HÑ-×3Ñ3Ó5ò 	3‰KˆD�%Ø 4 &¨¨%¨Ð 1Ð2Ó2ð	3ð ˆ
Ø—8‘8Ð/Ó0Ò:°T°Fò 	'ˆCØ &¨s¯w©w°xÓ/@À#Ç'Á'È(ÓBSÐ.TÑ T™1ÐZ[ˆLØ—7‘7˜:Ó&Ò,¨"ˆDô �4‹y˜AŠ~Ø—z‘z“|‘ä"×-Ñ-¨d¯j©j«lÓ;ÒC¸t�Ü˜: z°LÑ'@ÓAò B�ÙØœS ›VÑ$×/Ñ/°
¸DÔAØ#+¬C°«FÑ#3×#9Ñ#9Ó#;ò B‘K�D˜%Ø)¨!¨Ð-°$°°q¸¸Ð/@ÐAÓAñBðBð
 ˜,Ñ&‰Jñ#	'ùs   …D"JÄ(JÄ+E2Jc           	   #   ón  K  — |rt         j                  j                  |«      sÈ| j                  dury |xsJ d| j                  j                  |d«      xs) t        | j                  j                  |«      d|d   «      z  }| j                  j                  |«      sy | j                  d|› �«       t        | j                  j                  || j                  dd«      «      |«       ||d<   | j                  |d	   d
d«      \  }}|�dd|› �f–— |dz  }d| j                  |«      d|› �dd|› �df–— y ­w)NTz%s.tempÚinfojsonz	info.jsonr»   zWriting info-json to: Úclean_infojsonrÒ  rõ   )r  Úmimetypezapplication/jsonr½   z-0:r   z-attachr  zmimetype=application/jsonzfilename=info.json)rx   ry   rz   rÊ  Ú_downloaderÚprepare_filenamer   Ú_ensure_dir_existsrÓ   r   Úsanitize_inforu   rñ   rÒ   )rc   r÷   ÚinfofnÚ
old_streamÚ
new_streams        rD   rÕ  z#FFmpegMetadataPP._get_infojson_opts  sX  è ø€ ÙœRŸW™WŸ^™^¨FÔ3Ø×!Ñ!¨Ñ-ØØò i˜yØ× Ñ ×1Ñ1°$¸
ÓCò hÜ$ T×%5Ñ%5×%FÑ%FÀtÓ%LÈkÐ[_Ð`eÑ[fÓgñ iˆFð ×#Ñ#×6Ñ6°vÔ>ØØ×ÑÐ5°f°XÐ>Ô?Ü˜D×,Ñ,×:Ñ:¸4ÀÇÁÐP`ÐbfÓAgÓhÐjpÔqØ(.ˆDÐ$Ñ%à!%×!7Ñ!7¸¸ZÑ8HÐJ^Ð`rÓ!sÑˆ
�JØÐ!Ø˜S  Ð-Ð.Ò.Ø˜!‰OˆJð �t×5Ñ5°fÓ=Ø˜:˜,Ð'Ð)DØ˜:˜,Ð'Ð)=ð
ó 	
ùs   ‚D3D5N)TTÚ	if_exists)rW   rX   rY   r`   rQ  r˜  r   r‡  rÔ   rÓ  rÔ  rÕ  r2   rF   rD   rÆ  rÆ  –  s]   „ ó*ð ñ2ó ð2ð  €]×Ñ uÔ-ñó .ððB ñ%ó ð%ò C'óJ
rF   rÆ  c                   ó\   — e Zd Zej                  Z ej                  d¬«      d„ «       Zd„ Z	y)ÚFFmpegMergerPPFro  c                 ó*  — |d   }t        |d«      }ddg}d}t        |d   «      D ]¤  \  }}|j                  d«      dk7  r`|j                  d	|› d
�g«       |d   j	                  d«      xr | j                  |d   «      dk(  }|r|j                  d|› �dg«       |dz  }|j                  d«      dk7  sŒ�|j                  d	|› d�g«       Œ¦ | j                  d|› d�«       | j                  |d   ||«       t        j                  ||«       |d   |fS )Nrõ   rs  r¿   rÀ   r   r  r€  r  r½   z:a:0ÚprotocolÚm3u8r%   z-bsf:a:r5   r   r  z:v:0zMerging formats into "r´  Ú__files_to_merge)
r   rï   rw   r¶  rØ   rÞ   r2  r
  rx   Úrename)	rc   r÷   rs   rÃ  r  Úaudio_streamsrë   r#  Ú	aac_fixups	            rD   rÔ   zFFmpegMergerPP.run9  s:  € à˜
Ñ#ˆÜ)¨(°FÓ;ˆØ�fˆ~ˆØˆÜ! $Ð':Ñ";Ó<ò 	2‰HˆQ�Ø�w‰w�xÓ  FÒ*Ø—‘˜V¨ s¨$ ZÐ0Ô1Ø 
™O×6Ñ6°vÓ>ÒqÀ4×CWÑCWÐX[Ð\fÑXgÓChÐlqÑCq�	ÙØ—K‘K 7¨=¨/Ð!:¸OÐ LÔMØ Ñ"�Ø�w‰w�xÓ  FÓ*Ø—‘˜V¨ s¨$ ZÐ0Õ1ð	2ð 	�‰Ð/°¨z¸Ð;Ô<Ø×&Ñ& tÐ,>Ñ'?ÀÐPTÔUÜ
�	‰	�- Ô*ØÐ&Ñ'¨Ð-Ð-rF   c                  ó   — y)NTr2   rŸ   s    rD   Ú	can_mergezFFmpegMergerPP.can_mergeM  s   € àrF   N)
rW   rX   rY   r   r¡  r…  r   r‡  rÔ   r;  r2   rF   rD   r2  r2  6  s1   „ Ø%×2Ñ2€Nà€]×Ñ uÔ-ñ.ó .ð.ó&rF   r2  c                   ó   — e Zd Zd„ Zy)ÚFFmpegFixupPostProcessorc                 óœ   — t        |d«      }| j                  |› d|› d�«       | j                  |||«       t        j                  ||«       y )Nrs  z of "r´  )r   r2  r&  rx   r�   )rc   rü   rs   r×  rÃ  s        rD   Ú_fixupzFFmpegFixupPostProcessor._fixupS  sE   € Ü)¨(°FÓ;ˆà�‰˜#˜˜e H :¨QÐ/Ô0Ø�‰˜ -°Ô9ä
�
‰
�= (Õ+rF   N)rW   rX   rY   r?  r2   rF   rD   r=  r=  R  s   „ ó,rF   r=  c                   ó@   — e Zd Z ej                  dd¬«      d„ «       Zy)ÚFFmpegFixupStretchedPPF)rp  Úaudioc                 óŒ   — |j                  d«      }|dvr,| j                  d|d   g | j                  «       ¢d‘|d›‘«       g |fS )NÚstretched_ratior¦   zFixing aspect ratiorõ   z-aspectrD  ©rw   r?  rÄ   )rc   r÷   rD  s      rD   rÔ   zFFmpegFixupStretchedPP.run]  sl   € àŸ(™(Ð#4Ó5ˆØ )Ñ+Ø�K‰KÐ-¨t°JÑ/?ð BMØ×&Ñ&Ó(ðBMØ*3ðBMØ8GÈÐ7JðBMô Nà�4ˆxˆrF   N©rW   rX   rY   r   r‡  rÔ   r2   rF   rD   rA  rA  \  s#   „ Ø€]×Ñ u°EÔ:ñó ;ñrF   rA  c                   ó@   — e Zd Z ej                  dd¬«      d„ «       Zy)ÚFFmpegFixupM4aPPF)rp  Úvideoc                 ó†   — |j                  d«      dk(  r*| j                  d|d   g | j                  «       ¢d‘d‘«       g |fS )NÚ	containerÚm4a_dashzCorrecting containerrõ   r3   rÁ   rE  ©rc   r÷   s     rD   rÔ   zFFmpegFixupM4aPP.rung  sM   € à�8‰8�KÓ  JÒ.Ø�K‰KÐ.°°ZÑ0@ÐBiÀD×DYÑDYÓD[ÐBiÐ]aÐBiÐchÐBiÔjØ�4ˆxˆrF   NrF  r2   rF   rD   rH  rH  f  s#   „ Ø€]×Ñ u°EÔ:ñó ;ñrF   rH  c                   óD   — e Zd Zd„ Z ej
                  d¬«      d„ «       Zy)ÚFFmpegFixupM3u8PPc              #   ó
  K  — |d   dv –— |d   j                  d«      –— 	 | j                  |d   «      }t        |dd¬«      d	k(  –— y # t        $ r,}| j	                  d
|j
                  › �«       d–— Y d }~y d }~ww xY w­w)Nr»   )rÁ   r&   r4  r5  rõ   )rA   Úformat_nameFré   r!   zUnable to extract metadata: T)rØ   rå   r   r
   r{   rü   )rc   r÷   rð  rþ   s       rD   Ú_needs_fixupzFFmpegFixupM3u8PP._needs_fixupo  sŽ   è ø€ Ø�5‰k˜^Ð+Ò+Ø�:Ñ×)Ñ)¨&Ó1Ò1ð	aØ×/Ñ/°°ZÑ0@ÓAˆHô
 ˜xÐ)BÈeÔTÐX`Ñ`Ó`øô	 #ò 	Ø×ÑÐ">¸q¿u¹u¸gÐ FÔGØ�Jûð	üs-   ‚ B£A ·BÁ	B Á"A;Á6BÁ;B Â BFro  c                 óê   — t        | j                  |«      «      rVddg}| j                  |d   «      dk(  r|j                  ddg«       | j	                  d|d   g | j                  «       ¢|¢«       g |fS )Nr3   rÁ   rõ   r%   r4   r5   zFixing MPEG-TS in MP4 container)ÚallrR  rÞ   r¶  r?  rÄ   )rc   r÷   r  s      rD   rÔ   zFFmpegFixupM3u8PP.runz  s‡   € äˆt× Ñ  Ó&Ô'Ø˜%�=ˆDØ×#Ñ# D¨Ñ$4Ó5¸Ò>Ø—‘˜X Ð7Ô8Ø�K‰KÐ9¸4À
Ñ;Kð N1Ø×&Ñ&Ó(ðN1Ø+/ðN1ô 2à�4ˆxˆrF   N)rW   rX   rY   rR  r   r‡  rÔ   r2   rF   rD   rO  rO  n  s)   „ ò	að  €]×Ñ uÔ-ñó .ñrF   rO  c                   óR   ‡ — e Zd Zdˆ fd„	Z ej
                  d¬«      d„ «       Zˆ xZS )ÚFFmpegFixupTimestampPPc                 ót   •— t         ‰| �  |«       t        |t        t        f«      sJ ‚t        |«      | _        y r_   )rŽ  r`   Ú
isinstancere  Úfloatré  Útrim)rc   rd   rZ  r�  s      €rD   r`   zFFmpegFixupTimestampPP.__init__‡  s/   ø€ ä‰Ñ˜Ô$Ü˜$¤¤e Ô-Ð-Ð-Ü˜“Iˆ�	rF   Fro  c                 óâ   — | j                   j                  d«      s| j                  d«       ddg}ng d¢}| j                  d|d   g |¢| j	                  d«      ¢d	‘| j
                  ‘«       g |fS )
Nr‰   z„A re-encode is needed to fix timestamps in older versions of ffmpeg. Please install ffmpeg 4.4 or later to fixup without re-encodingz-vfzsetpts=PTS-STARTPTS)r¿   rÀ   z-bsfzsetts=ts=TS-STARTPTSzFixing frame timestamprõ   Fú-ss)rg   rw   r{   r?  rÄ   rZ  )rc   r÷   rä   s      rD   rÔ   zFFmpegFixupTimestampPP.run�  sƒ   € à�~‰~×!Ñ! 'Ô*Ø×ÑðRôSð Ð0Ð1‰DâAˆDØ�‰Ð,¨d°:Ñ.>Ð@xÀ$Ð@xÈ×I^ÑI^Ð_dÓIeÐ@xÐglÐ@xÐnr×nwÑnwÐ@xÔyØ�4ˆxˆrF   )Ngü©ñÒMbP?)rW   rX   rY   r`   r   r‡  rÔ   r¢  r£  s   @rD   rV  rV  …  s)   ø„ õð  €]×Ñ uÔ-ñ	ó .ô	rF   rV  c                   óB   — e Zd ZdZ ej
                  d¬«      d„ «       Zy)ÚFFmpegCopyStreamPPzCopying streamFro  c                 óf   — | j                  | j                  |d   | j                  «       «       g |fS )Nrõ   )r?  ÚMESSAGErÄ   rM  s     rD   rÔ   zFFmpegCopyStreamPP.run�  s-   € à�‰�D—L‘L $ zÑ"2°D×4IÑ4IÓ4KÔLØ�4ˆxˆrF   N)rW   rX   rY   r`  r   r‡  rÔ   r2   rF   rD   r^  r^  š  s&   „ Ø€Gà€]×Ñ uÔ-ñó .ñrF   r^  c                   ó   — e Zd ZdZy)ÚFFmpegFixupDurationPPzFixing video durationN©rW   rX   rY   r`  r2   rF   rD   rb  rb  £  s   „ Ø%�GrF   rb  c                   ó   — e Zd ZdZy)ÚFFmpegFixupDuplicateMoovPPzFixing duplicate MOOV atomsNrc  r2   rF   rD   re  re  §  s   „ Ø+�GrF   re  c                   ó>   ‡ — e Zd Zej                  Zdˆ fd„	Zd„ Zˆ xZS )ÚFFmpegSubtitlesConvertorPPc                 ó2   •— t         ‰| �  |«       || _        y r_   )rŽ  r`   rA   ©rc   rd   rA   r�  s      €rD   r`   z#FFmpegSubtitlesConvertorPP.__init__®  s   ø€ Ü‰Ñ˜Ô$Øˆ�rF   c                 óT  — |j                  d«      }| j                  }|}|dk(  rd}|€| j                  d«       g |fS | j                  d«       g }|j                  «       D �]�  \  }}t        j
                  j                  |j                  dd«      «      s| j                  d|› d	�«       ŒL|d
   }||k(  r| j                  d|› d�«       Œl|dk(  r| j                  d«       Œƒ|d   }	|j                  |	«       t        |	|«      }
|dv r˜| j                  d«       |	}t        |	d«      }t        |d«      5 }t        |j                  «       «      }d d d «       t        |dd¬«      5 }|j                  «       d d d «       |}	d|dœ||<   |dk(  r�Œ0|j                  |«       | j                  |	|
d|g«       t        |
d¬«      5 }||j                  «       |
dœ||<   d d d «       t        |d   |d      |«      |d   |
<   �Œ  ||fS # 1 sw Y   Œ¸xY w# 1 sw Y   ŒœxY w# 1 sw Y   ŒCxY w)Nr¯  r/   r$   z%There aren't any subtitles to convertzConverting subtitlesrõ   rˆ   r°  r±  r»   zSubtitle file for z# is already in the requested formatrá   zaYou have requested to convert json subtitles into another format, which is currently not possible)ÚdfxpÚttmlÚttzpYou have requested to convert dfxp (TTML) subtitles into another format, which results in style information lossÚsrtÚrbr7  r8  r9  )r»   Údatarõ   r3   Ú__files_to_move)rw   rA   r2  rµ  rx   ry   rz   r{   rÑ   r   r<  r   ÚreadrÞ  r&  )rc   r÷   ÚsubsÚnew_extÚ
new_formatr»  r¾  rÚ  r»   Úold_fileÚnew_fileÚ	dfxp_fileÚsrt_filerD  Úsrt_datas                  rD   rÔ   zFFmpegSubtitlesConvertorPP.run²  sh  € Ø�x‰xÐ-Ó.ˆØ—+‘+ˆØˆ
Ø˜ÒØ!ˆJØˆ<Ø�N‰NÐCÔDØ�t�8ˆOØ�‰Ð-Ô.ØˆØŸ™›ó 5	C‰IˆD�#Ü—7‘7—>‘> #§'¡'¨*°bÓ"9Ô:Ø×#Ñ#Ð&9¸$¸Ð?dÐ$eÔfØØ�e‘*ˆCØ�gŠ~Ø—‘Ð!3°G°9Ð<_Ð`ÔaØØ˜’Ø—‘ð6ô7ð Ø˜:‘ˆHØ× Ñ  Ô*Ü(¨°7Ó;ˆHàÐ,Ñ,Ø×#Ñ#ð>ô?ð %�	Ü,¨X°uÓ=�ä˜) TÓ*ð 2¨aÜ'¨¯©«Ó1�H÷2ô ˜( C°'Ô:ð &¸aØ—G‘G˜HÔ%÷&à#�ð !Ø$Ø (ñ��T‘
ð ˜eÒ#Ùà!×(Ñ(¨Ô2à�O‰O˜H h°°zÐ0BÔCä�h¨Ô1ð °Qà"ØŸF™F›HØ (ñ��T‘
÷ô 1BØÐ&Ñ'¨¨J©Ñ8¸'ó1CˆDÐ"Ñ# HÓ-ði5	Cðn ˜dÐ"Ð"÷=2ð 2ú÷&ð &ú÷"ð ús$   Ä5HÅ%HÇHÈH	ÈH	ÈH'	rŸ  )	rW   rX   rY   r   r¸  r…  r`   rÔ   r¢  r£  s   @rD   rg  rg  «  s   ø„ Ø%×/Ñ/€NõöB#rF   rg  c                   óR   — e Zd Zdd„Zd„ Zd„ Z ej                  d¬«      d„ «       Zy)	ÚFFmpegSplitChaptersPPFc                 ó>   — t         j                  | |«       || _        y r_   )r[   r`   Ú_force_keyframes)rc   rd   r5  s      rD   r`   zFFmpegSplitChaptersPP.__init__ø  s   € Ü×$Ñ$ T¨:Ô6Ø /ˆÕrF   c                 óà   — |j                  «       }|j                  ||j                  d«      |j                  d«      |j                  d«      dœ«       | j                  j	                  |d«      S )Nrœ  rÜ  rô   )Úsection_numberÚsection_titleÚsection_startÚsection_endrà  )rÀ   rê  rw   r)  r*  )rc   r  rà  r÷   s       rD   Ú_prepare_filenamez'FFmpegSplitChaptersPP._prepare_filenameü  s`   € Ø�y‰y‹{ˆØ�‰Ø$Ø$Ÿ[™[¨Ó1Ø$Ÿ[™[¨Ó6Ø"Ÿ;™; zÓ2ñ	
ô 	ð ×Ñ×0Ñ0°°yÓAÐArF   c           	      óâ   — | j                  |||«      }| j                  j                  |«      sy ||d<   | j                  d||fz  «       |dt	        |d   «      dt	        |d   |d   z
  «      gfS )Nrõ   zChapter %03d; Destination: %sr\  rÜ  z-trô   )r„  r)  r+  r2  ré  )rc   r  rà  r÷   Údestinations        rD   Ú_ffmpeg_args_for_chapterz.FFmpegSplitChaptersPP._ffmpeg_args_for_chapter  s‹   € Ø×,Ñ,¨V°W¸dÓCˆØ×Ñ×2Ñ2°;Ô?Øà)ˆ�
ÑØ�‰Ð6¸&À+Ð9NÑNÔOàØ”C˜ Ñ-Ó.Ø”3�w˜zÑ*¨W°\Ñ-BÑBÓCðEðFð 	FrF   ro  c                 ó
  — | j                  |«       |j                  d«      xs g }|s| j                  d«       g |fS |d   }| j                  r't	        |«      dkD  r| j                  |d„ |D «       «      }| j                  dt	        |«      › d�«       t        |«      D ]D  \  }}| j                  |dz   ||«      \  }}| j                  ||fg|| j                  «       fg«       ŒF ||d   k7  r| j                  |d ¬«       g |fS )	Nró   z"Chapter information is unavailablerõ   r   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)rÜ  Nr2   )rq   Úcs     rD   rt   z,FFmpegSplitChaptersPP.run.<locals>.<genexpr>  s   è ø€ Ò4WÈ°Q°|µ_Ñ4Wùs   ‚zSplitting video by chapters; z chapters found)rü   )rù   rw   r2  r~  rM   r5  rï   r‡  r  rÄ   r?  )rc   r÷   ró   Úin_fileÚidxrà  r†  rä   s           rD   rÔ   zFFmpegSplitChaptersPP.run  s  € à×Ñ˜TÔ"Ø—8‘8˜JÓ'Ò-¨2ˆÙØ�N‰NÐ?Ô@Ø�t�8ˆOà�zÑ"ˆØ× Ò ¤S¨£]°QÒ%6Ø×*Ñ*¨7Ñ4WÈhÔ4WÓXˆGØ�‰Ð6´s¸8³}°oÀ_ÐUÔVÜ% hÓ/ò 	^‰LˆC�Ø $× =Ñ =¸cÀA¹gÀwÐPTÓ UÑˆK˜Ø× Ñ  7¨D /Ð!2°kÀ4×CXÑCXÓCZÐ5[Ð4\Õ]ð	^ð �d˜:Ñ&Ò&Ø×)Ñ)¨'°tÐ)Ô<Ø�4ˆxˆrF   N©F)	rW   rX   rY   r`   r„  r‡  r   r‡  rÔ   r2   rF   rD   r|  r|  ÷  s4   „ ó0òBò
Fð  €]×Ñ uÔ-ñó .ñrF   r|  c                   ó|   ‡ — e Zd Zej                  Z ee«      Zdˆ fd„	Ze	d„ «       Z
dd„Zed„ «       Zd„ Zd„ Zˆ xZS )	ÚFFmpegThumbnailsConvertorPPc                 ó2   •— t         ‰| �  |«       || _        y r_   r�  ri  s      €rD   r`   z$FFmpegThumbnailsConvertorPP.__init__*  s   ø€ Ü‰Ñ˜Ô$Øˆ�rF   c                 ó|   — t        | j                  › d| j                  › d�«       t        j                  |«      dk(  S )Nú.z.is_webp is deprecatedÚwebp)r   rX   rW   r   Úwhat)rM  ry   s     rD   Úis_webpz#FFmpegThumbnailsConvertorPP.is_webp.  s5   € ä˜sŸ~™~Ð.¨a°·±¨~Ð=SÐTÔUÜ�{‰{˜4Ó  FÑ*Ð*rF   c                 óŠ  — |d   |   d   }t         j                  j                  |«      \  }}|r”|j                  «       dk7  r€t	        j
                  |«      dk(  rg| j                  d|› d�«       t        |d«      }t        j                  ||«       ||d   |   d<   t        |d   j                  |«      d«      |d   |<   y y y y )NÚ
thumbnailsrõ   z.webpr“  zCorrecting thumbnail "z" extension to webprq  )
rx   ry   ÚsplitextrK   r   r”  r2  r   r�   r  )rc   r÷   rŒ  Úthumbnail_filenamer¢   Úthumbnail_extÚwebp_filenames          rD   Ú
fixup_webpz&FFmpegThumbnailsConvertorPP.fixup_webp3  sÛ   € Ø! ,Ñ/°Ñ4°ZÑ@ÐÜŸ7™7×+Ñ+Ð,>Ó?Ñˆˆ=ÙØ×"Ñ"Ó$¨Ò/´F·K±KÐ@RÓ4SÐW]Ò4]Ø—‘Ð!7Ð8JÐ7KÐK^Ð_Ô`Ü 1Ð2DÀfÓ M�Ü—
‘
Ð-¨}Ô=Ø6C��\Ñ" 3Ñ'¨
Ñ3Ü9JØÐ*Ñ+×/Ñ/Ð0BÓCÀVó:M�Ð&Ñ'¨Ò6ð 5^Ð/ð rF   c              #   óH   K  — dE d {  –—†  | dk(  rdE d {  –—†  y y 7 Œ7 Œ­w)N)z-updaterÝ  Újpg)z-bsf:vÚ
mjpeg2jpegr2   r–  s    rD   r˜  z$FFmpegThumbnailsConvertorPP._options?  s.   è ø€ à#×#Ð#Ø˜ÒØ/×/Ñ/ð ð 	$øà/ús   ‚"ˆ‰"— ˜" "c                 óð   — t        ||«      }| j                  d|› d|› �«       t        j                  j	                  |«      \  }}| j                  ||dk(  rg ng d¢fg|| j                  |«      fg«       |S )NzConverting thumbnail "z" to z.gif)r3   Úimage2z-pattern_typer  )r   r2  rx   ry   r˜  r  r˜  )rc   r™  r—  Úthumbnail_conv_filenamer¢   r�  s         rD   Úconvert_thumbnailz-FFmpegThumbnailsConvertorPP.convert_thumbnailE  s…   € Ü"3Ð4FÈ
Ó"SÐà�‰Ð/Ð0BÐ/CÀ5ÈÈÐUÔVÜŸ™×(Ñ(Ð);Ó<‰ˆˆ:Ø×ÑØ ¨
°fÒ(<¡"ÒBkÐlÐmØ% t§}¡}°ZÓ'@ÐAÐBô	Dð 'Ð&rF   c                 ó:  — g }d}t        |j                  d«      xs g «      D ]à  \  }}|j                  d«      }|sŒd}| j                  ||«       |d   }t        j                  j                  |«      d   dd  j                  «       }|dk(  rd}t        || j                  «      \  }}	|	r| j                  d|› d	|	› �«       Œ | j                  ||«      |d<   |j                  |«       t        |d
   |   |«      |d
   |d   <   Œâ |s| j                  d«       ||fS )NFr—  rõ   Tr   Újpegrž  zNot converting thumbnail "rš  rq  z&There aren't any thumbnails to convert)rï   rw   rœ  rx   ry   r˜  rK   rT   rP   r2  r£  rÑ   r   )
rc   r÷   rÄ  Úhas_thumbnailrŒ  Úthumbnail_dictÚoriginal_thumbnailrš  r—  r}  s
             rD   rÔ   zFFmpegThumbnailsConvertorPP.runO  sL  € ØˆØˆä#,¨T¯X©X°lÓ-CÒ-IÀrÓ#Jò 	IÑˆC�Ø!/×!3Ñ!3°JÓ!?ÐÙ%ØØ ˆMØ�O‰O˜D #Ô&Ø!/°
Ñ!;ÐÜŸG™G×,Ñ,Ð-?Ó@ÀÑCÀAÀBÐG×MÑMÓOˆMØ Ò&Ø %�Ü$3°MÀ4Ç<Á<Ó$PÑ!ˆJ˜	ÙØ—‘Ð!;Ð<NÐ;OÈsÐS\ÐR]Ð^Ô_ØØ)-×)?Ñ)?Ð@RÐT^Ó)_ˆN˜:Ñ&Ø×"Ñ"Ð#5Ô6ÜBSØÐ&Ñ'Ð(:Ñ;¸ZóCIˆDÐ"Ñ# N°:Ñ$>Ò?ð!	Iñ& Ø�N‰NÐDÔEØ Ð$Ð$rF   rŸ  )rJ   )rW   rX   rY   r   r—  r…  rE   r†  r`   rU  r•  rœ  rQ  r˜  r£  rÔ   r¢  r£  s   @rD   r�  r�  &  sU   ø„ Ø%×0Ñ0€NÙ! .Ó1€Iõð ñ+ó ð+ó
Mð ñ0ó ð0ò
'ö%rF   r�  c                   ód   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ fd„Z ej                  dd¬«      d„ «       Zˆ xZ	S )ÚFFmpegConcatPPFc                 ó2   •— || _         t        ‰| �	  |«       y r_   )Ú_only_multi_videorŽ  r`   )rc   rd   Úonly_multi_videor�  s      €rD   r`   zFFmpegConcatPP.__init__l  s   ø€ Ø!1ˆÔÜ‰Ñ˜Õ$rF   c                 ó”   — t        | j                  |«      d«      }| j                  ddj                  |«      › �«       t	        |«      S )N)rç   .Ú
codec_namez	Codecs = r®  )r   rå   rÓ   rB   r„  )rc   r  Úcodecss      rD   Ú_get_codecszFFmpegConcatPP._get_codecsp  sC   € Ü˜d×6Ñ6°tÓ<Ð>\Ó]ˆØ×Ñ˜9 T§Y¡Y¨vÓ%6Ð$7Ð8Ô9Ü�V‹}ÐrF   c                 ó  •— | j                   j                  |«      sy t        |«      dk(  rxt        j                  j                  |d   «      t        j                  j                  |«      k7  r| j                  d|d   › d|› d�«       t        j                  |d   |«       g S t        t        t        | j                  |«      «      «      dkD  rt        d«      ‚| j                  dt        |«      › d|› �«       t        ‰| �5  ||«       |S )	Nr   r   zMoving "z" to "r´  z�The files have different streams/codecs and cannot be concatenated. Either select different formats or --recode-video them to a common formatzConcatenating z files; Destination: )r)  r+  rM   rx   ry   Úrealpathr2  r�   Úsetrè  r±  r
   rŽ  rF  )rc   r@  rA  r�  s      €rD   rF  zFFmpegConcatPP.concat_filesu  sî   ø€ Ø×Ñ×2Ñ2°8Ô<ØÜˆx‹=˜AÒÜ�w‰w×Ñ ¨¡Ó,´·±×0@Ñ0@ÀÓ0JÒJØ—‘ ¨(°1©+¨°f¸X¸JÀaÐHÔIÜ�J‰J�x ‘{ HÔ-ØˆIäŒs”3�t×'Ñ'¨Ó2Ó3Ó4°qÒ8Ü%ð\ó]ð ]ð 	�‰˜¬¨H« Ð6KÈHÈ:ÐVÔWÜ‰Ñ˜X xÔ0ØˆrF   )rp  Ú	simulatedc                 ó<  — |j                  d«      xs g }t        |«      r| j                  r|d   dk7  rg |fS t        |dd„ f«      rt	        d«      ‚t        |d«      xs g }t        |«      t        |«      k  rt	        d«      ‚t        |d	d
«      }t        j                  dt        t        |«      «      dk(  r|d   ndi|| j                  j                  |«      «      }| j                  j                  |d«      }| j                  ||«      }||d   dœg|d<   ||fS )NÚentriesÚ_typeÚmulti_video.c                 ó,   — | dk(  xr t        |«      dkD  S )NÚrequested_downloadsr   )rM   )ra  Úvs     rD   r¨   z$FFmpegConcatPP.run.<locals>.<lambda>Œ  s   € °aÐ;PÑ6PÒ6_ÔUXÐYZÓU[Ð^_ÑU_€ rF   zIConcatenation is not supported when downloading multiple separate formats).r»  r   rõ   z4Aborting concatenation because some downloads failed).r»  r   r»   ).r»   r»   r   r   r(   Úpl_video)rõ   r»   r»  )rw   Úanyr¬  r   r
   rM   r  ÚChainMapr´  r)  Ú_playlist_infodictr*  rF  )rc   r÷   r·  r@  ÚextsÚie_copyrA  rÄ  s           rD   rÔ   zFFmpegConcatPP.run‡  s,  € à—(‘(˜9Ó%Ò+¨ˆÜ�7Œ| × 6Ò 6¸4À¹=ÈMÒ;YØ�t�8ˆOÜ˜' CÑ)_Ð#`ÔaÜ%Ð&qÓrÐrä Ð)TÓUÒ[ÐY[ˆÜˆx‹=œ3˜w›<Ò'Ü%Ð&\Ó]Ð]ä˜GÐ%KÈ\ÓZˆÜ×&Ñ&¨¼#¼cÀ$»i».ÈAÒ:M¨t°AªwÐSXÐ'YØ'+¨T×-=Ñ-=×-PÑ-PÐQUÓ-VóXˆà×#Ñ#×4Ñ4°W¸jÓIˆà×+Ñ+¨H°hÓ?ˆð !Ø˜5‘>ñ(
ð 'ˆÐ"Ñ#ð  Ð$Ð$rF   r�  )
rW   rX   rY   r`   r±  rF  r   r‡  rÔ   r¢  r£  s   @rD   rª  rª  k  s5   ø„ õ%òô
ð$  €]×Ñ u¸Ô>ñ%ó ?ô%rF   rª  ):r  rO  rS  r  rá   rx   r?   rÕ   ry  rç  r   Úcompatr   Úutilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ÚEXT_TO_OUT_FORMATSrw  rE   rT   rV   r[   rW  r‰  r¥  r©  rÆ  r2  r=  rA  rH  rO  rV  r^  rb  re  rg  r|  r�  rª  r2   rF   rD   ú<module>rÆ     sµ  ðÛ Û Û Û Û Û 	Û 	Û Û å !Ý ÷÷ ÷ ÷ ÷ ó ð0 ØØØØØØØ
ØØØØñÐ ð  %Ø)Ø6Ø#Ø&Ø Ø.Ø'ñ
€òkò:ô	Ð2ô 	ôW=˜-ô W=ôt
g(Ð.ô g(ôT  Ð0ô   ôF6Ð1ô 6ôN%Ð/ô N%ôb]
Ð*ô ]
ô@Ð(ô ô8,Ð2ô ,ôÐ5ô ôÐ/ô ôÐ0ô ô.Ð5ô ô*Ð1ô ô&Ð.ô &ô,Ð!3ô ,ôI#Ð!4ô I#ôX,Ð/ô ,ô^B%Ð"5ô B%ôJ3%Ð(õ 3%rF   