mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2024-12-22 16:57:40 +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:
parent
cb354c8f62
commit
bc4f29170f
2 changed files with 38 additions and 0 deletions
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue