return [path], information
-class FFmpegVideoRemuxerPP(FFmpegPostProcessor):
+class FFmpegVideoConvertorPP(FFmpegPostProcessor):
+ _action = 'converting'
+
def __init__(self, downloader=None, preferedformat=None):
- super(FFmpegVideoRemuxerPP, self).__init__(downloader)
+ super(FFmpegVideoConvertorPP, self).__init__(downloader)
self._preferedformats = preferedformat.lower().split('/')
- def run(self, information):
- path = information['filepath']
- sourceext, targetext = information['ext'].lower(), None
+ def _target_ext(self, source_ext):
for pair in self._preferedformats:
kv = pair.split('>')
- if len(kv) == 1 or kv[0].strip() == sourceext:
- targetext = kv[-1].strip()
- break
+ if len(kv) == 1 or kv[0].strip() == source_ext:
+ return kv[-1].strip()
+ @staticmethod
+ def _options(target_ext):
+ if target_ext == 'avi':
+ return ['-c:v', 'libxvid', '-vtag', 'XVID']
+ return []
+
+ def run(self, information):
+ path = information['filepath']
+ target_ext = self._target_ext(information['ext'].lower())
_skip_msg = (
- 'could not find a mapping for %s' if not targetext
- else 'already is in target format %s' if sourceext == targetext
+ 'could not find a mapping for %s' if not target_ext
+ else 'already is in target format %s' if source_ext == target_ext
else None)
if _skip_msg:
- self.to_screen('Not remuxing media file %s; %s' % (path, _skip_msg % sourceext))
+ self.to_screen('Not %s media file %s; %s' % (self._action, path, _skip_msg % source_ext))
return [], information
- options = ['-c', 'copy', '-map', '0', '-dn']
- if targetext in ['mp4', 'm4a', 'mov']:
- options.extend(['-movflags', '+faststart'])
prefix, sep, oldext = path.rpartition('.')
- outpath = prefix + sep + targetext
- self.to_screen('Remuxing video from %s to %s; Destination: %s' % (sourceext, targetext, outpath))
- self.run_ffmpeg(path, outpath, options)
+ outpath = prefix + sep + target_ext
+ self.to_screen('%s video from %s to %s; Destination: %s' % (self._action.title(), source_ext, target_ext, outpath))
+ self.run_ffmpeg(path, outpath, self._options(target_ext))
+
information['filepath'] = outpath
- information['format'] = targetext
- information['ext'] = targetext
+ information['format'] = information['ext'] = target_ext
return [path], information
-class FFmpegVideoConvertorPP(FFmpegPostProcessor):
- def __init__(self, downloader=None, preferedformat=None):
- super(FFmpegVideoConvertorPP, self).__init__(downloader)
- self._preferedformat = preferedformat
+class FFmpegVideoRemuxerPP(FFmpegVideoConvertorPP):
+ _action = 'remuxing'
- def run(self, information):
- path = information['filepath']
- if information['ext'] == self._preferedformat:
- self.to_screen('Not converting video file %s - already is in target format %s' % (path, self._preferedformat))
- return [], information
- options = []
- if self._preferedformat == 'avi':
- options.extend(['-c:v', 'libxvid', '-vtag', 'XVID'])
- prefix, sep, ext = path.rpartition('.')
- outpath = prefix + sep + self._preferedformat
- self.to_screen('Converting video from %s to %s, Destination: ' % (information['ext'], self._preferedformat) + outpath)
- self.run_ffmpeg(path, outpath, options)
- information['filepath'] = outpath
- information['format'] = self._preferedformat
- information['ext'] = self._preferedformat
- return [path], information
+ @staticmethod
+ def _options(target_ext):
+ options = ['-c', 'copy', '-map', '0', '-dn']
+ if target_ext in ['mp4', 'm4a', 'mov']:
+ options.extend(['-movflags', '+faststart'])
+ return options
class FFmpegEmbedSubtitlePP(FFmpegPostProcessor):