『漫游』酷论坛>『影音数码技术学习交流』>[原创]在影片中加入图 ..

maomao333@2005-02-25 17:40

在影片前加入图片

静态:
引用

v1=AviSource("G:\Sample\AVI\s09.avi")
function convertToColorSpace(clip1,clip2) {
clip1 = (clip2.isRGB32() && !clip1.isRGB32()) ? clip1.convertToRGB32(): clip1
clip1 = (clip2.isRGB24() && !clip1.isRGB24()) ? clip1.convertToRGB24(): clip1
clip1 = (clip2.isYUY2() && !clip1.isYUY2()) ? clip1.convertToYuy2(): clip1
clip1 = (clip2.isYV12() && !clip1.isYV12()) ? clip1.convertToYv12(): clip1
return clip1
}
v2=imagesequence("G:\Sample\pics\p15.jpg",start=1, stop=240).assumefps(v1,true).BilinearResize(640,352).convertToColorSpace(v1)
v3=DirectShowSource("G:\Sample\AVI\s12.wav")
v4=audiodub(v2,v3)
v5=v4++v1
return v5

解说:

函数convertToColorSpace主要用来检测clip1的颜色空间,并让其与clip2保持一致

注:v2.51以前版本(v2.5)要加上函数isYv12
引用

function isYv12(clip) {
return !(clip.isRGB() || clip.isYuY2())
}


图片尺寸180*119,影片尺寸640*352

图片显示10秒,10=240/23.976

采用AlignedSplice方式合并两片段






动态:
引用

v1=AviSource("G:\Sample\AVI\s09.avi")
function convertToColorSpace(clip1,clip2) {
clip1 = (clip2.isRGB32() && !clip1.isRGB32()) ? clip1.convertToRGB32(): clip1
clip1 = (clip2.isRGB24() && !clip1.isRGB24()) ? clip1.convertToRGB24(): clip1
clip1 = (clip2.isYUY2() && !clip1.isYUY2()) ? clip1.convertToYuy2(): clip1
clip1 = (clip2.isYV12() && !clip1.isYV12()) ? clip1.convertToYv12(): clip1
return clip1
}
v2=imagesequence("G:\Sample\pics\bmp Earth\00%.2d.bmp",start=1, stop=74).Loop(3).assumefps(v1,true).BilinearResize(640,352).convertToColorSpace(v1)
v3=DirectShowSource("G:\Sample\AVI\s12.wav")
v4=audiodub(v2,v3)
v5=v4++v1
return v5

图片尺寸92*92,显示约8秒,8=(74*3)/23.976




引用

v1=AviSource("G:\Sample\AVI\s09.avi")
function convertToColorSpace(clip1,clip2) {
clip1 = (clip2.isRGB32() && !clip1.isRGB32()) ? clip1.convertToRGB32(): clip1
clip1 = (clip2.isRGB24() && !clip1.isRGB24()) ? clip1.convertToRGB24(): clip1
clip1 = (clip2.isYUY2() && !clip1.isYUY2()) ? clip1.convertToYuy2(): clip1
clip1 = (clip2.isYV12() && !clip1.isYV12()) ? clip1.convertToYv12(): clip1
return clip1
}
v2=immaread("G:\Sample\pics\p24.gif").Loop(50).assumefps(v1,true).BilinearResize(640,352).convertToColorSpace(v1)
v3=DirectShowSource("G:\Sample\AVI\s12.wav")
v4=audiodub(v2,v3)
v5=v4++v1
return v5

图片尺寸400*328,显示约12秒,12=(6*50)/23.976,这里6为gif图的单元数,这里用到了下面要说的immaread滤镜




引用

maomao333@2005-02-25 17:40

immaread滤镜(测试中)

http://e-rels.dyndns.org/downloads/immaread620.rar

supports reading over 89 major file formats!

png图
引用

LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\immaread.dll")
immaread("G:\Sample\pics\p18.png")

gif图:
引用

immaread("G:\Sample\pics\p24.gif")

如果不能获得特定的帧,打开vd/vdm加载avs



mng图(Multiple-image Network Graphics, 动态png):

安装mng的IE插件:

http://entropymine.com/jason/mng4ie/install106.html


引用

immaread("G:\Sample\pics\mng\pnglogo-grr-anim-lc.mng")



跳动的小球:


引用

immaread("G:\Sample\pics\mng\sample.mng")



包括JNG图(JPEG Network Graphics),mng格式的子集

