Add postprocessor for converting subtitles (closes #4954)
This commit is contained in:
		
							parent
							
								
									0f2c0d335b
								
							
						
					
					
						commit
						e9fade72f3
					
				
					 4 changed files with 52 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue