[xattr] Coding style
[youtube-dl] / youtube_dl / PostProcessor.py
index da95f1a87dbe63fc648e061aa5671bb3dba1d740..617a17ba936e9b82cac00cec052de2519a496b08 100644 (file)
@@ -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():