X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2FPostProcessor.py;h=617a17ba936e9b82cac00cec052de2519a496b08;hb=ad848315378eb5eaf7f2a2b6e007653da16c0a46;hp=da95f1a87dbe63fc648e061aa5671bb3dba1d740;hpb=e63fc1bed423e7b84e257000d7d25bb812d37685;p=youtube-dl diff --git a/youtube_dl/PostProcessor.py b/youtube_dl/PostProcessor.py index da95f1a87..617a17ba9 100644 --- a/youtube_dl/PostProcessor.py +++ b/youtube_dl/PostProcessor.py @@ -10,6 +10,7 @@ from .utils import ( PostProcessingError, shell_quote, subtitles_filename, + prepend_extension, ) @@ -85,10 +86,10 @@ class FFmpegPostProcessor(PostProcessor): files_cmd = [] for path in input_paths: - files_cmd.extend(['-i', encodeFilename(path)]) + files_cmd.extend(['-i', encodeFilename(path, True)]) cmd = ([self._exes['avconv'] or self._exes['ffmpeg'], '-y'] + files_cmd + opts + - [encodeFilename(self._ffmpeg_filename_argument(out_path))]) + [encodeFilename(self._ffmpeg_filename_argument(out_path), True)]) if self._downloader.params.get('verbose', False): self._downloader.to_screen(u'[debug] ffmpeg command line: %s' % shell_quote(cmd)) @@ -122,7 +123,10 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor): if not self._exes['ffprobe'] and not self._exes['avprobe']: raise PostProcessingError(u'ffprobe or avprobe not found. Please install one.') try: - cmd = [self._exes['avprobe'] or self._exes['ffprobe'], '-show_streams', encodeFilename(self._ffmpeg_filename_argument(path))] + cmd = [ + self._exes['avprobe'] or self._exes['ffprobe'], + '-show_streams', + encodeFilename(self._ffmpeg_filename_argument(path), True)] handle = subprocess.Popen(cmd, stderr=compat_subprocess_get_DEVNULL(), stdout=subprocess.PIPE) output = handle.communicate()[0] if handle.wait() != 0: @@ -499,13 +503,11 @@ class FFmpegMetadataPP(FFmpegPostProcessor): return True, info filename = info['filepath'] - ext = os.path.splitext(filename)[1][1:] - temp_filename = filename + u'.temp' + temp_filename = prepend_extension(filename, '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) @@ -514,6 +516,14 @@ class FFmpegMetadataPP(FFmpegPostProcessor): return True, info +class FFmpegMergerPP(FFmpegPostProcessor): + def run(self, info): + filename = info['filepath'] + args = ['-c', 'copy'] + self.run_ffmpeg_multiple_files(info['__files_to_merge'], filename, args) + return True, info + + class XAttrMetadataPP(PostProcessor): # @@ -593,9 +603,9 @@ class XAttrMetadataPP(PostProcessor): assert(path.find(":") < 0) assert(os.path.exists(path)) - f = open(path+":"+key, "w") - f.write(value) - f.close() + ads_fn = path + ":" + key + with open(ads_fn, "w") as f: + f.write(value) # Write the metadata to the file's xattrs self._downloader.to_screen('[metadata] Writing metadata to file\'s xattrs...') @@ -604,13 +614,13 @@ class XAttrMetadataPP(PostProcessor): try: xattr_mapping = { - 'user.xdg.referrer.url': 'webpage_url', + 'user.xdg.referrer.url': 'webpage_url', # 'user.xdg.comment': 'description', - 'user.dublincore.title': 'title', - 'user.dublincore.date': 'upload_date', + 'user.dublincore.title': 'title', + 'user.dublincore.date': 'upload_date', 'user.dublincore.description': 'description', 'user.dublincore.contributor': 'uploader', - 'user.dublincore.format': 'format', + 'user.dublincore.format': 'format', } for xattrname, infoname in xattr_mapping.items():