<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://avisynth.nl/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://avisynth.nl/index.php?action=history&amp;feed=atom&amp;title=AdvancedMultiTrim</id>
		<title>AdvancedMultiTrim - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://avisynth.nl/index.php?action=history&amp;feed=atom&amp;title=AdvancedMultiTrim"/>
		<link rel="alternate" type="text/html" href="http://avisynth.nl/index.php?title=AdvancedMultiTrim&amp;action=history"/>
		<updated>2026-04-07T23:57:06Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.24</generator>

	<entry>
		<id>http://avisynth.nl/index.php?title=AdvancedMultiTrim&amp;diff=1264&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;&lt;pre&gt; /* * ADVANCED MULTI TRIM * * syntax: *     clip.advancedmultitrim(&quot;frame1,frame2,...&quot;) * or *     advancedmultitrim(clip,&quot;frame1,frame2,...&quot;) * you can use as many frame...&quot;</title>
		<link rel="alternate" type="text/html" href="http://avisynth.nl/index.php?title=AdvancedMultiTrim&amp;diff=1264&amp;oldid=prev"/>
				<updated>2013-05-12T21:00:48Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;pre&amp;gt; /* * ADVANCED MULTI TRIM * * syntax: *     clip.advancedmultitrim(&amp;quot;frame1,frame2,...&amp;quot;) * or *     advancedmultitrim(clip,&amp;quot;frame1,frame2,...&amp;quot;) * you can use as many frame...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
* ADVANCED MULTI TRIM&lt;br /&gt;
*&lt;br /&gt;
* syntax:&lt;br /&gt;
*     clip.advancedmultitrim(&amp;quot;frame1,frame2,...&amp;quot;)&lt;br /&gt;
* or&lt;br /&gt;
*     advancedmultitrim(clip,&amp;quot;frame1,frame2,...&amp;quot;)&lt;br /&gt;
* you can use as many frames as you like but the number of frames in the list must be even as they are processed in pairs&lt;br /&gt;
*&lt;br /&gt;
* clip.advancedmultitrim(&amp;quot;0,100,200,300&amp;quot;)&lt;br /&gt;
* will return frames 0 to 100 and 200 to 300&lt;br /&gt;
*&lt;br /&gt;
* the '+' flag can be used on any second frame, if present the multitrim function reads that frame number as being a forward offset from the previous frame number in the list&lt;br /&gt;
* clip.advancedmultitrim(&amp;quot;250,+100&amp;quot;)&lt;br /&gt;
* will return frames 250 to 350&lt;br /&gt;
*&lt;br /&gt;
* the '-' flag can be used of any frame number, if present it reads that frame number as being an offset from the end of the clip&lt;br /&gt;
* clip.advancedmultitrim(&amp;quot;250,-100&amp;quot;)&lt;br /&gt;
* will return frames 250 to (clip.framecount-100)&lt;br /&gt;
*&lt;br /&gt;
* clip.advancedmultitrim(&amp;quot;-1000,-500&amp;quot;)&lt;br /&gt;
* will return frames (clip.framecount-1000) to (clip.framecount-500)&lt;br /&gt;
*&lt;br /&gt;
* clip.advancedmultitrim(&amp;quot;-1000,+200&amp;quot;)&lt;br /&gt;
* will return frames (clip.framecount-1000) to ((clip.framecount-1000)+200)&lt;br /&gt;
*&lt;br /&gt;
* the '~' flag can be used on any second frame, it functions similarly to the '+' flag but offsets backwards rather than forward and will return a reversed portion of the clip&lt;br /&gt;
* clip.advancedmultitrim(&amp;quot;1000,~200&amp;quot;)&lt;br /&gt;
* will return frames 800 to 1000 in reverse&lt;br /&gt;
*&lt;br /&gt;
* Todo:&lt;br /&gt;
* this really needs cleaning up and optimizing, i suck at avisynth so if anyone is bored, let loose&lt;br /&gt;
*&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
global _advancedmultitrim = false&lt;br /&gt;
function AdvancedMultiTrim(input,string frames) {&lt;br /&gt;
	tstring = frames /*string of frames, must have an even amount*/&lt;br /&gt;
	toffset = FindStr(tstring,&amp;quot;,&amp;quot;) /*offset of the first ',' character*/&lt;br /&gt;
&lt;br /&gt;
	trimstart = LeftStr(tstring,toffset-1) /*get the first frame number*/&lt;br /&gt;
	flag = LeftStr(trimstart,1) /*get the first character*/&lt;br /&gt;
	trimstart = (flag==&amp;quot;-&amp;quot;||flag==&amp;quot;+&amp;quot;||flag==&amp;quot;~&amp;quot;) ? RightStr(trimstart,StrLen(trimstart)-1): trimstart /* if a flag is present, remove it from the frame string */&lt;br /&gt;
	trimstart = StrToInt(trimstart) /*convert to integer*/&lt;br /&gt;
	trimstart = flag==&amp;quot;-&amp;quot; ? (input.framecount-trimstart) : trimstart /* process frame for '-' flag */&lt;br /&gt;
&lt;br /&gt;
	tstring = RightStr(tstring,StrLen(tstring)-toffset) /*remove the first frame and seperator (return everything right of the first ',')*/&lt;br /&gt;
	toffset = FindStr(tstring,&amp;quot;,&amp;quot;) /*offset of the first ',' character*/&lt;br /&gt;
&lt;br /&gt;
	trimend = toffset==0 ? tstring : LeftStr(tstring,toffset-1) /*find the second frame number*/&lt;br /&gt;
	flag = LeftStr(trimend,1) /*get the first character*/&lt;br /&gt;
	trimend = (flag==&amp;quot;-&amp;quot;||flag==&amp;quot;+&amp;quot;||flag==&amp;quot;~&amp;quot;) ? RightStr(trimend,StrLen(trimend)-1) : trimend /* if a flag is present, remove it from the frame string */&lt;br /&gt;
	trimend = StrToInt(trimend) /*convert to integer*/&lt;br /&gt;
	trimend = flag==&amp;quot;-&amp;quot; ? (input.framecount-trimend) : trimend /* process frame for '-' flag */&lt;br /&gt;
	trimend = flag==&amp;quot;+&amp;quot; ? (trimstart+trimend) : trimend /* process frame for '+' flag */&lt;br /&gt;
	trimend = flag==&amp;quot;~&amp;quot; ? (trimstart-trimend) : trimend /* process frame for '~' flag */&lt;br /&gt;
&lt;br /&gt;
	tstring = toffset==0 ? &amp;quot;&amp;quot; : RightStr(tstring,StrLen(tstring)-toffset)&lt;br /&gt;
&lt;br /&gt;
	segment = flag==&amp;quot;~&amp;quot; ? input.trim(trimend,trimstart).reverse() : input.trim(trimstart,trimend) /* find segment to trim, process reversing for '~' flag here */&lt;br /&gt;
&lt;br /&gt;
	global _advancedmultitrim = IsClip(_advancedmultitrim) ? _advancedmultitrim++segment : segment&lt;br /&gt;
&lt;br /&gt;
	return toffset==0 ? _advancedmultitrim : AdvancedMultiTrim(input,tstring)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function StrToInt(string n){&lt;br /&gt;
	return isint(eval(n)) ? int(eval(n)) : 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Back to [[Shared functions]].&lt;br /&gt;
[[Category:Shared functions]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>