Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion.

Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules.

 

Go Back   Doom9's Forum > Capturing and Editing Video > Avisynth Usage

Reply
 
Thread Tools Search this Thread Display Modes
Old 10th June 2014, 20:37   #21  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 10,223
Excuse me digging up this older thread, came across it whilst searching forum and thought I could add something
that could be of use to others that view the thread.

Delete frames, no audio
Code:
avisource("d:\avs\flashtest.avi").trim(1000,-10).showframenumber

# Delete list of frames, No Audio returned

# Uncomment one of the below three lines

#FrameSel(3,5,7,reject=true)            # delete frames using direct arg frame numbers, return no audio (ranges not supported in direct arg framenos)

#FrameSel(SCmd="3;5;7",reject=true)     # delete frames using scmd string of frame numbers, return no audio (';' or Chr(10)=separator, ','=range)

                                        # del.txt = file containing eg "3"+chr(10)+"5"+chr(10)+"7"+chr(10)
#FrameSel(Cmd="del.txt",reject=true)    # delete frames using cmd file of newline separated frame numbers, return no audio
Delete frames, Audio processed
Code:
avisource("d:\avs\flashtest.avi").trim(1000,-10).showframenumber
# Delete list of frames, Audio trim/splice processed using Prune plugin (with audio fadeout/in to avoid clicks)
# Uncomment one of the below three lines

#FrameSel_CmdReWrite("Prune.txt",3,5,7,reject=true,Prune=True,range=true)# Create Prune delete frames command file using direct args frame numbers

#FrameSel_CmdReWrite("Prune.txt",SCmd="3;5;7",reject=true,Prune=True,range=true)# Create Prune delete frames command file using SCmd string of frame numbers

                                                                        # del.txt = file containing eg "3"+chr(10)+"5"+chr(10)+"7"+chr(10)
#FrameSel_CmdReWrite("Prune.txt",Cmd="del.txt",reject=true,Prune=True,range=true)# Create Prune delete frames command file using Cmd file of frame numbers

Prune(Cmd="Prune.txt",FadeSplice=True)                                  # And then delete frames, avoid clicks at splices.
FrameSel:- http://forum.doom9.org/showthread.php?t=167971

Prune:- http://forum.doom9.org/showthread.php?t=162446

EDIT: Prune Default Fade duration = 1ms, adjustable to 25ms.

EDIT: Script removed, see next post.
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???

Last edited by StainlessS; 12th June 2014 at 17:44.
StainlessS is offline   Reply With Quote
Old 11th June 2014, 23:41   #22  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 10,223
Update of EDIT to previous post.

RejectRanges, Script function to delete ranges from clip, together with audio.
Code:
Function RejectRanges(clip c,String "SCmd",String "Cmd",Bool "TrimAudio",Float "FadeMS") {
    # RejectRanges() by StainlessS. Required:- FrameSel, Prune, RT_Stats
    # Wrapper to delete frames/ranges along with audio, can supply frames/ranges in SCmd string And/Or Cmd file.
    #   The wrapper makes for easier usage of Prune() which supports up to 256 input clips, but requires a clip index,
    #   eg '3, 100,200' would specify clip 3, range 100 to 200. The wrapper does away with the necessity for the clip index as we
    #   are only using a single clip here. Prune also does not have a 'reject' arg to delete specified frames rather than select them,
    #   this wrapper also converts a list of frames to delete into a list of frames to select so that we can use Prune and its audio
    #   capability.
    #
    # SCmd: Frames/Ranges specified in String (Frames/Ranges either Chr(10) or ';' separated, infix ',' specifies range, eg 'start,end').
    # Cmd:  Frames/Ranges specified in file (one frame/range per line, comments also allowed, see FrameSel for Further info).
    # TrimAudio:
    #   True(default), deletes audio belonging to deleted frames
    #   False, returns original audio, probably out of sync.
    # FadeMS: (default 1.0 millisec). Linear Audio Fade duration at splices when TrimAudio==true, 0 = dont fade (might result in audio 'clicks/cracks').
    c
    TrimAudio=Default(TrimAudio,True)   # default true trims audio, false returns original audio (audiodubbed, as Framesel returns no audio)
    FadeMS=Float(Default(FadeMS,1.0))   # 1 millisecond linear fadeout/fadein at splices
    PruneCmd = (TrimAudio) ? "~Prune_"+RT_LocalTimeString+".txt" : ""
    (!TrimAudio)
        \ ? FrameSel(Last,scmd=SCmd,cmd=Cmd,reject=true)
        \ : FrameSel_CmdReWrite(Last,PruneCmd,scmd=SCmd,cmd=Cmd,reject=true,Prune=True,range=true)
    (TrimAudio) ? Prune(Last,Cmd=PruneCmd,FadeIn=True,FadeSplice=True,FadeOut=True,Fade=FadeMS) : NOP
    # If TrimAudio==true then delete Prune temp file, Else restore original Audio to the now audio-less clip
    (TrimAudio)
        \ ? RT_FileDelete(PruneCmd)
        \ : (c.HasAudio) ? AudioDub(c) : NOP
    Return Last
}
Client script for RejectRanges
Code:
avisource("d:\avs\flashtest.avi").trim(1000,-20).showframenumber # 20 frames

SCMD="""    # This is a comment
    1       # delete frame 1
    9       # delete frame 9
    11,15   # delete range 11 to 15
"""

