mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	Add a PostProcessor for adding metadata to the file (closes #1570)
It currently sets the title, the date and the author values.
This commit is contained in:
		| @@ -2,6 +2,7 @@ import os | ||||
| import subprocess | ||||
| import sys | ||||
| import time | ||||
| import datetime | ||||
|  | ||||
| from .utils import * | ||||
|  | ||||
| @@ -467,3 +468,35 @@ class FFmpegEmbedSubtitlePP(FFmpegPostProcessor): | ||||
|         os.rename(encodeFilename(temp_filename), encodeFilename(filename)) | ||||
|  | ||||
|         return True, information | ||||
|  | ||||
|  | ||||
| class FFmpegMetadataPP(FFmpegPostProcessor): | ||||
|     def run(self, info): | ||||
|         metadata = {} | ||||
|         if info.get('title') is not None: | ||||
|             metadata['title'] = info['title'] | ||||
|         if info.get('upload_date') is not None: | ||||
|             metadata['date'] = info['upload_date'] | ||||
|         if info.get('uploader') is not None: | ||||
|             metadata['artist'] = info['uploader'] | ||||
|         elif info.get('uploader_id') is not None: | ||||
|             metadata['artist'] = info['uploader_id'] | ||||
|  | ||||
|         if not metadata: | ||||
|             self._downloader.to_screen(u'[ffmpeg] There isn\'t any metadata to add') | ||||
|             return True, info | ||||
|  | ||||
|         filename = info['filepath'] | ||||
|         ext = os.path.splitext(filename)[1][1:] | ||||
|         temp_filename = filename + u'.temp' | ||||
|  | ||||
|         options = ['-c', 'copy'] | ||||
|         for (name, value) in metadata.items(): | ||||
|             options.extend(['-metadata', '%s="%s"' % (name, value)]) | ||||
|         options.extend(['-f', ext]) | ||||
|  | ||||
|         self._downloader.to_screen(u'[ffmpeg] Adding metadata to \'%s\'' % filename) | ||||
|         self.run_ffmpeg(filename, temp_filename, options) | ||||
|         os.remove(encodeFilename(filename)) | ||||
|         os.rename(encodeFilename(temp_filename), encodeFilename(filename)) | ||||
|         return True, info | ||||
|   | ||||
| @@ -358,6 +358,8 @@ def parseOpts(overrideArguments=None): | ||||
|             help='do not overwrite post-processed files; the post-processed files are overwritten by default') | ||||
|     postproc.add_option('--embed-subs', action='store_true', dest='embedsubtitles', default=False, | ||||
|             help='embed subtitles in the video (only for mp4 videos)') | ||||
|     postproc.add_option('--add-metadata', action='store_true', dest='addmetadata', default=False, | ||||
|             help='add metadata to the files') | ||||
|  | ||||
|  | ||||
|     parser.add_option_group(general) | ||||
| @@ -651,6 +653,9 @@ def _real_main(argv=None): | ||||
|     ydl.add_default_info_extractors() | ||||
|  | ||||
|     # PostProcessors | ||||
|     # Add the metadata pp first, the other pps will copy it | ||||
|     if opts.addmetadata: | ||||
|         ydl.add_post_processor(FFmpegMetadataPP()) | ||||
|     if opts.extractaudio: | ||||
|         ydl.add_post_processor(FFmpegExtractAudioPP(preferredcodec=opts.audioformat, preferredquality=opts.audioquality, nopostoverwrites=opts.nopostoverwrites)) | ||||
|     if opts.recodevideo: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jaime Marquínez Ferrándiz
					Jaime Marquínez Ferrándiz