a
    h")                     @   s   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rd 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 deZG dd deZdS )    N   )PostProcessor)FFmpegPostProcessorFFmpegThumbnailsConvertorPP   )imghdr)mutagen)PopenPostProcessingErrorcheck_executableencodeArgumentprepend_extensionshell_quote)FLACPicture)MP4MP4Cover)OggOpus)	OggVorbisc                   @   s   e Zd ZdS )EmbedThumbnailPPErrorN)__name__
__module____qualname__ r   r   X/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/postprocessor/embedthumbnail.pyr      s   r   c                   @   s:   e Zd ZdddZdd Zdd Zejdd	d
d ZdS )EmbedThumbnailPPNFc                 C   s   t | | || _d S )N)r   __init___already_have_thumbnail)selfZ
downloaderZalready_have_thumbnailr   r   r   r       s    zEmbedThumbnailPP.__init__c              
      s    fdd}z8d}| j |d dgdd}t||}|d u rB| W S W n: ty~ } z"| d|  | W  Y d }~S d }~0 0 t|dt|d	fS )
Nc                     s*     d  d } }| r&|r&| |fS d S )Nwidthheightget)r   r    thumbnail_dictr   r   guess%   s    z9EmbedThumbnailPP._get_thumbnail_resolution.<locals>.guessz!,\s*(?P<w>\d+)x(?P<h>\d+)\s*[,\[]z-hide_banner)r   )Zexpected_retcodesz)unable to find the thumbnail resolution; wh)
run_ffmpegresearchr
   report_warningintgroup)r   filenamer$   r%   Z
size_regexZsize_resultZmobjerrr   r#   r   _get_thumbnail_resolution$   s    z*EmbedThumbnailPP._get_thumbnail_resolutionc                 C   s   |  | d| d d S )Nz: Adding thumbnail to "")	to_screen)r   Zexer.   r   r   r   _report_run5   s    zEmbedThumbnailPP._report_run)Zimagesc              
   C   sN  |d }t |d}|ds.| d g |fS tdd t|d d d d dD d }|d u rp| d	 g |fS |d | d }tj|s| d
 g |fS t	| j
}||| |d | d  }}tj|d dd  }|d dvr|dvr||d}d}t|j}	d}
|d dkrPg d}| d| | ||g|| n|d dv rt|  }d|dd }| |d|\}}|d ur|dd| g |d8 }|d| |d| d| d| d| g | d| | ||| n|d dv rd| dg v }tr0|r6d }
n| d!| tjtjd"}zt|d#}| }W d    n1 s|0    Y  t j!|d$}|st"d%n||vrt"d&| t#|}t||| d'g|j$d(< |%  |}W n: t&y" } z | d)|  d }
W Y d }~n
d }~0 0 |
sd}
td*d d+D d }|d u r\| d, d }
n|sl| d- ||t'd.|t'd/|g}|d0d1 | (d2D 7 }| d3| | )d4t*|  t+j,|dt-j.t-j.d5\}}}|r| d6|/   d }
nd7|v r| d8 d }
|
sd}
zg |  dd9}| |d:d\}}|d urh|dd| g |d8 }|d;| d<g | d| | ||g|| W n8 t0y } zd }
t1d=| W Y d }~n
d }~0 0 n|d d>v rtst1d?| d!| t2t3t4d@|d  |}t5 }dt !| |_6t|d#}| |_7W d    n1 s^0    Y  dA|_8| 9||d | }|d ur|\|_:|_;|d dBkr|<| nt=>|? @dC|dD< |%  |}nt1dE|
r||krt|| | A||	|	 ||k}| jB|s$| jCs(|nd |r<| jCs<|nd |dF g |fS )GNfilepathtempZ
thumbnailsz$There aren't any thumbnails to embedc                 s   s"   | ]\}}| d r| V  qdS )r4   Nr!   ).0itr   r   r   	<genexpr>A       z'EmbedThumbnailPP.run.<locals>.<genexpr>r   zThere are no thumbnails on diskz=Skipping embedding the thumbnail because the file is missing.ext)ZmkvZmka)jpgjpegpngr?   TZmp3)z-ccopy-mapz0:0rA   z1:0z-write_id3v11z-id3v2_version3-metadata:s:vztitle=Album coverrD   zcomment=Cover (front)ffmpegzimage/r=   r>   )tagsmimetyperA   z-0:z-attachz-metadata:s:z	mimetype=zfilename=cover.)Zm4aZmp4Zm4vZmovzembed-thumbnail-atomicparsleyZcompat_optsFr   )r>   r?   rb)r'   zcould not determine image typezincompatible image type: )dataZimageformatZcovrzunable to embed using mutagen; c                 s   s   | ]}t |d gr|V  qdS )z-vN)r   )r6   xr   r   r   r9      s   )AtomicParsleyatomicparsleyzlibatomicparsley.sozCNeither mutagen nor AtomicParsley was found. Falling back to ffmpegz4mutagen was not found. Falling back to AtomicParsleyz	--artworkz-oc                 S   s   g | ]}t |qS r   )r   )r6   or   r   r   
<listcomp>   r:   z(EmbedThumbnailPP.run.<locals>.<listcomp>rK   rL   zAtomicParsley command line: )textstdoutstderrz0Unable to embed thumbnails using AtomicParsley; z
No changesz5The file format doesn't support embedding a thumbnailrB   )dispositionattached_picz-disposition:rS   z(Unable to embed using ffprobe & ffmpeg; )oggopusflaczSmodule mutagen was not found. Please install using `python3 -m pip install mutagen`)rU   rV   rT      rV   asciiZMETADATA_BLOCK_PICTUREz]Supported filetypes for thumbnail embedding are: mp3, mkv/mka, ogg/opus/flac, m4a/mp4/m4v/mov)info)Dr   r"   r2   next	enumerateospathexistsr+   r   Z_downloaderZ
fixup_webpsplitextZconvert_thumbnailstatst_mtimer3   Zrun_ffmpeg_multiple_fileslistZstream_copy_optsreplaceZget_stream_numberextendZ_ffmpeg_filename_argumentr(   	get_paramr   r   ZFORMAT_JPEGZ
FORMAT_PNGopenreadr   what
ValueErrorr   rF   save	Exceptionr   Z_configuration_argsZwrite_debugr   r	   run
subprocessPIPEstripr
   r   r   r   r   r   mimerI   typer0   r   r    Zadd_picturebase64	b64encodewritedecodeZ	try_utimeZ_delete_downloaded_filesr   )r   rY   r.   Ztemp_filenameidxZthumbnail_filenameZ	convertorZoriginal_thumbnailZthumbnail_extmtimesuccessoptionsrG   Z
old_streamZ
new_streamZprefer_atomicparsleyfZ	thumbfileZ
thumb_datatype_metar/   rL   cmdrP   rQ   
returncodeZpicresZ	convertedr   r   r   rl   8   s   


(




(







(*
zEmbedThumbnailPP.run)NF)	r   r   r   r   r0   r3   r   Z_restrict_torl   r   r   r   r   r      s
   

r   ) rr   r\   r)   rm   commonr   rE   r   r   compatr   Zdependenciesr   utilsr	   r
   r   r   r   r   Zmutagen.flacr   r   Zmutagen.mp4r   r   Zmutagen.oggopusr   Zmutagen.oggvorbisr   r   r   r   r   r   r   <module>   s    	