Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sorting Video Formats #25959

Closed
wants to merge 18 commits into from
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Added embedding of thumbnails in mkv files (#10)
* MKV Thumbnails with FFMpeg
* Now has the correct file name in MKV container
* Change os.rename to shutil.move
Co-authored-by: MrDoritos <[email protected]>
Co-authored-by: ian <ian@nass>
Co-authored-by: pukkandan
  • Loading branch information
pukkandan committed Sep 23, 2020
commit 322a523dad897726e353cf86075ea62b31cc0835
32 changes: 26 additions & 6 deletions youtube_dl/postprocessor/embedthumbnail.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@


import os
import shutil
import subprocess

from .ffmpeg import FFmpegPostProcessor
Expand Down Expand Up @@ -55,7 +56,7 @@ def is_webp(path):
self._downloader.to_screen(
'[ffmpeg] Correcting extension to webp and escaping path for thumbnail "%s"' % thumbnail_filename)
thumbnail_webp_filename = replace_extension(thumbnail_filename, 'webp')
os.rename(encodeFilename(thumbnail_filename), encodeFilename(thumbnail_webp_filename))
shutil.move(encodeFilename(thumbnail_filename), encodeFilename(thumbnail_webp_filename))
thumbnail_filename = thumbnail_webp_filename
thumbnail_ext = 'webp'

Expand All @@ -64,15 +65,15 @@ def is_webp(path):
# NB: % is supposed to be escaped with %% but this does not work
# for input files so working around with standard substitution
escaped_thumbnail_filename = thumbnail_filename.replace('%', '#')
os.rename(encodeFilename(thumbnail_filename), encodeFilename(escaped_thumbnail_filename))
shutil.move(encodeFilename(thumbnail_filename), encodeFilename(escaped_thumbnail_filename))
escaped_thumbnail_jpg_filename = replace_extension(escaped_thumbnail_filename, 'jpg')
self._downloader.to_screen('[ffmpeg] Converting thumbnail "%s" to JPEG' % escaped_thumbnail_filename)
self.run_ffmpeg(escaped_thumbnail_filename, escaped_thumbnail_jpg_filename, ['-bsf:v', 'mjpeg2jpeg'])
os.remove(encodeFilename(escaped_thumbnail_filename))
thumbnail_jpg_filename = replace_extension(thumbnail_filename, 'jpg')
# Rename back to unescaped for further processing
os.rename(encodeFilename(escaped_thumbnail_jpg_filename), encodeFilename(thumbnail_jpg_filename))
shutil.move(encodeFilename(escaped_thumbnail_jpg_filename), encodeFilename(thumbnail_jpg_filename))
thumbnail_filename = thumbnail_jpg_filename
os.remove(encodeFilename(escaped_thumbnail_filename))

if info['ext'] == 'mp3':
options = [
Expand All @@ -86,7 +87,26 @@ def is_webp(path):
if not self._already_have_thumbnail:
os.remove(encodeFilename(thumbnail_filename))
os.remove(encodeFilename(filename))
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
shutil.move(encodeFilename(temp_filename), encodeFilename(filename))

elif info['ext'] == 'mkv':
shutil.move(encodeFilename(thumbnail_filename), encodeFilename('cover.jpg'))
old_thumbnail_filename = thumbnail_filename
thumbnail_filename = 'cover.jpg'

options = [
'-c', 'copy', '-attach', thumbnail_filename, '-metadata:s:t', 'mimetype=image/jpeg']

self._downloader.to_screen('[ffmpeg] Adding thumbnail to "%s"' % filename)

self.run_ffmpeg_multiple_files([filename], temp_filename, options)

if not self._already_have_thumbnail:
os.remove(encodeFilename(thumbnail_filename))
else:
shutil.move(encodeFilename(thumbnail_filename), encodeFilename(old_thumbnail_filename))
os.remove(encodeFilename(filename))
shutil.move(encodeFilename(temp_filename), encodeFilename(filename))

elif info['ext'] in ['m4a', 'mp4']:
if not check_executable('AtomicParsley', ['-v']):
Expand Down Expand Up @@ -119,7 +139,7 @@ def is_webp(path):
self._downloader.report_warning('The file format doesn\'t support embedding a thumbnail')
else:
os.remove(encodeFilename(filename))
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
shutil.move(encodeFilename(temp_filename), encodeFilename(filename))
else:
raise EmbedThumbnailPPError('Only mp3 and m4a/mp4 are supported for thumbnail embedding for now.')

Expand Down