
    yf(                         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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encodeFilenameerror_to_compat_strprepend_extensionshell_quote)FLACPicture)MP4MP4Cover)OggOpus)	OggVorbisc                       e Zd Zy)EmbedThumbnailPPErrorN)__name__
__module____qualname__     E/usr/lib/python3/dist-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                 \   fd}	 d}| j                  |d dgd      }t        j                  ||      }| |       S 	 t        |j                  d            t        |j                  d            fS # t        $ r.}| j	                  dt        |      z          |       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; %swh)
run_ffmpegresearchr   report_warningr   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 # 	 MPcdgPh hi7N	s   6A4 4	B+=#B& B+&B+c                 2    | j                  | d| d       y )Nz: Adding thumbnail to "")	to_screen)r%   exer9   s      r   _report_runzEmbedThumbnailPP._report_run7   s    #5hZqABr   )imagesc           	      8   |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                  t        |            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                  t        |            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|z  g       |dz  }|j/                  d| j1                  |      d|z  d|z  d|z  d|z  g       | j#                  d|       | j3                  |||       n|d
   dv rd| j5                  dg       v }t6        r|rd}
n	 | j#                  d |       t9        |      }t:        j<                  t:        j>                  d!tA        jB                  |         }tE        |d"      5 }|jG                         }d d d        t;        |#      g|jH                  d$<   |jK                          |}|
sOd}
t        d& d'D        d       }|| j                  d(       d}
n#|s| j                  d)       t        |d      t        |d      tQ        d*      t        |d      tQ        d+      t        |d      g}|| jS                  d,      D cg c]  }tQ        |       c}z  }| j#                  d-|       | jU                  d.tW        |      z         tY        jZ                  |dt\        j^                  t\        j^                  /      \  }}}|r"| j                  d0|ja                                 d1|v r| j                  d2       d}
|
sd}
	 g | j)                         dd3}| j-                  |d4d      \  }}||j/                  dd|z  g       |dz  }|j/                  d5|z  d6g       | j#                  d|       | j%                  ||g||       n6|d
   d8v r#t6        ste        d9      | j#                  d |       tg        th        tj        d:|d
      |      }tm               }d;tA        jB                  |      z  |_7        tE        |d"      5 }|jG                         |_8        d d d        d<|_9        | ju                  ||d   |         }||\  |_;        |_<        |d
   d=k(  r|j{                  |       n5t}        j~                  |j                               j                  d>      |d?<   |jK                          |}nte        d@      |
r||k7  rt        j*                  ||       | j                  ||	|	       ||k7  }| j                  |s| j                  s|nd |r| j                  s|nd |A       g |fS # 1 sw Y   xY w# tL        $ r*}| j                  d%tO        |      z         d}
Y d }~d }~ww xY wc c}w # tb        $ r}d}
te        d7|       d }~ww xY w# 1 sw Y   }xY w)BNfilepathtemp
thumbnailsz$There aren't any thumbnails to embedc              3   L   K   | ]  \  }}|j                  d       s|   yw)rF   Nr,   ).0its      r   	<genexpr>z'EmbedThumbnailPP.run.<locals>.<genexpr>C   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pngrT   Tmp3)z-ccopy-mapz0:0rW   z1:0z-write_id3v11z-id3v2_version3-metadata:s:vztitle="Album cover"rZ   zcomment=Cover (front)ffmpegzimage/rR   rS   )tagsmimetyperW   z-0:%dz-attachz-metadata:s:%dzmimetype=%szfilename=cover.%s)m4amp4m4vmovzembed-thumbnail-atomicparsleycompat_optsFr	   )rS   rT   rb)dataimageformatcovrz!unable to embed using mutagen; %sc              3   :   K   | ]  }t        |d g      r|  yw)z-vN)r   )rJ   xs     r   rM   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-ori   rj   zAtomicParsley command line: %s)textstdoutstderrz0Unable to embed thumbnails using AtomicParsley; z
No changesz5The file format doesn't support embedding a thumbnailrX   )dispositionattached_picz-disposition:%sro   z(Unable to embed using ffprobe & ffmpeg; )oggopusflaczSmodule mutagen was not found. Please install using `python3 -m pip install mutagen`)rq   rr   rp   zimage/%s   rr   asciiMETADATA_BLOCK_PICTUREz]Supported filetypes for thumbnail embedding are: mp3, mkv/mka, ogg/opus/flac, m4a/mp4/m4v/mov)info)Er   r-   rA   next	enumerateospathexistsr   r6   r   _downloader
fixup_webpsplitextconvert_thumbnailstatst_mtimerC   run_ffmpeg_multiple_filesliststream_copy_optsreplaceget_stream_numberextend_ffmpeg_filename_argumentr3   	get_paramr	   r   r   FORMAT_JPEG
FORMAT_PNGr   whatopenreadr\   save	Exceptionr   r   _configuration_argswrite_debugr   r
   run
subprocessPIPEstripr   r   r   r   r   r   mimerd   typer>   r*   r+   add_picturebase64	b64encodewritedecode	try_utime_delete_downloaded_filesr$   )r%   rv   r9   temp_filenameidxthumbnail_filename	convertororiginal_thumbnailthumbnail_extmtimesuccessoptionsr]   
old_stream
new_streamprefer_atomicparsleymetaf	thumbfile
thumb_datar=   rj   cmdorl   rm   
returncodepicres	converteds                                 r   r   zEmbedThumbnailPP.run:   sn   
#)(F;xx%NNBCt8O_9T,-?"-Eq#I_aef;NN<=t8O!,/4Z@ww~~n-?@A _`t8O 00@0@A	T3'26|2DS2I*2UU/ (();<Q?C;n,F\1\!*!<!<=OQV!W!Mx01::;%bG Xx0**H6H+I=Zab%[N*40023G 5 5eV DEFH%)%;%;.&:"J
%*(<=>a
NN499:LM :-}x/G :-/B]/RT U
 Xx0OOHmW=%[88#BdnnUbdfFg#g 2$$$Y9x=D "*!5!5h>Q>QRSYS^S^_qSrsA0$7 69%.^^%5
6)1zq)Q(RDIIf%IIK$,M  $ &4X&4 6:!; !(NN#hi#G/']^)->)(D9)+6)*<dC)$/)->@C t7O7OP_7`a!N1-aaC$$_h?$$%ETWHX%XY163TR\RaRajtjyjy1z.FFJ!++.^_e_k_k_m^n,op $v-++,de"'
 bE 5 5 7EEEG-1-C-C "A1.F*J
!-*0D'EF"a
NN$5
$BN#ST$$Xx822H>P3QS`bij
 %[33+  -B  C  CY1 $yA$u+NxXA)C!FKK0B$CCCH($/ ,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E6 6
 ! $''(KNabeNf(fg#G$. b< + b#G/2Z[^Z_0`aab, ,s\   =A Z3 Z&.5Z3 ;[);B[. >\&Z0+Z3 3	[&<[!![&.	\7\\\)NF)	r   r   r   r#   r>   rC   r   _restrict_tor   r   r   r   r!   r!       s5    >:"C  ]u-h .hr   r!   )"r   ry   r4   r   commonr   r[   r   r   compatr   dependenciesr	   utilsr
   r   r   r   r   r   r   r   mutagen.flacr   r   mutagen.mp4r   r   mutagen.oggopusr   mutagen.oggvorbisr   r   r!   r   r   r   <module>r      sY     	 	  ! D  "	 	 	 *)'+	/ 	C* Cr   