Add postprocessor for converting subtitles (closes #4954)
This commit is contained in:
		| @@ -11,6 +11,7 @@ from .ffmpeg import ( | ||||
|     FFmpegMergerPP, | ||||
|     FFmpegMetadataPP, | ||||
|     FFmpegVideoConvertorPP, | ||||
|     FFmpegSubtitlesConvertorPP, | ||||
| ) | ||||
| from .xattrpp import XAttrMetadataPP | ||||
| from .execafterdownload import ExecAfterDownloadPP | ||||
| @@ -31,6 +32,7 @@ __all__ = [ | ||||
|     'FFmpegMergerPP', | ||||
|     'FFmpegMetadataPP', | ||||
|     'FFmpegPostProcessor', | ||||
|     'FFmpegSubtitlesConvertorPP', | ||||
|     'FFmpegVideoConvertorPP', | ||||
|     'XAttrMetadataPP', | ||||
| ] | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| import io | ||||
| import os | ||||
| import subprocess | ||||
| import sys | ||||
| @@ -635,3 +636,40 @@ class FFmpegFixupM4aPP(FFmpegPostProcessor): | ||||
|         os.rename(encodeFilename(temp_filename), encodeFilename(filename)) | ||||
|  | ||||
|         return True, info | ||||
|  | ||||
|  | ||||
| class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor): | ||||
|     def __init__(self, downloader=None, format=None): | ||||
|         super(FFmpegSubtitlesConvertorPP, self).__init__(downloader) | ||||
|         self.format = format | ||||
|  | ||||
|     def run(self, info): | ||||
|         subs = info.get('requested_subtitles') | ||||
|         filename = info['filepath'] | ||||
|         new_ext = self.format | ||||
|         new_format = new_ext | ||||
|         if new_format == 'vtt': | ||||
|             new_format = 'webvtt' | ||||
|         if subs is None: | ||||
|             self._downloader.to_screen('[ffmpeg] There aren\'t any subtitles to convert') | ||||
|             return True, info | ||||
|         self._downloader.to_screen('[ffmpeg] Converting subtitles') | ||||
|         for lang, sub in subs.items(): | ||||
|             ext = sub['ext'] | ||||
|             if ext == new_ext: | ||||
|                 self._downloader.to_screen( | ||||
|                     '[ffmpeg] Subtitle file for %s is already in the requested' | ||||
|                     'format' % new_ext) | ||||
|                 continue | ||||
|             new_file = subtitles_filename(filename, lang, new_ext) | ||||
|             self.run_ffmpeg( | ||||
|                 subtitles_filename(filename, lang, ext), | ||||
|                 new_file, ['-f', new_format]) | ||||
|  | ||||
|             with io.open(new_file, 'rt', encoding='utf-8') as f: | ||||
|                 subs[lang] = { | ||||
|                     'ext': ext, | ||||
|                     'data': f.read(), | ||||
|                 } | ||||
|  | ||||
|         return True, info | ||||
|   | ||||
		Reference in New Issue
	
	Block a user