// ranges: ranges in seconds sS ffmpeg_makeSpliceFilter(L ranges) { new LS out; int i = 0; fOr (DoubleRange r : ranges) { int lbl = ++i; S start = ffmpeg_formatSeconds(r.start); S end = ffmpeg_formatSeconds(r.end); out.add("[0:v]trim=start=" + start + ":end=" + end + ",setpts=PTS-STARTPTS[v" + lbl + "]"); out.add("[0:a]atrim=start=" + start + ":end=" + end + ",asetpts=PTS-STARTPTS[a" + lbl + "]"); } out.add(joinMap(iota(i), j -> "[v" + j + "]") + "concat[outv]"); out.add(joinMap(iota(i), j -> "[a" + j + "]") + "concat=v=0:a=1[outa]"); ret joinWithSemicolon(out); }