this leaks on error below. Might also be better to have some sort of table driven approach to parsing:

static struct {
const char *ext;
void parse ( const char *path, cut_list_t *cuts );
} cut_parsers[] = {
  { .ext = ".edl". .parse = dvr_parse_edl },
  { .ext = ".txt". .parse = dvr_parse_comskip },
}

And just iterate over that list etc... That way adding a new parser for a new format will be a bit simpler.

Anyway that's just a thought