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 subprocess | ||||||
| import sys | import sys | ||||||
| import time | import time | ||||||
|  | import datetime | ||||||
|  |  | ||||||
| from .utils import * | from .utils import * | ||||||
|  |  | ||||||
| @@ -467,3 +468,35 @@ class FFmpegEmbedSubtitlePP(FFmpegPostProcessor): | |||||||
|         os.rename(encodeFilename(temp_filename), encodeFilename(filename)) |         os.rename(encodeFilename(temp_filename), encodeFilename(filename)) | ||||||
|  |  | ||||||
|         return True, information |         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') |             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, |     postproc.add_option('--embed-subs', action='store_true', dest='embedsubtitles', default=False, | ||||||
|             help='embed subtitles in the video (only for mp4 videos)') |             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) |     parser.add_option_group(general) | ||||||
| @@ -651,6 +653,9 @@ def _real_main(argv=None): | |||||||
|     ydl.add_default_info_extractors() |     ydl.add_default_info_extractors() | ||||||
|  |  | ||||||
|     # PostProcessors |     # PostProcessors | ||||||
|  |     # Add the metadata pp first, the other pps will copy it | ||||||
|  |     if opts.addmetadata: | ||||||
|  |         ydl.add_post_processor(FFmpegMetadataPP()) | ||||||
|     if opts.extractaudio: |     if opts.extractaudio: | ||||||
|         ydl.add_post_processor(FFmpegExtractAudioPP(preferredcodec=opts.audioformat, preferredquality=opts.audioquality, nopostoverwrites=opts.nopostoverwrites)) |         ydl.add_post_processor(FFmpegExtractAudioPP(preferredcodec=opts.audioformat, preferredquality=opts.audioquality, nopostoverwrites=opts.nopostoverwrites)) | ||||||
|     if opts.recodevideo: |     if opts.recodevideo: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jaime Marquínez Ferrándiz
					Jaime Marquínez Ferrándiz