转自
http://bbs.ktxp.com/topic.cgi?forum=108&topic=96&show=25 作者:singblue
关于在影片里加入图片:
其实这个也不是什么新东西,记得以前weilai兄已经有提到过,只是一下找不到那帖所在了,所以在这里重新复习一下,也算是为我那个字幕教程中一直没有解决的关于加载图片的问题的回答吧。
首先,我要说的是:利用SSA或ASS来加载图片,对图片格式有着很严格的要求,好像是要求图片要是“binary format”的,binary format是什么东西我也搞不清楚了(惭愧惭愧)...
然后,继续刚才的话题,加载图片,其实也可以通过VirtualDub/VirtualDubMod来实现:具体操作就是在Video选单中选择Filter然后Add,选择其内置的那个Logo滤镜,[图1]然后加载你想要的图片(*.BMP或*.TGA格式),里面有些简单的设置,我就不再一一说明了,只需要注意一点,如果要对加载的图片设置Alpha值(透明度),首先要把影片的色彩空间改成RGB32。[见图2]
接着,就是我这帖主要想说的内容了:刚才说利用VD/VDM内置的LOGO滤镜就能完成图片加载,但是有一个遗憾就是——VD/VDM不能进行REAL的编码操作,所以要是有朋友想在压制REAL格式时添加图片LOGO就不能用VD/VDM内置的滤镜了。要解决这个问题也不难,利用AVS和外置的VD滤镜logo.vdf就能实现在AVS中加载图片,然后再压制这个AVS就能达到目的。
先给一个简单的AVS脚本的例子:
--------------------------------------------------------------------------------------------------
######################定义LOGO.VDF所在文件夹########################
global VirtualDub_plugin_directory = "E:\DVD2RM\Filter"
##########################加载待处理的影片##########################
AVISource("[OP][Memories Off 想い出にかわる君][Replaymachine].avi")
############################定义“VD_Logo”函数####################
function VD_Logo(clip clip, int "x", int "y", int "alpha", bool "transparent",
\ int "xr", int "xg", int "xb", int "tolerance", string "filename",
\ bool "animate", int "start", int "duration", int "loops",
\ int "fadeinlen", int "fadeoutend", int "fadeoutlen")
{
LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\logo.vdf", "_VD_Logo", 1)
return clip._VD_Logo(default(x,0), default(y,0), default(alpha,128),
\ default(transparent,true)?1:0, default(xr,0), default(xg,0), default(xb,255),
\ default(tolerance,0), default(filename,VirtualDub_plugin_directory+"\Gundam SEED.bmp"),
\ default(animate,false)?1:0, default(start,0), default(duration,0), default(loops,0),
\ default(fadeinlen,0), default(fadeoutend,200), default(fadeoutlen,0))
}
###########################调用VD_Logo函数#########################
ConvertToRGB()
VD_logo(480, 10, 255, true, 255, 255, 255, 70, "Memories Off.bmp", true, 70, 0, 0, 50, 243, 50)
##################################################################
上面这个AVS例子中的注释已经说明了该脚本各部分的作用了,下面我再对VD_Logo函数的参数再具体说一下:
function VD_Logo(clip clip, int "x", int "y", int "alpha", bool "transparent",
\ int "xr", int "xg", int "xb", int "tolerance", string "filename",
\ bool "animate", int "start", int "duration", int "loops",
\ int "fadeinlen", int "fadeoutend", int "fadeoutlen")
这个是在函数定义时声明的格式,从中我们可以看到其中每个参数的具体含义,为了更形象,我还是在例子中说明:
-------------------------------------------------------------------
VD_logo(480, 10, 255, true, 255, 255, 255, 70, "bz.bmp", true, 20, 0, 0, 50, 243, 50)
480,10:
图片出现在影片中的X、Y坐标位置;
255:
图片的ALPHA值,即透明度,0为透明,255为不透明,变化范围:0--255 (这个跟SSA字幕中刚好相反)
true, 255, 255, 255, 70:
设置图片的透明通道: true/false 打开/关闭此功能;255, 255, 255 分别对应红(R)、绿(G)、蓝(B)三色;7 为容差我理解为一些图像处理软件中(如PS)阀值的设定;本例中因为我使用的图片的背景是白色的,而我不想要这个白色背景,所以用白色透明通道使其变为透明色了;
"bz.bmp":
这个没什么多说的,就是我加载的图片,(注意如果图片跟AVS不在同一目录下,要把其全路径都写下来);
true:
这个true/false是用来打开序列的静态图片组成的动态效果的设置,序列图片就是这样的形式:Recu0001.bmp ,Recu0002.bmp ,Recu0003.bmp .....RecuXXXX.bmp,只要打开了动态效果,那么AVS就会自动地从第一张图片开始加载这个图片序列;
20:
图片出现时所在影片的帧数;
0:
原函数定义为int "duration",持续时间(是针对图像序列每张图片持续的时间);
0:
原函数定义为int "loops"为循环次数(针对对图像序列);
50:
定义为淡入动作所持续的帧数长度;
243:
图片消失时所在影片的帧数;
50:
定义为淡出动作所持续的帧数长度;
以上就是所有参数的具体含义。
另外,在使用的时候的注意事项:
因为图片只能在RGB色彩空间进行加载,所以必须使用ConvertToRGB()来转换色彩空间;
加载图片时必须保证是24位色的位图(*.BMP),并且该图片要存在,否则输出的图像将会是黑屏;
已知问题:如果改变帧速率,可能造成压制出来的影片是黑屏。