diff options
| -rw-r--r-- | youtube_dl/PostProcessor.py | 33 | ||||
| -rw-r--r-- | youtube_dl/__init__.py | 5 | 
2 files changed, 38 insertions, 0 deletions
| diff --git a/youtube_dl/PostProcessor.py b/youtube_dl/PostProcessor.py index 3ee1d3c58..fbf8a7f98 100644 --- a/youtube_dl/PostProcessor.py +++ b/youtube_dl/PostProcessor.py @@ -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 diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 3ff78daac..3513d719f 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -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: | 
