mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	[EmbedThumbnail] Prefer AtomicParsley over ffmpeg if available
This commit is contained in:
		| @@ -145,8 +145,43 @@ class EmbedThumbnailPP(FFmpegPostProcessor): | ||||
|                     self.report_warning('unable to embed using mutagen; %s' % error_to_compat_str(err)) | ||||
|                     success = False | ||||
|  | ||||
|             # Method 2: Use ffmpeg+ffprobe | ||||
|             if not success and not prefer_atomicparsley: | ||||
|             # Method 2: Use AtomicParsley | ||||
|             if not success: | ||||
|                 success = True | ||||
|                 atomicparsley = next(( | ||||
|                     x for x in ['AtomicParsley', 'atomicparsley'] | ||||
|                     if check_executable(x, ['-v'])), None) | ||||
|                 if atomicparsley is None: | ||||
|                     self.to_screen('Neither mutagen nor AtomicParsley was found. Falling back to ffmpeg') | ||||
|                     success = False | ||||
|                 else: | ||||
|                     if not prefer_atomicparsley: | ||||
|                         self.to_screen('mutagen was not found. Falling back to AtomicParsley') | ||||
|                     cmd = [encodeFilename(atomicparsley, True), | ||||
|                            encodeFilename(filename, True), | ||||
|                            encodeArgument('--artwork'), | ||||
|                            encodeFilename(thumbnail_filename, True), | ||||
|                            encodeArgument('-o'), | ||||
|                            encodeFilename(temp_filename, True)] | ||||
|                     cmd += [encodeArgument(o) for o in self._configuration_args('AtomicParsley')] | ||||
|  | ||||
|                     self._report_run('atomicparsley', filename) | ||||
|                     self.write_debug('AtomicParsley command line: %s' % shell_quote(cmd)) | ||||
|                     p = Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | ||||
|                     stdout, stderr = p.communicate_or_kill() | ||||
|                     if p.returncode != 0: | ||||
|                         msg = stderr.decode('utf-8', 'replace').strip() | ||||
|                         self.report_warning(f'Unable to embed thumbnails using AtomicParsley; {msg}') | ||||
|                     # for formats that don't support thumbnails (like 3gp) AtomicParsley | ||||
|                     # won't create to the temporary file | ||||
|                     if b'No changes' in stdout: | ||||
|                         self.report_warning('The file format doesn\'t support embedding a thumbnail') | ||||
|                         success = False | ||||
|  | ||||
|             # Method 3: Use ffmpeg+ffprobe | ||||
|             # Thumbnails attached using this method doesn't show up as cover in some cases | ||||
|             # See https://github.com/yt-dlp/yt-dlp/issues/2125, https://github.com/yt-dlp/yt-dlp/issues/411 | ||||
|             if not success: | ||||
|                 success = True | ||||
|                 try: | ||||
|                     options = ['-c', 'copy', '-map', '0', '-dn', '-map', '1'] | ||||
| @@ -161,38 +196,8 @@ class EmbedThumbnailPP(FFmpegPostProcessor): | ||||
|                     self._report_run('ffmpeg', filename) | ||||
|                     self.run_ffmpeg_multiple_files([filename, thumbnail_filename], temp_filename, options) | ||||
|                 except PostProcessingError as err: | ||||
|                     self.report_warning('unable to embed using ffprobe & ffmpeg; %s' % error_to_compat_str(err)) | ||||
|                     success = False | ||||
|  | ||||
|             # Method 3: Use AtomicParsley | ||||
|             if not success: | ||||
|                 success = True | ||||
|                 atomicparsley = next(( | ||||
|                     x for x in ['AtomicParsley', 'atomicparsley'] | ||||
|                     if check_executable(x, ['-v'])), None) | ||||
|                 if atomicparsley is None: | ||||
|                     raise EmbedThumbnailPPError('AtomicParsley was not found. Please install') | ||||
|  | ||||
|                 cmd = [encodeFilename(atomicparsley, True), | ||||
|                        encodeFilename(filename, True), | ||||
|                        encodeArgument('--artwork'), | ||||
|                        encodeFilename(thumbnail_filename, True), | ||||
|                        encodeArgument('-o'), | ||||
|                        encodeFilename(temp_filename, True)] | ||||
|                 cmd += [encodeArgument(o) for o in self._configuration_args('AtomicParsley')] | ||||
|  | ||||
|                 self._report_run('atomicparsley', filename) | ||||
|                 self.write_debug('AtomicParsley command line: %s' % shell_quote(cmd)) | ||||
|                 p = Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | ||||
|                 stdout, stderr = p.communicate_or_kill() | ||||
|                 if p.returncode != 0: | ||||
|                     msg = stderr.decode('utf-8', 'replace').strip() | ||||
|                     raise EmbedThumbnailPPError(msg) | ||||
|                 # for formats that don't support thumbnails (like 3gp) AtomicParsley | ||||
|                 # won't create to the temporary file | ||||
|                 if b'No changes' in stdout: | ||||
|                     self.report_warning('The file format doesn\'t support embedding a thumbnail') | ||||
|                     success = False | ||||
|                     raise EmbedThumbnailPPError(f'Unable to embed using ffprobe & ffmpeg; {err}') | ||||
|  | ||||
|         elif info['ext'] in ['ogg', 'opus', 'flac']: | ||||
|             if not has_mutagen: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 pukkandan
					pukkandan