o
    i")                     @   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rXd 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   W/home/ubuntu/.local/lib/python3.10/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)self
downloaderalready_have_thumbnailr   r   r   r       s   
zEmbedThumbnailPP.__init__c              
      s    fdd}zd}| j |d dgdd}t||}|d u r!| W S W n ty? } z| d|  | W  Y d }~S d }~ww t|dt|d	fS )
Nc                     s.     d  d} }| r|r| |fS d 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   )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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   exer1   r   r   r   _report_run5   s   zEmbedThumbnailPP._report_run)imagesc              
   C   s4  |d }t |d}|ds| d g |fS tdd t|d d d d dD d }|d u r8| d	 g |fS |d | d }tj|sO| 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rg d}| d| | ||g|| n>|d dv rt|  }d|dd }| |d|\}}|d ur|dd| g |d8 }|d| |d| d| d| d| g | d| | ||| n|d dv r`d| dg v }tr|rd }
nv| d!| tjtjd"}zKt|d#}| }W d    n	1 s9w   Y  t j!|d$}|sKt"d%||vrWt"d&| t#|}t||| d'g|j$d(< |%  |}W n t&y } z| d)|  d }
W Y d }~nd }~ww |
sd}
td*d d+D d }|d u r| d, d }
nZ|s| 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 }
|
s_d}
zAg |  dd9}| |d:d\}}|d ur.|dd| g |d8 }|d;| d<g | d| | ||g|| W n t0y^ } z	d }
t1d=| d }~ww n|d d>v rtsnt1d?| d!| t2t3t4d@|d  |}t5 }dt !| |_6t|d#}| |_7W d    n	1 sw   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temp
thumbnailsz$There aren't any thumbnails to embedc                 s   s$    | ]\}}| d r| V  qdS )r<   Nr#   ).0itr   r   r   	<genexpr>A   s   " z'EmbedThumbnailPP.run.<locals>.<genexpr>r   zThere are no thumbnails on diskz=Skipping embedding the thumbnail because the file is missing.ext)mkvmka)jpgjpegpngrI   Tmp3)z-ccopy-mapz0:0rL   z1:0z-write_id3v11z-id3v2_version3-metadata:s:vztitle=Album coverrO   zcomment=Cover (front)ffmpegzimage/rG   rH   )tagsmimetyperL   z-0:z-attachz-metadata:s:z	mimetype=zfilename=cover.)m4amp4m4vmovzembed-thumbnail-atomicparsleycompat_optsFr   )rH   rI   rb)r*   zcould not determine image typezincompatible image type: )dataimageformatcovrzunable to embed using mutagen; c                 s   s     | ]}t |d gr|V  qdS )z-vN)r   )r?   xr   r   r   rB      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   )r?   or   r   r   
<listcomp>   s    z(EmbedThumbnailPP.run.<locals>.<listcomp>r]   r^   zAtomicParsley command line: )textstdoutstderrz0Unable to embed thumbnails using AtomicParsley; z
No changesz5The file format doesn't support embedding a thumbnailrM   )dispositionattached_picz-disposition:re   z(Unable to embed using ffprobe & ffmpeg; )oggopusflaczSmodule mutagen was not found. Please install using `python3 -m pip install mutagen`)rg   rh   rf      rh   asciiMETADATA_BLOCK_PICTUREz]Supported filetypes for thumbnail embedding are: mp3, mkv/mka, ogg/opus/flac, m4a/mp4/m4v/mov)info)Dr   r$   r8   next	enumerateospathexistsr.   r   _downloader
fixup_webpsplitextconvert_thumbnailstatst_mtimer:   run_ffmpeg_multiple_filesliststream_copy_optsreplaceget_stream_numberextend_ffmpeg_filename_argumentr+   	get_paramr   r   FORMAT_JPEG
FORMAT_PNGopenreadr   what
ValueErrorr   rQ   save	Exceptionr   _configuration_argswrite_debugr   r	   run
subprocessPIPEstripr
   r   r   r   r   r   mimerY   typer6   r!   r"   add_picturebase64	b64encodewritedecode	try_utime_delete_downloaded_filesr   )r   rl   r1   temp_filenameidxthumbnail_filename	convertororiginal_thumbnailthumbnail_extmtimesuccessoptionsrR   
old_stream
new_streamprefer_atomicparsleyf	thumbfile
thumb_datatype_metar5   r^   cmdrb   rc   
returncodepicres	convertedr   r   r   r   8   s   


(












zEmbedThumbnailPP.run)NF)	r   r   r   r   r6   r:   r   _restrict_tor   r   r   r   r   r      s    

r   ) r   ro   r,   r   commonr   rP   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   r   <module>   s      	