
    VGh$)                         d dl Z d dlZd dlZd dlZddlmZ ddlmZmZ 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 erd d	lmZmZ d d
lmZmZ d dlmZ d dlmZ  G d de      Z G d de      Zy)    N   )PostProcessor)FFmpegPostProcessorFFmpegThumbnailsConvertorPP   )imghdr)mutagen)PopenPostProcessingErrorcheck_executableencodeArgumentprepend_extensionshell_quote)FLACPicture)MP4MP4Cover)OggOpus)	OggVorbisc                       e Zd Zy)EmbedThumbnailPPErrorN)__name__
__module____qualname__     l/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/postprocessor/embedthumbnail.pyr   r      s    r   r   c                   R    e Zd ZddZd Zd Z ej                  d      d        Zy)	EmbedThumbnailPPNFc                 >    t        j                  | |       || _        y )N)r   __init___already_have_thumbnail)self
downloaderalready_have_thumbnails      r   r!   zEmbedThumbnailPP.__init__    s    $$T:6'=$r   c                 J   fd}	 d}| j                  |d dgd      }t        j                  ||      }| |       S 	 t        |j                  d            t        |j                  d            fS # t        $ r%}| j	                  d|         |       cY d }~S d }~ww xY w)	Nc                  \    j                  d      j                  d      }} | r|r| |fS y y )Nwidthheightget)r(   r)   thumbnail_dicts     r   guessz9EmbedThumbnailPP._get_thumbnail_resolution.<locals>.guess%   s8    *..w79K9KH9U6Ef}$  ur   z!,\s*(?P<w>\d+)x(?P<h>\d+)\s*[,\[]z-hide_banner)r   )expected_retcodesz)unable to find the thumbnail resolution; wh)
run_ffmpegresearchr   report_warningintgroup)r#   filenamer,   r-   
size_regexsize_resultmobjerrs     `     r   _get_thumbnail_resolutionz*EmbedThumbnailPP._get_thumbnail_resolution$   s    	%
	=J//(D>:J^b/cK99Z5D|w 
 4::c?#SC%999 # 	"KC5 QR7N	s   6A4 4	B"=BB"B"c                 2    | j                  | d| d       y )Nz: Adding thumbnail to "")	to_screen)r#   exer7   s      r   _report_runzEmbedThumbnailPP._report_run5   s    #5hZqABr   )imagesc           	         |d   }t        |d      }|j                  d      s| j                  d       g |fS t        d t	        |d   d d d   d      D        d       }|| j                  d       g |fS |d   |   d   }t
        j                  j                  |      s| j                  d	       g |fS t        | j                        }|j                  ||       |d   |   d   x}}t
        j                  j                  |      d   dd  }|d
   dvr|dvr|j                  |d      }d}t        j                  |      j                  }	d}
|d
   dk(  r-g d}| j!                  d|       | j#                  ||g||       n|d
   dv rt%        | j'                               }d|j)                  dd       }| j+                  |d|      \  }}||j-                  dd| g       |dz  }|j-                  d| j/                  |      d| d| d| d| g       | j!                  d|       | j1                  |||       n|d
   dv rd| j3                  dg       v }t4        r|rd}
n| j!                  d |       t6        j8                  t6        j:                  d!}	 t=        |d"      5 }|j?                         }d d d        tA        jB                  #      }|stE        d$      ||vrtE        d%|       tG        |      }t7        |||   &      g|jH                  d'<   |jK                          |}|
s)d}
t        d) d*D        d       }|| j                  d+       d}
n|s| j                  d,       ||tO        d-      |tO        d.      |g}|| jQ                  d/      D cg c]  }tO        |       c}z  }| j!                  d0|       | jS                  d1tU        |              tW        jX                  |dtZ        j\                  tZ        j\                  2      \  }}}|r%| j                  d3|j_                                 d}
nd4|v r| j                  d5       d}
|
sd}
	 g | j'                         dd6}| j+                  |d7d      \  }}||j-                  dd| g       |dz  }|j-                  d8| d9g       | j!                  d|       | j#                  ||g||       n6|d
   d;v r#t4        stc        d<      | j!                  d |       te        tf        th        d=|d
      |      }tk               }dtA        jB                  |       |_6        t=        |d"      5 }|j?                         |_7        d d d        d>|_8        | js                  ||d   |         }||\  |_:        |_;        |d
   d?k(  r|jy                  |       n5t{        j|                  |j                               j                  d@      |dA<   |jK                          |}ntc        dB      |
r||k7  rt        j(                  ||       | j                  ||	|	       ||k7  }| j                  |s| j                  s|nd |r| j                  s|nd |C       g |fS # 1 sw Y   xY w# tL        $ r!}| j                  d(|        d}
Y d }~d }~ww xY wc c}w # t`        $ r}d}
tc        d:|       d }~ww xY w# 1 sw Y   txY w)DNfilepathtemp
thumbnailsz$There aren't any thumbnails to embedc              3   L   K   | ]  \  }}|j                  d       s|   yw)rD   Nr*   ).0its      r   	<genexpr>z'EmbedThumbnailPP.run.<locals>.<genexpr>A   s"     _41aQUUS]M^QB_s   $$r   zThere are no thumbnails on diskz=Skipping embedding the thumbnail because the file is missing.ext)mkvmka)jpgjpegpngrR   Tmp3)z-ccopy-mapz0:0rU   z1:0z-write_id3v11z-id3v2_version3-metadata:s:vztitle="Album cover"rX   zcomment=Cover (front)ffmpegzimage/rP   rQ   )tagsmimetyperU   z-0:z-attachz-metadata:s:z	mimetype=zfilename=cover.)m4amp4m4vmovzembed-thumbnail-atomicparsleycompat_optsFr	   )rQ   rR   rb)r0   zcould not determine image typezincompatible image type: )dataimageformatcovrzunable to embed using mutagen; c              3   :   K   | ]  }t        |d g      r|  yw)z-vN)r   )rH   xs     r   rK   z'EmbedThumbnailPP.run.<locals>.<genexpr>   s$      &4'D62 &4s   )AtomicParsleyatomicparsleyzlibatomicparsley.sozCNeither mutagen nor AtomicParsley was found. Falling back to ffmpegz4mutagen was not found. Falling back to AtomicParsleyz	--artworkz-org   rh   zAtomicParsley command line: )textstdoutstderrz0Unable to embed thumbnails using AtomicParsley; z
No changesz5The file format doesn't support embedding a thumbnailrV   )dispositionattached_picz-disposition:rm   z(Unable to embed using ffprobe & ffmpeg; )oggopusflaczSmodule mutagen was not found. Please install using `python3 -m pip install mutagen`)ro   rp   rn      rp   asciiMETADATA_BLOCK_PICTUREz]Supported filetypes for thumbnail embedding are: mp3, mkv/mka, ogg/opus/flac, m4a/mp4/m4v/mov)info)Dr   r+   r?   next	enumerateospathexistsr4   r   _downloader
fixup_webpsplitextconvert_thumbnailstatst_mtimerA   run_ffmpeg_multiple_filesliststream_copy_optsreplaceget_stream_numberextend_ffmpeg_filename_argumentr1   	get_paramr	   r   FORMAT_JPEG
FORMAT_PNGopenreadr   what
ValueErrorr   rZ   save	Exceptionr   _configuration_argswrite_debugr   r
   run
