Trim

来自NMM Doc
Lititude讨论 | 贡献2010年9月8日 (三) 08:56的版本
跳到导航 跳到搜索
可打印版不再被支持且可能有渲染错误。请更新您的浏览器书签并改用浏览器默认的打印功能。

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.