# del.txt = file containing eg "3"+chr(10)+"5"+chr(10)+"7"+chr(10)
RejectRanges(scmd=SCMD,cmd="del.txt")    		# Delete frames 1 & 9, 11 to 15, and frames in del.txt 3 and 5 and 7, trim audio 1 ms fade
#RejectRanges(scmd="1;9;11,15",cmd="del.txt")           # Exactly the same as above

SelectRanges, Script function to select ranges from clip, together with audio.
Code:
Function SelectRanges(clip c,String "SCmd",String "Cmd",Bool "TrimAudio",Float "FadeMS",Bool "Ordered") {
    # SelectRanges() by StainlessS. Required:- FrameSel, Prune, RT_Stats
    # Wrapper to Select frames/ranges along with audio, can supply frames/ranges in SCmd string And/Or Cmd file.
    #   The wrapper makes for easier usage of Prune() which supports up to 256 input clips, but requires a clip index,
    #   eg '3, 100,200' would specify clip 3, range 100 to 200. The wrapper does away with the necessity for the clip index as we
    #   are only using a single clip here.
    #
    # SCmd: Frames/Ranges specified in String (Frames/Ranges either Chr(10) or ';' separated, infix ',' specifies range, eg 'start,end').
    # Cmd:  Frames/Ranges specified in file (one frame/range per line, comments allowed, see FrameSel for Further info).
    #  *** NOTE ***, If both Cmd and SCmd supplied AND Ordered == False, then will process Cmd file and then SCmd string afterwards, ie
    #    Will select ranges in Cmd file and in order specified (rather than auto ordering ranges) and then append ranges specified in
    #    SCmd string (and in order specified).
    # TrimAudio:
    #   True(default), selects audio belonging to selected frames/ranges
    #   False, returns original audio, probably out of sync (maybe totally out of whack if Ordered == false and selected ranges out of order).
    # FadeMS: (default 1.0 millisec). Linear Audio Fade duration at splices when TrimAudio==true, 0 = dont fade (might result in audio 'clicks/cracks').
    # Ordered:
    #   True(default), all frames/ranges are returned in sequencial order. Any frame specified more than once will return only 1 instance.
    #   False, All frames/Ranges are returned in specified order, Cmd processed first and then SCmd. Frames/ranges specified more than once
    #     will return multiple instances. Allows out-of-order trimming of clip, eg re-sequencing of scenes in movie.
    #
    # Does not make much sense to select individual frames with audio, best used with ranges.
    # Will coalesce individually selected adjacent frames/ranges before any Fade, ie only audio fade where sensible to do so.
    # TrimAudio==false with non Ordered selection will result in completely out of sync audio.
    c
    TrimAudio=Default(TrimAudio,True)   # default true trims audio, false returns original audio (audiodubbed, as Framesel returns no audio)
    FadeMS=Float(Default(FadeMS,1.0))   # 1 millisecond linear fadeout/fadein at splices
    Ordered=Default(Ordered,True)       # True (default) frames/ranges will be Ordered and selected only once even if specified more than once.
                                        # False, frames/ranges returned in specified order, Cmd processed 1st and then SCmd.
    PruneCmd = (TrimAudio) ? "~Prune_"+RT_LocalTimeString+".txt" : ""
    (!TrimAudio)
        \ ? FrameSel(Last,scmd=SCmd,cmd=Cmd,Ordered=Ordered)
        \ : FrameSel_CmdReWrite(Last,PruneCmd,scmd=SCmd,cmd=Cmd,Ordered=Ordered,Prune=True,range=true)
    (TrimAudio) ? Prune(Last,Cmd=PruneCmd,FadeIn=True,FadeSplice=True,FadeOut=True,Fade=FadeMS) : NOP
    # If TrimAudio==true then delete Prune temp file, Else restore original Audio to the now audio-less clip
    (TrimAudio)
        \ ? RT_FileDelete(PruneCmd)
        \ : (c.HasAudio) ? AudioDub(c) : NOP
    Return Last
}

Client script for SelectRanges
Code:
avisource("d:\avs\flashtest.avi").trim(1000,-20).showframenumber # 20 frames

SCMD="""    # This is a comment
    1,3     # Select Range 1 to 3
    9,11    # Select Range 9 to 11
    14,15   # Select Range 14 to 15
    2,5     # Select Range 2 to 5, If Ordered==True then already previously selected 1st range above (1,3) extended to 1,5
"""

ORDERED=True
SelectRanges(scmd=SCMD,Ordered=ORDERED)                      # Select SCmd ranges, trim audio 1 ms fade.
#SelectRanges(scmd="1,3;9,11;14,15;2,5",Ordered=ORDERED)     # Exactly the same as above
EDITED: Added FadeIn and FadeOut to Prune calls. (fade at beginning and end of resultant clip [same duration as FadeMS default 1ms]).

EDIT: Short thread on clicks and cracks in audio when trimming:- http://forum.doom9.org/showthread.ph...03#post1534803

See FrameSel() for full range specifications in SCmd string and Cmd file eg '4,-10' as Trim(4,-10), 10 frames starting at frame 4.
http://forum.doom9.org/showthread.php?t=167971

EDIT: Added 'Last' to FrameSel_CmdReWrite calls, make explicit that it requires a clip (otherwise might be baffling how it converts reject
commands into select commands, Last only used to access FrameCount so we know what to reject).
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???

Last edited by StainlessS; 10th December 2021 at 12:29.
StainlessS is offline   Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 15:46.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2022, vBulletin Solutions Inc.