console.log(reg.test('0003')) // true
console.log(reg.test('1212')) // false
AviSynth(AVI合成器)是一个功能强大无比的基于avs脚本文件的视频处理与帧服务软件,建立.avs文件索引输出,还有强大的脚本滤镜功能,很多编辑软件可以支持。本文详细介绍了AviSynth的使用方法.一、如何加载插件
1.SetWorkingDir() 指定插件路径 如:
SetWorkingDir("D:\AviSynth 2.5\plugins\")
2.LoadPlugin() 加载插件 如:
LoadPlugin("VSFilter.dll") 加载字幕插件
LoadPlugin("mpeg2dec3.dll") 加载DVD的mpeg2编码器插件
LoadPlugin("mpasource.dll") 加载mp3插件
二、源媒体怎么读取
1.DirectShowSource() 万能调用 如:
DirectShowSource("e:\vob\ss.VOB")
2.AVISource() avi文件调用 如:
AVISource(e:\avi\1.avi,false)
3.MPEG2source() 这个用于解码DVD的mpeg2格式的视频 如:
MPEG2source("XXX.d2v")
4.WAVSource("e:\vob\ss.wav") 读取wave音频
5.AC3Source("e:\vob\ss.ac3") 读取ac3音频
6.MPASource("e:\vob\ss.mp3") 读取mp3音频
7.Convertfps=true 转换帧率 如:
DirectShowSource("e:\vob\ss.vob",Conertfps=true) 表示不指定帧率,适用于RMVB、WMV
注:WAVSource和AVISource是属于核心脚本,无须读取插件,但AC3Source和MPASource需要读取AC3Source和MPASource插件
DirectShowSource的读取需要安装各种音频和视频的解码器
三、Crop()、LanczosResize()、SimpleResize()、AddBorders() 裁黑边、调整大小、调整大小、加黑边
1.Crop() 裁黑边 (左,上,长,宽) 如:
Crop(8,0,704,480) 左右各切去8像素,上下各切去0像素 原分辨率720*480
2.LanczosResize() 调整大小 (长,宽) 画质锐利、真实,适合普通电影 如:
LanczosResize(640,480)
3.SimpleResize() 调整大小 (长,宽) 画质柔和,适合动画 如:
SimpleResize(640,480)
4.AddBorders() 加黑边 (左,上,右,下) 如:
AddBorders(0,64,0,64)
四、画面滤镜
1.Levels() 层次 亮度、对比度(1.3~2之间较合适)、Gamma值(调节画面亮暗)如:
Levels(0,1.5,255,0,255)
2.Tweak() 调整 色度、饱和度、亮度、对比度
色度:-180.0~180.0 默认0.0 正数趋向红色,负数趋向绿色
饱和度:0.0~10.0 默认1.0 0.0为黑白
亮度:-255.0~255.0 默认0.0 一般调节在0~30之间,以15~20为宜
对比度:0.0~10.0 默认1.0 如:
Tweak(0,1,20,1)
3.FadeIn()、FadeOut() 淡入、淡出 (帧)如:
FadeIn(24)、FadeOut(24)
4.Trim() 截取 某段影片 (开始帧,结束帧)如:
Trim(240,480)
五、声音滤镜
1.AudioDub() 合并影音 (视频,音频)如:
Video=AVISource("xxx.avi",False,"YUY2") False为关闭视频中的音频 YUY2为色彩模式
Audio=WAVSource("xxx.wav")
AudioDub(Video,Audio)
2.GetChannel()、GetLeftChannel()、GetRightChannel() 获取声道 如:
Stereo=WavSource("test.wav")
Return GetChannel(stereo) 返回test.wav的左声道
Stereo=WavSource("test.wav")
Return GetLeftChannel(stereo) 返回test.wav的声道
3.DelayAudio() 延迟声音 由于从VOB里分离的AC3通常有延迟,所以用Azid转码得到的WAV也有延迟,在用AudioDub合并时就需要加上这个延迟 如:
WAVSource("test.wav").DelayAuido(0.5) 把test.wav延迟0.5秒
DelayAudio(wavsource("text.wav"),-30) 把test.wav延迟30毫秒 +表示提前
4.ResampleAudio() 音频重新采样 如:
WAVSource("text.wav").ResampleAudio(48000) 重新采样率48000Hz
5.AmplifydB() 声道音量缩放 如:
AmplifydB(WAVSource("text.wav"),4,-3) 左声道音量放大4dB,右声道音量减小3dB
AmplifydB(WAVSource("text.wav"),4,0,-3) 左声道音量放大4dB,中声道音量放大0dB,右声道音量减小3dB
6.MergeChannels() 组合左、右声道 如:
Left=WAVSource("C:\1.wav").GetLeftChannel
Right=WAVSource("C:\2.wav").GetRightChannel
MergeChannels(Left,Right)
六、字幕滤镜
1.VobSub() Sub字幕 将字幕的2个文件test.idx和test.sub放在同一个目录下 如:
LoadPlugin("VobSub.dll")
VobSub("test")或VobSub("e:\vob\ test.idx")
2.TextSub() SSA和ASS字幕 如:
LoadPlugin("TextSub.vdf")
TextSub("h:\avs\jrvs.ssa") 加载水印文本
LoadPlugin("VSFilter.dll")
TextSub("F:\DVD\js60\js601.srt") 加载srt字幕
七、色彩模式转换
1.ConvertToRGB32、ConvertToRGB24、ConvertToRGB、ConvertToYUY2、ConvertToYV12 如:
AVISource("text.avi","YUY2")=AVISoerce("text.avi").ConvertToYUY2
八、其它虑镜
1.截图 连续截图、截取特定Frame 格式bmp,、dds、jpg/jpe/jpeg、pal、pcx 如:
DirectShowSource("E:\VIDEO\text.mp4",fps=23.970).ConvertToRGB32
trim(1,10)
ImageWriter("D:\ever\",0,0,"jpg") 连续截图 截取影片选段中的第0帧到第9帧图像(全部帧)
DirectShowSource("E:\VIDEO\text.rmvb",convertfps=true).ConvertToRGB24
trim(1,10)
ImageWriter("D:\ever\",3,7,"jpg") 连续截图 截取影片选段中的第4帧到第8帧图像
DirectShowSource("E:\VIDEO\text.mp4",fps=23.970).ConvertToRGB
trim(10,10)
ImageWriter("D:\ever\",0,0,"jpg") 截取特定Frame 截取整个影片的第11帧
DirectShowSource("E:\VIDEO\text.rmvb",convertfps=true).ConvertToRGB24
trim(1,10)
ImageWriter("D:\ever\",4,4,"jpg") 截取特定Frame 截取影片选段中的第5帧(整个影片的第6帧)
九、常见外置滤镜
(1)源文件滤镜
1.MPEG2Dec 读取DVD2AVI产生d2v工程文件,内建去除Noise的TemporalSmoother 如:
LoadPlugin("MPEG2Dec.dll")
MPEG2Source("test.d2v")
2.MPEG2Dec2 支持P4的SSE2指令集,用文本编辑工具打开d2v,把iDCT_Algorithm=?改成5 速度快,效果好 如:
LoadPlugin("MPEG2Dec2.dll")
MPEG2Source("test.d2v")
3.MPEG2Dec3 加入Nic的图像后处理(PP),一定程度减少Noise,好像除了P4的SSE2外,还加入了AMD的3D Now!优化,目前还在开发中 如:
LoadPlugin("MPEG2Dec3.dll")
MPEG2Source("test.d2v",CPU=4) CPU=4开启PP模式
(2)处理滤镜
1.ColorYUY2 颜色补偿 如:
LoadPlugin("ColorYUY2.dll")
ColorYUY2(0,10,0,10,0,0,0,0,0)
2.ChangeFPS() 改变帧率 如:
ChangeFPS(23.976) 数值12、15、20、23.976、24、25、29.970、30
3.UnDot() 消除噪点 可用一个或多个,可连用 如:
LoadPlugin("UnDot.dll")
DirectShowSource("test.avi")
UnDot()
LanczosResize(480,272)
UnDot()
LoadPlugin("UnDot.dll")
DirectShowSource("test.avi")
UnDot().UnDot().UnDot().UnDot()
4.KenKunNR() 降噪 threshold=1 to 3,数值越大,强度越大 如:
LoadPlugin("WarpSharp.dll")
KenKunNR(threshold=1)
5.FluxSmooth() 柔化 兼有降噪 降噪作用稍强于UnDot() 如:
LoadPlugin("FluxSmooth.dll")
FluxSmooth(5,7) 一般使用默认(5,7)
6.SpatialSoften() 空间轴柔化 (柔化程度,亮度域值,色彩域值)如:
SpatialSoften (4,8,8) 柔化程度数值不要太大,2-5之间,亮度域值、色彩域值需测试调节
7.TemporalSoften() 时间轴柔化 如:
TemporalSoften(2,3,3,mode=2,scenechange=6) 一般使用这个参数
8.Convolution3D() 3D柔化 一般动画用animeHQ,电影用movieHQ 如:
LoadPlugin("Convolution3d.dll")
Convolution3D("movieHQ") 电影
Convolution3D("animeHQ") 动画
9.Deen() 锐化 兼有降噪 如:
LoadPlugin("deen.dll")
Deen("c2d",2,3,3) 较轻
Deen("a3d",3,3,1,3) 较轻
Deen("c2d",2,6,6) 中等
Deen("a3d",3,6,1,6) 中等
Deen("c2d",2,10,12) 强力
Deen("a3d",3,10,1,12) 强力
10.Sharpen() 锐化 数值越大,效果越强 如:
Sharpen(0.2) 一般取0.2~0.3
11.WarpSharp() 锐化 主要改动depth、bump两个数值 如:
LoadPlugin("WarpSharp.dll")
WarpSharp(depth=30,blur=2,bump=40,cubic=-0.6) 越下面的线条越细
WarpSharp(depth=40,blur=2,bump=60,cubic=-0.6)
WarpSharp(depth=60,blur=2,bump=96,cubic=-0.6) 全屏的时候,明显感觉出锯齿
12.Blur() 模糊 参数范围-1.0~1.58 负数为清晰 可以连续加载,可以结合MergeChroma或MergeLuma使用 如:
Blur(0,1).Blur(0,1)
MergeLuma(Blur(0,1)Blur(0,1))Blur(-1) 相当于锐化滤镜
Blur(-0.9,1) 水平清晰,竖直模糊 竖直模糊更具有线条感
Blur(1.3,-0.7) 水品模糊,竖直清晰
13.柔化滤镜可以参考一些自动生成的模板 片源不好就按需选用,尽量少用,或者不用 如:
little Noise
TemporalSoften(2,3,3,mode=2,scenechange=6)
MergeChroma(blur(1.3))=MergeLuma(blur(1.0))
FluxSmooth(5,7)
Medium Noise
TemporalSoften(3,5,5,mode=2,scenechange=10)
Convolution3D("moviehq")
FluxSmooth(7,7)
Heavy Noise
Temporalsoften(4,8,8,mode=2,scenechange=10)
Convolution3D("movielq")
FluxSmooth(10,15)
(3)交错滤镜
1.Decomb 包含IVTC、Deinterlace滤镜
IVTC(Inverse Telecine) 将DVD或VCD记录的29.976fps(NTSC)或25fps(PAL)的隔行信号还原为胶片的23.976fps的逐行信号,可有效消除影片的“拉丝(Interlace)”现象、平滑减少每秒内的帧数,以获得画面质量与码流的最佳比例
Deinterlace反交错,恢复逐行扫瞄图像 参数如:
Guide 0~2 默认0 NTSC用1,PAL用2,可以提高IVTC准确度
Gthresh 0~100 默认15 控制区分不同帧的程度
Post 默认true 用来处理IVTC遗漏的细节,使画面略微模糊
Threshold 0~255 默认15 控制post的程度
Dthreshold 0~255 默认9 控制threshold判定IVTC遗漏的程度
Blend 默认true 在交错画面用渲染来替代填充
Chroma 默认false 在交错画面的亮度色度调整
Cycle 2~25 默认5 每n帧删除1帧,NTSC选5,PAL选25
Mode 0~2 默认2
Mode=0 对Cycle里最相近的帧不进行处理
Mode=1 对Cycle里最相近的帧进行处理,用于处理混合帧速
Mode=2 在一个很长的范围里进行帧对比,可以正确处理动画里由8帧或12帧复制为29.97帧的情况
Threshold 默认0 控制mode=1时的处理重复帧的程度,Threshold默认100,控制mode=2时的处理重复帧的程度
Quality 0~3 默认2 采样和色度的质量,与速度成反比 如:
LoadPlugin("Decomb.dll")
Telecide(Guide=1,Gthresh=50,Chroma=True,Quality=3,Post=false)
Decimate(cycle=5) NTSC 3:2 PullDown
LoadPlugin("Decomb.dll")
Telecide(Guide=1,Gthresh=50,Chroma=True,Quality=3,Post=false)
Decimate(Cycle=5,Mode=2) NTSC Progressive和Interlaced混合
LoadPlugin("Decomb.dll")
Telecide(Guide=2,Gthresh=50,Chroma=True,Quality=3,Post=false)
Decimate(Cycle=25) PAL
十、实例
(一)截边、改变分辨率
Avisource("H:\xx.avi").crop(5,20,630,440).lanczosresize(640,352) Corp 与 Lanczosresize 两者顺序不能变
Corp切黑边,把一个640*480分辨率的片源,左右各切去5,上下各切去20,数值为(5,20,630,440)<左,上,长,宽>Lanczosresize 改变分辨率 (长,宽)
压RMVB如要改小分辨率的话建议:704*396的片源用576*324,640*480的片源用512*384 尤其是DVD转RMVB,通常拷贝出来的VOB都带有大片黑边,一定要切黑边否则压时浪费码率
另外比较保险的分辨有640*352,640*272
切边还可用 Easy Realmedia Producer(简称:ERP)里面的功能,方便一些 或是用gk里的功能,可以计算失真
用ERP打开片源>参数设置>设置裁切区域>手动调节,用鼠标拖动红色边框,Inpug Preview为预览
(二)合并输出
v1=trim(avisource("H:\RAW\武器\9.avi",false).changefps(23.976),0,767)
false关闭音频 通常 After Effects 做的特效都是无声的,所以要关闭片源音频 changeFPS(23.976)强制显示帧数 合并的前提:必需帧数统一 要截取的帧数可以用 VDM 查看
v2=trim(avisource("H:\字幕存储\武器\op.avi",false).changefps(23.976),0,225)
AE做的特效,事先用VDM得知为226帧
v3=trim(avisource("H:\RAW\武器\0.avi",false).changefps(23.976),994,0)
三个语句分别是:截取片源0~767帧、截取AE特效全部帧、截取片源994~最后帧 即是切去片源中间一段,并用 AE 特效代替
a=v1+v2+v3
Return a.textsub("H:\09.ass").textsub("H:\武器op09.ass")
若片源分辨率不一样,需统一分辨率
v1=trim(avisource("H:\RAW\wuqi\9.avi",false).changefps(23.976).lanczosresize(704,396),0,767)
最终输出结果为无声,AVI 内嵌时使用 RMVB 内嵌直接加挂音频
Loadplugin("H:\plugin\mpasource.dll")
v4=mpasource("H:\wav\武器\09.mp3")
Audiodub(a,v4)
注:这样加载的音频在压 RMVB 时,音频设置最好不用 RA10 PLUS 用 RA10 PLUS.48Kbps压出来音频头一两分钟是无音的,RA8 没问题
120帧的片源的截切
强制显示23.976帧,再用 VDM 打开看帧序号 合并时 AE 特效也要用这个帧率 AVS 切广告再合并AE特效
因牵扯到音频,所以得先处理音频
如:0~100帧是AE特效,无声 300~350是广告 切了广告的部分再合并AE特效,视频部分完成
因 AE 特效无声,音频就要另写一脚本提取 即将原片源的广告切除的脚本,不禁声音,然后用 VDM 打开,保存 WAV 音频
120帧的片源的压缩
直接强制帧数:Changefps(23.976) 另一个:Selectevety(5,0)
公司项目中需要显示订单合同PDF文件。正常情况下,加载pdf文件直接通过UIWebView或者WKWebView就可以。不过实际情况中,PDF文件如果存在 电子签名(签章) 的话,直接通过webView是无法查看到 电子签名(签章) 的。可以写个简单的demo对 http://blogs.adobe.com/security/SampleSignedPDFDocument.pdf 这个pdf文件进行查看对比:
之前直接使用WKWebview加载pdf地址来处理的,具体实现是通过远端的 pdfviewer (可以理解为web端的pdf查看页面)拼接 pdf 的url 路径来加载的,大概如下:
不过由于存在跨域问题,需要进行cookie的注入操作,并且从远端进行解析加载pdf速度一直很慢,所有想尝试其他的方法。
调研过程略...
调研相关链接:
iOS展示pdf签名时遇到的问题及解决办法
iOS实现PDF阅读功能调研
接入教程直接参照: iOS使用pdf.js打开PDF文件
参照上面的步骤介入后发现还是无法显示 电子签名(签章) 在查看 pdf.js 上的 issue 后发现有相关issue 如下:
其中 #4743 中 Osukaru 提出了解决方案:
在 src/core/annotation.js第601行(当前版本) 中
(后面查询过程中发现在 使用PDF.js如何显示pdf文件的电子签章 中也提到同样的解决办法。)
将 clone 下来的 pdf.js 中 src/core/annotation.js 文件修改后按照 iOS使用pdf.js打开PDF文件
重新构建执行
再接入到工程项目中即可,最终效果:
注意,这里没有使用上面提供的 http://blogs.adobe.com/security/SampleSignedPDFDocument.pdf 进行验证,是因为在运行过程中会crash,并抛出 WebActionDisablingCALayerDelegate willBeRemoved]: unrecognized selector sent 错误