diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 06bdfb689..7d3d6365f 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -282,6 +282,7 @@ def _real_main(argv=None): postprocessors.append({ 'key': 'FFmpegSubtitlesConvertor', 'format': opts.convertsubtitles, + 'ttml_convert_style': opts.ttmlconvertstyle, }) if opts.embedsubtitles: postprocessors.append({ diff --git a/youtube_dl/options.py b/youtube_dl/options.py index 61705d1f0..f896f7c48 100644 --- a/youtube_dl/options.py +++ b/youtube_dl/options.py @@ -870,6 +870,10 @@ def parseOpts(overrideArguments=None): '--convert-subs', '--convert-subtitles', metavar='FORMAT', dest='convertsubtitles', default=None, help='Convert the subtitles to other format (currently supported: srt|ass|vtt|lrc)') + postproc.add_option( + '--ttml-convert-no-style', + action='store_false', dest='ttmlconvertstyle', default=True, + help='Discard all style information when converting subtitles from ttml/dfxp') parser.add_option_group(general) parser.add_option_group(network) diff --git a/youtube_dl/postprocessor/ffmpeg.py b/youtube_dl/postprocessor/ffmpeg.py index 214825aa9..a139554be 100644 --- a/youtube_dl/postprocessor/ffmpeg.py +++ b/youtube_dl/postprocessor/ffmpeg.py @@ -591,9 +591,10 @@ class FFmpegFixupM3u8PP(FFmpegPostProcessor): class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor): - def __init__(self, downloader=None, format=None): + def __init__(self, downloader=None, format=None, ttml_convert_style=True): super(FFmpegSubtitlesConvertorPP, self).__init__(downloader) self.format = format + self.ttml_convert_style = ttml_convert_style def run(self, info): subs = info.get('requested_subtitles') @@ -626,7 +627,7 @@ class FFmpegSubtitlesConvertorPP(FFmpegPostProcessor): srt_file = subtitles_filename(filename, lang, 'srt', info.get('ext')) with open(dfxp_file, 'rb') as f: - srt_data = dfxp2srt(f.read()) + srt_data = dfxp2srt(f.read(), self.ttml_convert_style) with open(srt_file, 'w', encoding='utf-8') as f: f.write(srt_data) diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index ac1e78002..377a60957 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -4902,7 +4902,7 @@ def srt_subtitles_timecode(seconds): return '%02d:%02d:%02d,%03d' % (seconds / 3600, (seconds % 3600) / 60, seconds % 60, (seconds % 1) * 1000) -def dfxp2srt(dfxp_data): +def dfxp2srt(dfxp_data, convert_style=True): ''' @param dfxp_data A bytes-like object containing DFXP data @returns A unicode object containing converted SRT data @@ -4944,7 +4944,7 @@ def dfxp2srt(dfxp_data): def start(self, tag, attrib): if tag in (_x('ttml:br'), 'br'): self._out += '\n' - else: + elif convert_style: unclosed_elements = [] style = {} element_style_id = attrib.get('style') @@ -4987,7 +4987,7 @@ def dfxp2srt(dfxp_data): self._unclosed_elements.append(unclosed_elements) def end(self, tag): - if tag not in (_x('ttml:br'), 'br'): + if convert_style and tag not in (_x('ttml:br'), 'br'): unclosed_elements = self._unclosed_elements.pop() for element in reversed(unclosed_elements): self._out += '' % element