mirror of
https://github.com/ytdl-org/youtube-dl
synced 2025-01-07 12:00:09 +09:00
OggVorbis, OggOpus, FLAC thumbnail embed support.
This commit is contained in:
parent
94520568b3
commit
de3865fec0
@ -17,6 +17,7 @@ from ..utils import (
|
||||
shell_quote
|
||||
)
|
||||
|
||||
from base64 import b64encode
|
||||
|
||||
class EmbedThumbnailPPError(PostProcessingError):
|
||||
pass
|
||||
@ -124,7 +125,38 @@ class EmbedThumbnailPP(FFmpegPostProcessor):
|
||||
else:
|
||||
os.remove(encodeFilename(filename))
|
||||
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
|
||||
|
||||
elif info['ext'] in ['opus', 'ogg', 'flac']:
|
||||
try:
|
||||
from mutagen.oggvorbis import OggVorbis
|
||||
from mutagen.oggopus import OggOpus
|
||||
from mutagen.flac import Picture, FLAC
|
||||
except ImportError:
|
||||
raise EmbedThumbnailPPError('mutagen was not found. Please install.')
|
||||
|
||||
# to prevent the behaviour of in-place modification of Mutagen
|
||||
shutil.copyfile(filename, temp_filename)
|
||||
|
||||
aufile = {'opus': OggOpus, 'flac': FLAC, 'ogg', OggVorbis}[info['ext']](temp_filename)
|
||||
|
||||
covart = Picture()
|
||||
covart.data = open(thumbnail_filename, 'rb').read()
|
||||
covart.type = 3 # as the front cover
|
||||
|
||||
if info['ext'] == 'flac':
|
||||
aufile.add_picture(covart)
|
||||
else:
|
||||
# https://wiki.xiph.org/VorbisComment#METADATA_BLOCK_PICTURE
|
||||
aufile['metadata_block_picture'] = b64encode(covart.write()).decode('ascii')
|
||||
|
||||
self._downloader.to_screen('[mutagen] Adding thumbnail to "%s"' % temp_filename)
|
||||
aufile.save()
|
||||
|
||||
if not self._already_have_thumbnail:
|
||||
os.remove(encodeFilename(thumbnail_filename))
|
||||
os.remove(encodeFilename(filename))
|
||||
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
|
||||
else:
|
||||
raise EmbedThumbnailPPError('Only mp3 and m4a/mp4 are supported for thumbnail embedding for now.')
|
||||
raise EmbedThumbnailPPError('Only mp3, m4a/mp4, ogg, opus and flac are supported for thumbnail embedding for now.')
|
||||
|
||||
return [], info
|
||||
|
Loading…
Reference in New Issue
Block a user