psd图(Adobe Photoshop动态图):
引用

immaread("G:\Sample\pics\animated\d.psd")

但对psd图的每一帧不能连续读取,速度较慢

URL网络图片:
引用

immaread("http://myphoto.myrice.com/photo/671289/4643_373430.jpg")


引用

immaread("http://myphoto.myrice.com/photo/671289/4643_373441.gif")



imagemagick网络图片:
引用

immaread("magick:logo")



语法:
magick:name
name:
两种写法作用等价

图片名(样例):
granite
logo
netscape
rose
引用

maomao333@2005-02-25 17:41

由于用immaread读取gif图时出现帧不连贯的情况,所以我想了下面的办法解决:
引用

v1=CoronaSequence("G:\Sample\pics\png\%.2d.png", start=1, stop=6, fps=12).Loop (15)
v2=immaread("G:\Sample\pics\p24.gif").Loop(35).assumefps(v1,true)
return v1+v2



原始图片p24.gif



01.png,02.png......06.png是从p24.gif分解出来的原始尺寸的png图

为保v1中帧的连贯性,start取为1

p24.gif的原始帧率为12.5,但fps只能取为整数,所以取离12.5最近的12(当然也可以取13)

%.2d.png和p24.gif本身一样,所以在确定总显示时间确定的情况下,两个循环次数可任意设定:50=15+35=25+25=10+40=......

这里图片显示25秒,25=(6*(15+35))/12

这样就实现了一个gif图的自由连贯读取,至于加上声音,放在影片前,放在影片的某个位置就要用到上面所讲的^_^
引用

czbming@2005-02-25 20:18

GSpot的链接无效了,,,,
引用

maomao333@2005-02-25 20:44

官网:
http://gspot.headbands.com/download.html
引用

Conanzsw@2005-02-27 21:33

没人顶@@?.......偶顶上去:D
引用

cthunter@2005-02-27 23:51

GIF加入不错啊
引用

weilai@2005-02-28 10:55

方法還真不少
不知樓主認為哪種方法最簡單實用

P.S. 這個可以列入置頂,只是我沒這功能(權限)^^||
引用

maomao333@2005-02-28 12:24

引用
最初由 weilai 发布
方法還真不少
不知樓主認為哪種方法最簡單實用

P.S. 這個可以列入置頂,只是我沒這功能(權限)^^||


感谢weilai版!

我前面写的内容还有可以该进的地方,希望大家掌握其中的原理,例子是研究的手段都是可以变通的.


对上面所用的各种方法应从两个阶段分析:

图片读取:

CoronaSequence或ImageSequence与ImageReader,ImageSource基本相同,都能读取单一图片和图片序列
而immaread功能则更为强大,它是基于ImageMagick的图片读取技术,能读取89种以上格式,特别是它对动态图象gif,mng,psd的支持,甚至是URL图片的静,动态图(速度慢)

如果是一般的静态图片以及序列图片我推荐用CoronaSequence或ImageSequence,而且加入影片的速度(特别是序列图片)要比immaread快

如果想直接读取动态格式或网络图片,那么只有immaread可以胜任


图片加入:

对纯底色的图片,建议用ColorKeyMask,Layer

对已做好了单一遮罩图片或遮罩图片序列,可以用mask,Layer或Overlay,这两种方法基本相同,都要用到mask;只是mask,Layer是在RGB32空间运行,也就是把RGB32的源(加入的源如果不是RGB32,需要ConvertToRGB32)Layer到RGB32的源;而Overlay对加入源的颜色空间没有任何限制,运行是在YUV空间,也就是把自动在其内部将加入源转为YUV形式(也就是输出格式),所以输出的颜色空间可能与输入的颜色空间不同,但不是说为了转换颜色空间而采用Overlay,那样不仅影响质量而且影响速度.
引用

maomao333@2005-02-28 12:30

忘了说,如果是做avi,用logo.vdf最方便
引用

ccinsei@2005-02-28 19:50

这个教程真是好,方法很全,楼主辛苦了
引用

funking@2007-07-07 11:06

好厉害,,,全暴走
引用

shinjico@2007-07-07 11:15

谁又把古墓挖出来了
引用

wolfsoft@2007-07-07 12:32

古墓?有丽影么?
引用

GOD_HIKARU MK2@2007-07-07 12:57

= = 谁将罗拉推倒了OTL
引用

«123»共3页

| TOP