[mythtv-users] gopdit, for MPEG-2 -> MPEG-2 cutting

Cory Papenfuss papenfuss at juneau.me.vt.edu
Fri Mar 4 12:46:45 UTC 2005

>  http://home.t-online.de/home/rhtm.e/gopdit/
> I've seen this program mentioned once here, but think maybe it
> deserves highlighting, as it seems to answer a frequent question:
> how to quickly cut out commercials from an MPEG-2 stream without
> re-encoding the whole thing or losing audio/visual sync (as happens
> with avidemux).
 	There's still a bit of unknown here.  When the Hauppauge card 
glitches (as is more often then case when trying to record from a tape, 
rather than from cable/broadcast), it will fix a broken frame by adjusting 
the PTS/DTS.  That is why avidemux breaks.... it can only handle a single, 
static offset between A and V.... changing the PTS/DTS mid-stream isn't 
handled correctly by avidemux and sync breaks.  I haven't looked through 
the code of gopdit enough yet, but from talking with the author, I think 
that nothing is done to correct the big "time-hole" left when a commercial 
is cut out.  Most players will play it anyway, but trying to edit a 
cut file might not work.  Replex seemed to glue it back together, 

> Gopdit does this by cutting at GOP boundaries, and doing no
> re-encoding.  The author uses it specifically for streams from ATI
> and Hauppauge encoders.  I tested it with something I recorded using
> "cat /dev/video0 > file.mpg" using my PVR-350, and the trimmed file
> had no a/v sync problems.
 	There's more issues here.  As gopdit docs claim, if the GOPs are 
closed, it works better than if they're open.  I'm still not completely 
sure how the streams out of the PVR-250, but I *have* seen both open 
(ivtv-0.1.9 capture) and closed (ivtv-0.1.100zz or whatever).  Gopdit 
marks the cut GOPS (correctly) as "broken" according to the MPEG2 spec.

> The 0.2.3-pre experimental version can be run non-interactively (no
> GUI) and take the cutlist from a file.  So this could be used to
> automatically cut commercials if we can figure out how to translate
> myth's cutlist info into one of the formats that gopdit understands.
 	I mentioned to the author that there was a need for this a few 
weeks ago and he pounded out the gui-less option.  He said it was still 
rather raw, but it does appear to function.  The nice thing is you can run 
the GUI to set the ~/.gopditrc options, then run it without X to do some 

> I've attached the gopdit edit list format info below;  can
> someone tell me how the myth cut list is stored?  The author
> of gopdit expressed willingness to have gopdit support other
> edit list formats, but it might be simpler to get myth to
> generate one of the formats below.
 	I wasn't aware that he'd added the ability to deal with other 
cutlist formats.  That's quite good because I belive that the MythTV 
format is a combination of frame and file offset... someone correct me if 
I'm wrong.  An exported .sql of an MPEG-2 .nuv with a cutlist says 
something like this:

INSERT INTO recorded (findid, programid, recgroup, hostname, previouslyshown, lastmodified,cutlist, commflagged, starttime, autoexpire, editing, preserve, endtime, category, deletepending, originalairdate, stars, chanid, description, filesize, subtitle, bookmark, recordid, title, seriesid) VALUES
         ('0', 'EP1031150049', 'Default', 'mythtv.bogus.net', '1', '20050304072930',
'1375 -3537
19199 - 25270
39917 - 47141
62056 - 68987
77522 - 84335
110485 - 111395
', '1', '2005-02-09 06:58:00', '1', '0', '0', '2005-02-09 08:00:00', 
'Documentary', '0', '00
00-00-00', '0', '1049', 'The Alaska pipeline carries crude oil 800 miles 
across the state.',
  '1669148608', 'The Alaskan Oil Pipeline', NULL, '703', 'Modern Marvels', 

<The big SNIP>

       ('1373', '2005-02-09 06:58:00', '6', '1049', '300929062'),
         ('1374', '2005-02-09 06:58:00', '6', '1049', '301137958'),
         ('1375', '2005-02-09 06:58:00', '3', '1049', NULL),
         ('1375', '2005-02-09 06:58:00', '4', '1049', NULL),
         ('1375', '2005-02-09 06:58:00', '6', '1049', '301355046'),

 	If I'm not mistaken, the 1375-3537, etc are the frames in the 
cutlist, and the '301355046' is the file offset.  What I don't understand 
is that on the one hand the '6' in #1375 says it's a MARK_GOP_START = 6, 
(from programinfo.h).  It's also a MARK_BLANK_FRAME = 3 and 
MARK_COMM_START = 4.  How can it be a GOP start point on one hand, but a 
frame count in the other?

 	Anyway, I would say that all the data is there (whether it be file 
offset or frame number).  It shouldn't be a big deal to convert it into 


* Cory Papenfuss                                                        *
* Electrical Engineering candidate Ph.D. graduate student               *
* Virginia Polytechnic Institute and State University                   *

More information about the mythtv-users mailing list