Trim

出自NMM Doc
跳至導覽 跳至搜尋

Trim(clip clip, int first_frame, int last_frame [, bool pad_audio])

參數

Trim截取一個視頻片段中從first_frame(首幀)到last_frame(末幀)幀數(first_framelast_frame也包含在內)。如果該片段包含音頻,則音頻也會一併被截取。截取時請注意,AviSynth計算幀數從0開始,即一個片段的第一幀的編號並不是1,而是0。last_frame為0時,Trim會一直截取到視頻最後一幀。

Trim不能被用作單獨截取音頻片段。如果需要截取音頻片段,您需要首先用BlankClip生成一個空白視頻片段,再用AudioDub將音頻視頻結合,再將這個片段用Trim截取後,通過KillVideo刪除視頻部分,只留下音頻。

pad_audio (默認:true) 使音頻和視頻保持長度一致,使兩者對齊。否則在音頻比視頻短時,依然會保留一部分無聲的部分。在last_frame=0和pad_audio = false時,音頻和視頻流的結尾是沒有關聯的。

一般用例

Trim(100,0)               # 删掉前100帧,同时对齐音频,
                          # 或者说也截取也视频一样长的音频。
Trim(100,0,false)         # 删掉前100帧的音频和视频
                          # 得到的视频和音频长度没有关联。
Trim(100,-100)            # 同trim(100,199)
Trim(100,199,false)       # 音频如果比100帧长,就截取,
                          # 如果比100帧短,也不对齐。
Trim(0,-1)                # 只返回第一帧
Trim(0,100)+Trim(200,300) # 返回第0帧到第100帧和第200帧到第300帧(即删掉了第101帧到第199帧)

對視頻進行分段處理

簡單的分段處理

v  = avisource("source.avi")   #载入视频
v1 = v.trim(0   , 99)          #将视频分为v1、v2、v3三段,对v2用blur滤镜进行处理,保留v1、v3原样不动。
v2 = v.trim(100 , 1999).blur()
v3 = v.trim(2000, 0)
v1 + v2 + v3                   #将三个段落重新进行拼接。

使用對混合型視頻進行分段處理:

  1. 假設視頻0~99幀為30i(需要進行deinterlace);
  2. 100~1999幀是pulldown(需要進行IVTC);
  3. 2000幀之後全部為30p(不需要進行任何處理,直接保留原樣)。
v  = mpeg2source("source.d2v")   #载入视频
v1 = v.trim(0   , 99).nnedi3()   #对0~99帧用nnedi3进行deinterlace。
v2 = v.trim(100 , 1999).tfm(mode=3).tdecimate(mode=1).AssumeFPS(30000/1001)
                                 #用TIVTC对v2段落进行IVTC。由于IVTC之后帧率降为23.976,没办法与v1和v2直接拼接,
                                 #所以这里用AssumeFPS将v2的帧率修改为29.970(=30000/1001)。
v3 = v.trim(2000, 0)
v1 + v2 + v3                     #将三个段落重新进行拼接。

當然,視頻輸出之後,還需要寫對應的Timecode,封裝為mkv才能讓視頻正確播放。

高級分段處理

由於單純依靠Trim進行複雜的分段和拼接比較麻煩,且分段腳本較為複雜繁冗,不便於閱讀和維護,且內存占用率很高不少用戶通過自定義腳本函數的方式實現了更加方便的分段處理。 請參考:

  1. AAD腳本包中的aadtrim()函數;
  2. MYEPTools腳本包中的EPClip()或者ClipSlice()函數。
  3. ApplayRange

版本歷史

v2.56 Added pad audio.