|
|
@ -267,7 +267,7 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor):
|
|
|
|
if (new_path == path or
|
|
|
|
if (new_path == path or
|
|
|
|
(self._nopostoverwrites and os.path.exists(encodeFilename(new_path)))):
|
|
|
|
(self._nopostoverwrites and os.path.exists(encodeFilename(new_path)))):
|
|
|
|
self._downloader.to_screen('[youtube] Post-process file %s exists, skipping' % new_path)
|
|
|
|
self._downloader.to_screen('[youtube] Post-process file %s exists, skipping' % new_path)
|
|
|
|
return True, information
|
|
|
|
return [], information
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
self._downloader.to_screen('[' + self.basename + '] Destination: ' + new_path)
|
|
|
|
self._downloader.to_screen('[' + self.basename + '] Destination: ' + new_path)
|
|
|
@ -285,7 +285,7 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor):
|
|
|
|
errnote='Cannot update utime of audio file')
|
|
|
|
errnote='Cannot update utime of audio file')
|
|
|
|
|
|
|
|
|
|
|
|
information['filepath'] = new_path
|
|
|
|
information['filepath'] = new_path
|
|
|
|
return False, information
|
|
|
|
return [path], information
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FFmpegVideoConvertorPP(FFmpegPostProcessor):
|
|
|
|
class FFmpegVideoConvertorPP(FFmpegPostProcessor):
|
|
|
@ -299,13 +299,13 @@ class FFmpegVideoConvertorPP(FFmpegPostProcessor):
|
|
|
|
outpath = prefix + sep + self._preferedformat
|
|
|
|
outpath = prefix + sep + self._preferedformat
|
|
|
|
if information['ext'] == self._preferedformat:
|
|
|
|
if information['ext'] == self._preferedformat:
|
|
|
|
self._downloader.to_screen('[ffmpeg] Not converting video file %s - already is in target format %s' % (path, self._preferedformat))
|
|
|
|
self._downloader.to_screen('[ffmpeg] Not converting video file %s - already is in target format %s' % (path, self._preferedformat))
|
|
|
|
return True, information
|
|
|
|
return [], information
|
|
|
|
self._downloader.to_screen('[' + 'ffmpeg' + '] Converting video from %s to %s, Destination: ' % (information['ext'], self._preferedformat) + outpath)
|
|
|
|
self._downloader.to_screen('[' + 'ffmpeg' + '] Converting video from %s to %s, Destination: ' % (information['ext'], self._preferedformat) + outpath)
|
|
|
|
self.run_ffmpeg(path, outpath, [])
|
|
|
|
self.run_ffmpeg(path, outpath, [])
|
|
|
|
information['filepath'] = outpath
|
|
|
|
information['filepath'] = outpath
|
|
|
|
information['format'] = self._preferedformat
|
|
|
|
information['format'] = self._preferedformat
|
|
|
|
information['ext'] = self._preferedformat
|
|
|
|
information['ext'] = self._preferedformat
|
|
|
|
return False, information
|
|
|
|
return [path], information
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FFmpegEmbedSubtitlePP(FFmpegPostProcessor):
|
|
|
|
class FFmpegEmbedSubtitlePP(FFmpegPostProcessor):
|
|
|
@ -505,11 +505,11 @@ class FFmpegEmbedSubtitlePP(FFmpegPostProcessor):
|
|
|
|
def run(self, information):
|
|
|
|
def run(self, information):
|
|
|
|
if information['ext'] != 'mp4':
|
|
|
|
if information['ext'] != 'mp4':
|
|
|
|
self._downloader.to_screen('[ffmpeg] Subtitles can only be embedded in mp4 files')
|
|
|
|
self._downloader.to_screen('[ffmpeg] Subtitles can only be embedded in mp4 files')
|
|
|
|
return True, information
|
|
|
|
return [], information
|
|
|
|
subtitles = information.get('requested_subtitles')
|
|
|
|
subtitles = information.get('requested_subtitles')
|
|
|
|
if not subtitles:
|
|
|
|
if not subtitles:
|
|
|
|
self._downloader.to_screen('[ffmpeg] There aren\'t any subtitles to embed')
|
|
|
|
self._downloader.to_screen('[ffmpeg] There aren\'t any subtitles to embed')
|
|
|
|
return True, information
|
|
|
|
return [], information
|
|
|
|
|
|
|
|
|
|
|
|
sub_langs = list(subtitles.keys())
|
|
|
|
sub_langs = list(subtitles.keys())
|
|
|
|
filename = information['filepath']
|
|
|
|
filename = information['filepath']
|
|
|
@ -535,7 +535,7 @@ class FFmpegEmbedSubtitlePP(FFmpegPostProcessor):
|
|
|
|
os.remove(encodeFilename(filename))
|
|
|
|
os.remove(encodeFilename(filename))
|
|
|
|
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
|
|
|
|
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
|
|
|
|
|
|
|
|
|
|
|
|
return True, information
|
|
|
|
return [], information
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FFmpegMetadataPP(FFmpegPostProcessor):
|
|
|
|
class FFmpegMetadataPP(FFmpegPostProcessor):
|
|
|
@ -561,7 +561,7 @@ class FFmpegMetadataPP(FFmpegPostProcessor):
|
|
|
|
|
|
|
|
|
|
|
|
if not metadata:
|
|
|
|
if not metadata:
|
|
|
|
self._downloader.to_screen('[ffmpeg] There isn\'t any metadata to add')
|
|
|
|
self._downloader.to_screen('[ffmpeg] There isn\'t any metadata to add')
|
|
|
|
return True, info
|
|
|
|
return [], info
|
|
|
|
|
|
|
|
|
|
|
|
filename = info['filepath']
|
|
|
|
filename = info['filepath']
|
|
|
|
temp_filename = prepend_extension(filename, 'temp')
|
|
|
|
temp_filename = prepend_extension(filename, 'temp')
|
|
|
@ -578,7 +578,7 @@ class FFmpegMetadataPP(FFmpegPostProcessor):
|
|
|
|
self.run_ffmpeg(filename, temp_filename, options)
|
|
|
|
self.run_ffmpeg(filename, temp_filename, options)
|
|
|
|
os.remove(encodeFilename(filename))
|
|
|
|
os.remove(encodeFilename(filename))
|
|
|
|
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
|
|
|
|
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
|
|
|
|
return True, info
|
|
|
|
return [], info
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FFmpegMergerPP(FFmpegPostProcessor):
|
|
|
|
class FFmpegMergerPP(FFmpegPostProcessor):
|
|
|
@ -587,7 +587,7 @@ class FFmpegMergerPP(FFmpegPostProcessor):
|
|
|
|
args = ['-c', 'copy', '-map', '0:v:0', '-map', '1:a:0']
|
|
|
|
args = ['-c', 'copy', '-map', '0:v:0', '-map', '1:a:0']
|
|
|
|
self._downloader.to_screen('[ffmpeg] Merging formats into "%s"' % filename)
|
|
|
|
self._downloader.to_screen('[ffmpeg] Merging formats into "%s"' % filename)
|
|
|
|
self.run_ffmpeg_multiple_files(info['__files_to_merge'], filename, args)
|
|
|
|
self.run_ffmpeg_multiple_files(info['__files_to_merge'], filename, args)
|
|
|
|
return True, info
|
|
|
|
return [], info
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FFmpegAudioFixPP(FFmpegPostProcessor):
|
|
|
|
class FFmpegAudioFixPP(FFmpegPostProcessor):
|
|
|
@ -602,14 +602,14 @@ class FFmpegAudioFixPP(FFmpegPostProcessor):
|
|
|
|
os.remove(encodeFilename(filename))
|
|
|
|
os.remove(encodeFilename(filename))
|
|
|
|
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
|
|
|
|
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
|
|
|
|
|
|
|
|
|
|
|
|
return True, info
|
|
|
|
return [], info
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FFmpegFixupStretchedPP(FFmpegPostProcessor):
|
|
|
|
class FFmpegFixupStretchedPP(FFmpegPostProcessor):
|
|
|
|
def run(self, info):
|
|
|
|
def run(self, info):
|
|
|
|
stretched_ratio = info.get('stretched_ratio')
|
|
|
|
stretched_ratio = info.get('stretched_ratio')
|
|
|
|
if stretched_ratio is None or stretched_ratio == 1:
|
|
|
|
if stretched_ratio is None or stretched_ratio == 1:
|
|
|
|
return True, info
|
|
|
|
return [], info
|
|
|
|
|
|
|
|
|
|
|
|
filename = info['filepath']
|
|
|
|
filename = info['filepath']
|
|
|
|
temp_filename = prepend_extension(filename, 'temp')
|
|
|
|
temp_filename = prepend_extension(filename, 'temp')
|
|
|
@ -621,13 +621,13 @@ class FFmpegFixupStretchedPP(FFmpegPostProcessor):
|
|
|
|
os.remove(encodeFilename(filename))
|
|
|
|
os.remove(encodeFilename(filename))
|
|
|
|
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
|
|
|
|
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
|
|
|
|
|
|
|
|
|
|
|
|
return True, info
|
|
|
|
return [], info
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FFmpegFixupM4aPP(FFmpegPostProcessor):
|
|
|
|
class FFmpegFixupM4aPP(FFmpegPostProcessor):
|
|
|
|
def run(self, info):
|
|
|
|
def run(self, info):
|
|
|
|
if info.get('container') != 'm4a_dash':
|
|
|
|
if info.get('container') != 'm4a_dash':
|
|
|
|
return True, info
|
|
|
|
return [], info
|
|
|
|
|
|
|
|
|
|
|
|
filename = info['filepath']
|
|
|
|
filename = info['filepath']
|
|
|
|
temp_filename = prepend_extension(filename, 'temp')
|
|
|
|
temp_filename = prepend_extension(filename, 'temp')
|
|
|
@ -639,7 +639,7 @@ class FFmpegFixupM4aPP(FFmpegPostProcessor):
|
|
|
|
os.remove(encodeFilename(filename))
|
|
|
|
os.remove(encodeFilename(filename))
|
|
|
|
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
|
|
|
|
os.rename(encodeFilename(temp_filename), encodeFilename(filename))
|
|
|
|
|
|
|
|
|
|
|
|
return True, info
|
|
|
|
return [], info
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor):
|
|
|
|
class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor):
|
|
|
@ -656,7 +656,7 @@ class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor):
|
|
|
|
new_format = 'webvtt'
|
|
|
|
new_format = 'webvtt'
|
|
|
|
if subs is None:
|
|
|
|
if subs is None:
|
|
|
|
self._downloader.to_screen('[ffmpeg] There aren\'t any subtitles to convert')
|
|
|
|
self._downloader.to_screen('[ffmpeg] There aren\'t any subtitles to convert')
|
|
|
|
return True, info
|
|
|
|
return [], info
|
|
|
|
self._downloader.to_screen('[ffmpeg] Converting subtitles')
|
|
|
|
self._downloader.to_screen('[ffmpeg] Converting subtitles')
|
|
|
|
for lang, sub in subs.items():
|
|
|
|
for lang, sub in subs.items():
|
|
|
|
ext = sub['ext']
|
|
|
|
ext = sub['ext']
|
|
|
@ -676,4 +676,4 @@ class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor):
|
|
|
|
'data': f.read(),
|
|
|
|
'data': f.read(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return True, info
|
|
|
|
return [], info
|
|
|
|