diff --git a/test/test_utils.py b/test/test_utils.py
index 9e28e008f..589a1c2bb 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -1196,18 +1196,15 @@ The first line
srt_data = '''1
00:00:02,080 --> 00:00:05,839
default stylecustom style
-
-2
-00:00:02,080 --> 00:00:05,839
part 1
part 2
-3
+2
00:00:05,839 --> 00:00:09,560
line 3
part 3
-4
+3
00:00:09,560 --> 00:00:12,359
inner
style
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
index 62e769fd5..e4a446f0b 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -2859,6 +2859,10 @@ def dfxp2srt(dfxp_data):
continue
default_style.update(style)
+ last_begin_time = None
+ last_end_time = None
+ index_offset = 0
+
for para, index in zip(paras, itertools.count(1)):
begin_time = parse_dfxp_time_expr(para.attrib.get('begin'))
end_time = parse_dfxp_time_expr(para.attrib.get('end'))
@@ -2869,12 +2873,23 @@ def dfxp2srt(dfxp_data):
if not dur:
continue
end_time = begin_time + dur
- out.append('%d\n%s --> %s\n%s\n\n' % (
- index,
- srt_subtitles_timecode(begin_time),
- srt_subtitles_timecode(end_time),
- parse_node(para)))
+ if begin_time == last_begin_time and end_time == last_end_time:
+ index_offset += 1
+ out.append('%s\n' % (parse_node(para)))
+ else:
+ if out:
+ out.append('\n')
+ out.append('%d\n%s --> %s\n%s\n' % (
+ index - index_offset,
+ srt_subtitles_timecode(begin_time),
+ srt_subtitles_timecode(end_time),
+ parse_node(para)))
+
+ last_begin_time = begin_time
+ last_end_time = end_time
+
+ out.append('\n')
return ''.join(out)