mkm3u, flying-circus-restored.epls: Start at chapter 2.
authorMark Wooding <mdw@distorted.org.uk>
Thu, 17 Mar 2022 03:18:19 +0000 (03:18 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Thu, 17 Mar 2022 03:18:19 +0000 (03:18 +0000)
These titles have some 30 s of pre-broadcast stuff glued on the front.
This is cool, but I don't usually want to watch it.

flying-circus-restored.epls
mkm3u
ref/flying-circus-restored.m3u8

index afab936..fe4d100 100644 (file)
@@ -3,54 +3,54 @@
 !vdir P/Monty Python's Flying Circus (restored)
 
 !season 1
-2      Whither Canada?
-3      Sex and Violence
-4      How to Recognize Different Types of Tree from Quite a Long Way Away
-5      Owl-Stretching Time
-6      Man's Crisis of Identity in the Latter Half of the Twentieth Century
-2      It's the Arts
-3      You're No Fun Any More
-4      Full Frontal Nudity
-5      The Ant, an Introduction
-6      Untitled
-2      The Royal Philharmonic Orchestra Goes to the Bathroom
-3      The Naked Ant
-4      Intermission
+2,ch=2 Whither Canada?
+3,ch=2 Sex and Violence
+4,ch=2 How to Recognize Different Types of Tree from Quite a Long Way Away
+5,ch=2 Owl-Stretching Time
+6,ch=2 Man's Crisis of Identity in the Latter Half of the Twentieth Century
+2,ch=2 It's the Arts
+3,ch=2 You're No Fun Any More
+4,ch=2 Full Frontal Nudity
+5,ch=2 The Ant, an Introduction
+6,ch=2 Untitled
+2,ch=2 The Royal Philharmonic Orchestra Goes to the Bathroom
+3,ch=2 The Naked Ant
+4,ch=2 Intermission
 
 !season 2
-2      ‘Face the Press’
-3      The Spanish Inquisition
-4      Déjà Vu
-5      The Buzz Aldrin Show
-6      Live from the Grill-o-mat
-2      It's a Living
-3      The Attila the Hun Show
-4      Archæology Today
-5      How to Recognize Different Parts of the Body
-6      Scott of the Antarctic
-2      How Not to Be Seen
-3      Spam
-4      Royal Episode 13
+2,ch=2 ‘Face the Press’
+3,ch=2 The Spanish Inquisition
+4,ch=2 Déjà Vu
+5,ch=2 The Buzz Aldrin Show
+6,ch=2 Live from the Grill-o-mat
+2,ch=2 It's a Living
+3,ch=2 The Attila the Hun Show
+4,ch=2 Archæology Today
+5,ch=2 How to Recognize Different Parts of the Body
+6,ch=2 Scott of the Antarctic
+2,ch=2 How Not to Be Seen
+3,ch=2 Spam
+4,ch=2 Royal Episode 13
 
 !season 3
-2      Whicker's World
-3      Mr. and Mrs. Brian Norris' Ford Popular
-4      The Money Programme
-5      Blood, Devastation, Death, War and Horror
-6      The All-England Summarize Proust Competition
-2      The War Against Pornography
-3      Salad Days
-4      The Cycling Tour
-5      The Nude Organist
-6      E. Henry Tripshaw's Disease
-2      Dennis Moore
-3      A Book at Bedtime
-4      Grandstand
+2,ch=2 Whicker's World
+3,ch=2 Mr. and Mrs. Brian Norris' Ford Popular
+4,ch=2 The Money Programme
+5,ch=2 Blood, Devastation, Death, War and Horror
+6,ch=2 The All-England Summarize Proust Competition
+2,ch=2 The War Against Pornography
+3,ch=2 Salad Days
+4,ch=2 The Cycling Tour
+5,ch=2 The Nude Organist
+6,ch=2 E. Henry Tripshaw's Disease
+2,ch=2 Dennis Moore
+3,ch=2 A Book at Bedtime
+4,ch=2 Grandstand
 
 !season 4
-2      The Golden Age of Ballooning
-3      Michael Ellis
-4      Light Entertainment War
-5      Hamlet
-6      Mr Neutron
-7      Party Political Broadcast
+2,ch=2 The Golden Age of Ballooning
+3,ch=2 Michael Ellis
+4,ch=2 Light Entertainment War
+5,ch=2 Hamlet
+6,ch=2 Mr Neutron
+7,ch=2 Party Political Broadcast
diff --git a/mkm3u b/mkm3u
index 046373f..2e2f5cd 100755 (executable)
--- a/mkm3u
+++ b/mkm3u
@@ -94,31 +94,41 @@ class Source (object):
     me.used_titles = dict()
     me.used_chapters = set()
     me.nuses = 0
-  def url(me, title = None, chapter = None):
+  def url(me, title = None, start_chapter = None, end_chapter = None):
     if title == "-":
       if me.TITLEP: raise ExpectedError("missing title number")
-      if chapter is not None:
+      if start_chapter is not None or end_chapter is not None:
         raise ExpectedError("can't specify chapter without title")
       suffix = ""
     elif not me.TITLEP:
       raise ExpectedError("can't specify title with `%s'" % me.fn)
-    elif chapter is None:
+    elif start_chapter is None:
+      if end_chapter is not None:
+        raise ExpectedError("can't specify end chapter without start chapter")
       suffix = "#%d" % title
     elif not me.CHAPTERP:
       raise ExpectedError("can't specify chapter with `%s'" % me.fn)
+    elif end_chapter is None:
+      suffix = "#%d:%d" % (title, start_chapter)
     else:
-      suffix = "#%d:%d-%d:%d" % (title, chapter, title, chapter)
-    if chapter is not None: key, set = (title, chapter), me.used_chapters
-    else: key, set = title, me.used_titles
-    if key in set:
-      if title == "-":
-        raise ExpectedError("`%s' already used" % me.fn)
-      elif chapter is None:
-        raise ExpectedError("`%s' title %d already used" % (me.fn, title))
-      else:
-        raise ExpectedError("`%s' title %d chapter %d already used" %
-                              (me.fn, title, chapter))
-    if chapter is not None: me.used_chapters.add((title, chapter))
+      suffix = "#%d:%d-%d:%d" % (title, start_chapter, title, end_chapter - 1)
+    if end_chapter is not None:
+      keys = [(title, ch) for ch in range(start_chapter, end_chapter)]
+      set = me.used_chapters
+    else:
+      keys, set = [title], me.used_titles
+    for k in keys:
+      if k in set:
+        if title == "-":
+          raise ExpectedError("`%s' already used" % me.fn)
+        elif end_chapter is None:
+          raise ExpectedError("`%s' title %d already used" % (me.fn, title))
+        else:
+          raise ExpectedError("`%s' title %d chapter %d already used" %
+                              (me.fn, title, k[1]))
+    if end_chapter is not None:
+      for ch in range(start_chapter, end_chapter):
+        me.used_chapters.add((title, ch))
     return me.PREFIX + ROOT + urlencode(me.fn) + suffix
 
 class VideoDisc (Source):
@@ -262,15 +272,15 @@ class AudioDir (object):
 class Chapter (object):
   def __init__(me, episode, title, i):
     me.title, me.i = title, i
-    me.url = episode.source.url(episode.tno, i)
+    me.url = episode.source.url(episode.tno, i, i + 1)
 
 class Episode (object):
-  def __init__(me, season, i, neps, title, src, tno = None):
+  def __init__(me, season, i, neps, title, src, tno = None, startch = None):
     me.season = season
     me.i, me.neps, me.title = i, neps, title
     me.chapters = []
     me.source, me.tno = src, tno
-    me.url = src.url(tno)
+    me.url = src.url(tno, startch, None)
   def add_chapter(me, title, j):
     ch = Chapter(me, title, j)
     me.chapters.append(ch)
@@ -284,8 +294,8 @@ class BaseSeason (object):
     me.episodes = []
     me.implicitp = implicitp
     me.ep_i, episodes = 1, []
-  def add_episode(me, j, neps, title, src, tno):
-    ep = Episode(me, j, neps, title, src, tno)
+  def add_episode(me, j, neps, title, src, tno, startch):
+    ep = Episode(me, j, neps, title, src, tno, startch)
     me.episodes.append(ep)
     src.nuses += neps; me.ep_i += neps
     return ep
@@ -310,9 +320,9 @@ class Season (BaseSeason):
     return label
 
 class MovieSeason (BaseSeason):
-  def add_episode(me, j, neps, title, src, tno):
+  def add_episode(me, j, neps, title, src, tno, startch):
     if title is None: raise ExpectedError("movie must have a title")
-    return super().add_episode(j, neps, title, src, tno)
+    return super().add_episode(j, neps, title, src, tno, startch)
   def _eplabel(me, i, epn, title):
     return title
 
@@ -492,7 +502,7 @@ class EpisodeListParser (object):
   def _process_episode(me, ww):
 
     opts = ww.nextword(); check(opts is not None, "missing title/options")
-    ti = None; sname = None; neps = 1; epi = None
+    ti = None; sname = None; neps = 1; epi = None; ch = None
     for k, v in me._keyvals(opts):
       if k is None:
         if v.isdigit(): ti = int(v)
@@ -501,6 +511,7 @@ class EpisodeListParser (object):
       elif k == "s": sname = v
       elif k == "n": neps = getint(v)
       elif k == "ep": epi = getint(v)
+      elif k == "ch": ch = getint(v)
       else: raise ExpectedError("unknown episode option `%s'" % k)
     check(ti is not None, "missing title number")
     series = me._get_series(sname)
@@ -530,7 +541,7 @@ class EpisodeListParser (object):
                      "episode %d.%d not found in video dir `%s'" %
                        (season.i, season.ep_i, dir.dir))
 
