1
0
Fork 0
mirror of https://github.com/yt-dlp/yt-dlp.git synced 2025-03-09 12:50:23 -05:00

Remove cover art embedding artifact

This commit is contained in:
7x11x13 2024-12-14 22:16:37 -05:00
parent ffa22df1f2
commit a8ba5954ab

View file

@ -1,11 +1,9 @@
from __future__ import annotations from __future__ import annotations
import collections import collections
from functools import singledispatchmethod from functools import singledispatchmethod
import os
import re import re
from typing import TypedDict from typing import TypedDict
from yt_dlp.compat import imghdr
from yt_dlp.utils._utils import PostProcessingError, variadic from yt_dlp.utils._utils import PostProcessingError, variadic
from ..dependencies import mutagen from ..dependencies import mutagen
@ -142,16 +140,6 @@ def _(file: mp4.MP4, meta: MetadataInfo) -> None:
if meta['track']: if meta['track']:
file['trkn'] = [(meta['track'], 0)] file['trkn'] = [(meta['track'], 0)]
def _get_cover_art_file(self, info) -> str | None:
idx = next((-i for i, t in enumerate(info['thumbnails'][::-1], 1) if t.get('filepath')), None)
if idx is None:
return None
thumbnail_filename = info['thumbnails'][idx]['filepath']
if not os.path.exists(thumbnail_filename):
self.report_warning('Skipping embedding the cover art because the file is missing.')
return None
return thumbnail_filename
def _get_metadata_from_info(self, info) -> MetadataInfo: def _get_metadata_from_info(self, info) -> MetadataInfo:
meta_prefix = 'meta' meta_prefix = 'meta'
metadata: dict[str, self.MetadataInfo] = collections.defaultdict( metadata: dict[str, self.MetadataInfo] = collections.defaultdict(
@ -192,21 +180,6 @@ def add(meta_list, info_list=None):
if value is not None and mobj: if value is not None and mobj:
metadata[mobj.group('i') or 'common'][mobj.group('key')] = value.replace('\0', '') metadata[mobj.group('i') or 'common'][mobj.group('key')] = value.replace('\0', '')
cover_art = self._get_cover_art_file(info)
if cover_art:
try:
with open(cover_art, 'rb') as cover_file:
cover_data = cover_file.read()
type_ = imghdr.what(h=cover_data)
if not type_:
raise ValueError('could not determine image type')
elif type_ not in ('jpeg', 'png'):
raise ValueError(f'incompatible image type: {type_}')
metadata['common']['cover_art_data'] = cover_data
metadata['common']['cover_art_type'] = type_
except Exception as err:
self.report_warning(f'Skipping embedding cover art due to error; {err}')
return metadata['common'] return metadata['common']
@PostProcessor._restrict_to(video=False, images=False) @PostProcessor._restrict_to(video=False, images=False)