subprocessPIPEstripr   r   r   r   r   r   mimerb   typer<   r(   r)   add_picturebase64	b64encodewritedecode	try_utime_delete_downloaded_filesr"   )r#   rt   r7   temp_filenameidxthumbnail_filename	convertororiginal_thumbnailthumbnail_extmtimesuccessoptionsr[   
old_stream
new_streamprefer_atomicparsleyf	thumbfile
thumb_datatype_metar;   rh   cmdorj   rk   
returncodepicres	converteds                                  r   r   zEmbedThumbnailPP.run8   s   
#)(F;xx%NNBCt8O_9T,-?"-Eq#I_aef;NN<=t8O!,/4Z@ww~~01 _`t8O 00@0@A	T3'26|2DS2I*2UU/ (();<Q?C;n,F\1\!*!<!<=OQV!W!M!**;%bG Xx0**H6H+I=Zab%[N*40023G 5 5eV DEFH%)%;%;.&:"J
%#j\(:;<a
NN499:LMzl+y
-Czl+}o-NP Q
 Xx0OOHmW=%[88#BdnnUbdfFg#g 2  H5%11(:M:MN$0$7 69%.^^%5
6 #KK*5E ()IJJa(+DUG)LMMx=D *2zqQVx)X(YDIIf%IIK$,M  $ &4X&4 6:!; !(NN#hi#G/']^(#)+6-)$/(*C t7O7OP_7`a!N1-aaC$$_h?$$'CKPSDTCU%VW163TR\RaRajtjyjy1z.FFJ!++.^_e_k_k_m^n,op"' &/++,de"'
 bE 5 5 7EEEG-1-C-C "A1.F*J
!-#j\0B'CD"a
NNmJ<$@.#QR$$Xx822H>P3QS`bij
 %[33+  -B  C  CY1 $yA$u+NxXA)C,> ?@ACH($/ ,9$>>+,CH001CT,EWX[E\]C(+%	3:E{f$c" /5.>.>syy{.K.R.RSZ.[*+FFH$M (  )H  I  I}0JJ}h/x.&*<<	%%"+43O3OUY"+D4P4PVZ 	& 	 4x[6 6 ! $''*I#(OP#G$. b> + b#G/2Z[^Z_0`aab, ,s\   Z *Z;A8Z "[
%B[ ([0ZZ 	[&[[	[-[(([-0[:)NF)	r   r   r   r!   r<   rA   r   _restrict_tor   r   r   r   r   r      s5    >:"C  ]u-p .pr   r   ) r   rw   r2   r   commonr   rY   r   r   compatr   dependenciesr	   utilsr
   r   r   r   r   r   mutagen.flacr   r   mutagen.mp4r   r   mutagen.oggopusr   mutagen.oggvorbisr   r   r   r   r   r   <module>r      sT     	 	  ! D  "  *)'+	/ 	K* Kr   