-    episode = season.add_episode(epi, neps, title, src, ti)
+    episode = season.add_episode(epi, neps, title, src, ti, ch)
     me._pl.add_episode(episode)
     me._cur_episode = episode
 
index 8b29efc..a56a264 100644 (file)
@@ -1,95 +1,95 @@
 #EXTM3U
 
 #EXTINF:0,,1.1. Whither Canada?
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D01.%20E01%e2%80%9305.iso#2
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D01.%20E01%e2%80%9305.iso#2:2
 #EXTINF:0,,1.2. Sex and Violence
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D01.%20E01%e2%80%9305.iso#3
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D01.%20E01%e2%80%9305.iso#3:2
 #EXTINF:0,,1.3. How to Recognize Different Types of Tree from Quite a Long Way Away
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D01.%20E01%e2%80%9305.iso#4
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D01.%20E01%e2%80%9305.iso#4:2
 #EXTINF:0,,1.4. Owl-Stretching Time
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D01.%20E01%e2%80%9305.iso#5
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D01.%20E01%e2%80%9305.iso#5:2
 #EXTINF:0,,1.5. Man's Crisis of Identity in the Latter Half of the Twentieth Century
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D01.%20E01%e2%80%9305.iso#6
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D01.%20E01%e2%80%9305.iso#6:2
 #EXTINF:0,,1.6. It's the Arts
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D02.%20E06%e2%80%9310.iso#2
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D02.%20E06%e2%80%9310.iso#2:2
 #EXTINF:0,,1.7. You're No Fun Any More
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D02.%20E06%e2%80%9310.iso#3
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D02.%20E06%e2%80%9310.iso#3:2
 #EXTINF:0,,1.8. Full Frontal Nudity
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D02.%20E06%e2%80%9310.iso#4
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D02.%20E06%e2%80%9310.iso#4:2
 #EXTINF:0,,1.9. The Ant, an Introduction
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D02.%20E06%e2%80%9310.iso#5
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D02.%20E06%e2%80%9310.iso#5:2
 #EXTINF:0,,1.10. Untitled
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D02.%20E06%e2%80%9310.iso#6
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D02.%20E06%e2%80%9310.iso#6:2
 #EXTINF:0,,1.11. The Royal Philharmonic Orchestra Goes to the Bathroom
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D03.%20E11%e2%80%9313.iso#2
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D03.%20E11%e2%80%9313.iso#2:2
 #EXTINF:0,,1.12. The Naked Ant
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D03.%20E11%e2%80%9313.iso#3
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D03.%20E11%e2%80%9313.iso#3:2
 #EXTINF:0,,1.13. Intermission
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D03.%20E11%e2%80%9313.iso#4
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S01D03.%20E11%e2%80%9313.iso#4:2
 
 #EXTINF:0,,2.1. ‘Face the Press’
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D01.%20E01%e2%80%9305.iso#2
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D01.%20E01%e2%80%9305.iso#2:2
 #EXTINF:0,,2.2. The Spanish Inquisition
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D01.%20E01%e2%80%9305.iso#3
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D01.%20E01%e2%80%9305.iso#3:2
 #EXTINF:0,,2.3. Déjà Vu
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D01.%20E01%e2%80%9305.iso#4
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D01.%20E01%e2%80%9305.iso#4:2
 #EXTINF:0,,2.4. The Buzz Aldrin Show
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D01.%20E01%e2%80%9305.iso#5
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D01.%20E01%e2%80%9305.iso#5:2
 #EXTINF:0,,2.5. Live from the Grill-o-mat
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D01.%20E01%e2%80%9305.iso#6
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D01.%20E01%e2%80%9305.iso#6:2
 #EXTINF:0,,2.6. It's a Living
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D02.%20E06%e2%80%9310.iso#2
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D02.%20E06%e2%80%9310.iso#2:2
 #EXTINF:0,,2.7. The Attila the Hun Show
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D02.%20E06%e2%80%9310.iso#3
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D02.%20E06%e2%80%9310.iso#3:2
 #EXTINF:0,,2.8. Archæology Today
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D02.%20E06%e2%80%9310.iso#4
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D02.%20E06%e2%80%9310.iso#4:2
 #EXTINF:0,,2.9. How to Recognize Different Parts of the Body
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D02.%20E06%e2%80%9310.iso#5
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D02.%20E06%e2%80%9310.iso#5:2
 #EXTINF:0,,2.10. Scott of the Antarctic
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D02.%20E06%e2%80%9310.iso#6
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D02.%20E06%e2%80%9310.iso#6:2
 #EXTINF:0,,2.11. How Not to Be Seen
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D03.%20E11%e2%80%9313.iso#2
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D03.%20E11%e2%80%9313.iso#2:2
 #EXTINF:0,,2.12. Spam
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D03.%20E11%e2%80%9313.iso#3
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D03.%20E11%e2%80%9313.iso#3:2
 #EXTINF:0,,2.13. Royal Episode 13
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D03.%20E11%e2%80%9313.iso#4
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S02D03.%20E11%e2%80%9313.iso#4:2
 
 #EXTINF:0,,3.1. Whicker's World
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D01.%20E01%e2%80%9305.iso#2
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D01.%20E01%e2%80%9305.iso#2:2
 #EXTINF:0,,3.2. Mr. and Mrs. Brian Norris' Ford Popular
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D01.%20E01%e2%80%9305.iso#3
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D01.%20E01%e2%80%9305.iso#3:2
 #EXTINF:0,,3.3. The Money Programme
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D01.%20E01%e2%80%9305.iso#4
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D01.%20E01%e2%80%9305.iso#4:2
 #EXTINF:0,,3.4. Blood, Devastation, Death, War and Horror
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D01.%20E01%e2%80%9305.iso#5
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D01.%20E01%e2%80%9305.iso#5:2
 #EXTINF:0,,3.5. The All-England Summarize Proust Competition
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D01.%20E01%e2%80%9305.iso#6
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D01.%20E01%e2%80%9305.iso#6:2
 #EXTINF:0,,3.6. The War Against Pornography
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D02.%20E06%e2%80%9310.iso#2
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D02.%20E06%e2%80%9310.iso#2:2
 #EXTINF:0,,3.7. Salad Days
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D02.%20E06%e2%80%9310.iso#3
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D02.%20E06%e2%80%9310.iso#3:2
 #EXTINF:0,,3.8. The Cycling Tour
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D02.%20E06%e2%80%9310.iso#4
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D02.%20E06%e2%80%9310.iso#4:2
 #EXTINF:0,,3.9. The Nude Organist
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D02.%20E06%e2%80%9310.iso#5
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D02.%20E06%e2%80%9310.iso#5:2
 #EXTINF:0,,3.10. E. Henry Tripshaw's Disease
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D02.%20E06%e2%80%9310.iso#6
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D02.%20E06%e2%80%9310.iso#6:2
 #EXTINF:0,,3.11. Dennis Moore
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D03.%20E11%e2%80%9313.iso#2
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D03.%20E11%e2%80%9313.iso#2:2
 #EXTINF:0,,3.12. A Book at Bedtime
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D03.%20E11%e2%80%9313.iso#3
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D03.%20E11%e2%80%9313.iso#3:2
 #EXTINF:0,,3.13. Grandstand
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D03.%20E11%e2%80%9313.iso#4
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S03D03.%20E11%e2%80%9313.iso#4:2
 
 #EXTINF:0,,4.1. The Golden Age of Ballooning
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S04D01.%20E01%e2%80%9306.iso#2
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S04D01.%20E01%e2%80%9306.iso#2:2
 #EXTINF:0,,4.2. Michael Ellis
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S04D01.%20E01%e2%80%9306.iso#3
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S04D01.%20E01%e2%80%9306.iso#3:2
 #EXTINF:0,,4.3. Light Entertainment War
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S04D01.%20E01%e2%80%9306.iso#4
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S04D01.%20E01%e2%80%9306.iso#4:2
 #EXTINF:0,,4.4. Hamlet
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S04D01.%20E01%e2%80%9306.iso#5
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S04D01.%20E01%e2%80%9306.iso#5:2
 #EXTINF:0,,4.5. Mr Neutron
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S04D01.%20E01%e2%80%9306.iso#6
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S04D01.%20E01%e2%80%9306.iso#6:2
 #EXTINF:0,,4.6. Party Political Broadcast
-dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S04D01.%20E01%e2%80%9306.iso#7
+dvd:///mnt/dvd/archive/P/Monty%20Python%27s%20Flying%20Circus%20%28restored%29/S04D01.%20E01%e2%80%9306.iso#7:2