mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-09 10:50:38 +00:00
[compat] Implement compat.imghdr
Python 3.11 deprecates `imghdr` module
This commit is contained in:
parent
7a96d0b39c
commit
5792c950bf
@ -806,7 +806,7 @@ class YoutubeDL:
|
||||
if self.params.get('logger'):
|
||||
self.params['logger'].error(message)
|
||||
else:
|
||||
self._write_string(f'{self._bidi_workaround(message)}\n' , self._out_files.error, only_once=only_once)
|
||||
self._write_string(f'{self._bidi_workaround(message)}\n', self._out_files.error, only_once=only_once)
|
||||
|
||||
def _send_console_code(self, code):
|
||||
if compat_os_name == 'nt' or not self._out_files.console:
|
||||
|
14
yt_dlp/compat/imghdr.py
Normal file
14
yt_dlp/compat/imghdr.py
Normal file
@ -0,0 +1,14 @@
|
||||
tests = {
|
||||
'webp': lambda h: h[0:4] == b'RIFF' and h[8:] == b'WEBP',
|
||||
'png': lambda h: h[:8] == b'\211PNG\r\n\032\n',
|
||||
'jpeg': lambda h: h[6:10] in (b'JFIF', b'Exif'),
|
||||
}
|
||||
|
||||
|
||||
def what(path):
|
||||
"""Detect format of image (Currently supports jpeg, png, webp only)
|
||||
Ref: https://github.com/python/cpython/blob/3.10/Lib/imghdr.py
|
||||
"""
|
||||
with open(path, 'rb') as f:
|
||||
head = f.read(12)
|
||||
return next((type_ for type_, test in tests.items() if test(head)), None)
|
@ -1,11 +1,11 @@
|
||||
import base64
|
||||
import imghdr
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
|
||||
from .common import PostProcessor
|
||||
from .ffmpeg import FFmpegPostProcessor, FFmpegThumbnailsConvertorPP
|
||||
from ..compat import imghdr
|
||||
from ..dependencies import mutagen
|
||||
from ..utils import (
|
||||
Popen,
|
||||
|
@ -7,7 +7,7 @@ import subprocess
|
||||
import time
|
||||
|
||||
from .common import AudioConversionError, PostProcessor
|
||||
from ..compat import compat_str
|
||||
from ..compat import imghdr
|
||||
from ..utils import (
|
||||
ISO639Utils,
|
||||
Popen,
|
||||
@ -27,6 +27,7 @@ from ..utils import (
|
||||
traverse_obj,
|
||||
variadic,
|
||||
write_json_file,
|
||||
write_string,
|
||||
)
|
||||
|
||||
EXT_TO_OUT_FORMATS = {
|
||||
@ -1030,8 +1031,8 @@ class FFmpegSplitChaptersPP(FFmpegPostProcessor):
|
||||
self.to_screen('Chapter %03d; Destination: %s' % (number, destination))
|
||||
return (
|
||||
destination,
|
||||
['-ss', compat_str(chapter['start_time']),
|
||||
'-t', compat_str(chapter['end_time'] - chapter['start_time'])])
|
||||
['-ss', str(chapter['start_time']),
|
||||
'-t', str(chapter['end_time'] - chapter['start_time'])])
|
||||
|
||||
@PostProcessor._restrict_to(images=False)
|
||||
def run(self, info):
|
||||
@ -1059,18 +1060,16 @@ class FFmpegThumbnailsConvertorPP(FFmpegPostProcessor):
|
||||
super().__init__(downloader)
|
||||
self.format = format
|
||||
|
||||
@staticmethod
|
||||
def is_webp(path):
|
||||
with open(encodeFilename(path), 'rb') as f:
|
||||
b = f.read(12)
|
||||
return b[0:4] == b'RIFF' and b[8:] == b'WEBP'
|
||||
@classmethod
|
||||
def is_webp(cls, path):
|
||||
write_string(f'DeprecationWarning: {cls.__module__}.{cls.__name__}.is_webp is deprecated')
|
||||
return imghdr.what(path) == 'webp'
|
||||
|
||||
def fixup_webp(self, info, idx=-1):
|
||||
thumbnail_filename = info['thumbnails'][idx]['filepath']
|
||||
_, thumbnail_ext = os.path.splitext(thumbnail_filename)
|
||||
if thumbnail_ext:
|
||||
thumbnail_ext = thumbnail_ext[1:].lower()
|
||||
if thumbnail_ext != 'webp' and self.is_webp(thumbnail_filename):
|
||||
if thumbnail_ext.lower() != '.webp' and imghdr.what(thumbnail_filename) == 'webp':
|
||||
self.to_screen('Correcting thumbnail "%s" extension to webp' % thumbnail_filename)
|
||||
webp_filename = replace_extension(thumbnail_filename, 'webp')
|
||||
os.replace(thumbnail_filename, webp_filename)
|
||||
|
Loading…
Reference in New Issue
Block a user