搜索 社区服务 统计排行 帮助
  • 1349阅读
  • 20回复

小菜鸟问:avi转MPG,画面的大小与字模的内嵌问题。

楼层直达
级别: 侠客
注册时间:
2003-11-04
在线时间:
0小时
发帖:
736
现有一AVI动画,画面大小是512*384


想把它变成PAL制式的MPG352*288,在原画面外加黑边,上下分别内嵌中英文字幕,但希望原画面比例不要变


就是很希望最后出来这样的效果?


有没有什么办法可以做到?
级别: 骑士
注册时间:
2004-08-24
在线时间:
0小时
发帖:
852
只看该作者 1楼 发表于: 2004-12-25
你说的是缩小+加边

video = avisource(xxxx.avi)
video = LanczosResize(video,256,192).AddBorders(48,48,48,48)
video = TextSub(video, "xxxx.ssa")
return video

[Hammer]azsd

弱字节3千,唔取1k
级别: 骑士
注册时间:
2004-08-24
在线时间:
0小时
发帖:
852
只看该作者 2楼 发表于: 2004-12-25
如果制作混合的字幕麻烦,就用2个字幕文件,加载2次字幕.

[Hammer]azsd

弱字节3千,唔取1k
级别: 侠客
注册时间:
2003-11-04
在线时间:
0小时
发帖:
736
只看该作者 3楼 发表于: 2004-12-29
是AVS语句吗?
那AVS要如何和VirtualDubMod配合起来用呢?
需要在PlugIns中复制粘贴点东东吗??
能具体一点吗?
级别: 版主
注册时间:
2001-11-21
在线时间:
0小时
发帖:
2803
只看该作者 4楼 发表于: 2004-12-29
引用
最初由 曾半仙 发布
你说的是缩小+加边

video = avisource(xxxx.avi)
video = LanczosResize(video,256,192).AddBorders(48,48,48,48)
video = TextSub(video, "xxxx.ssa")
return video



这样出来的长宽比不对。。。。。。。
PAL VCD的PAR是 128/117........
应该resize成 4/3 * 117/128 = 1.21875 的比例。。。。
如果画面长是256, 宽就应该是 210 -> 208(16的倍数)........
然后再加黑边............


把那些语句写到一个txt文件里, 再把后缀改avs用VDM打开就可以了。。。。。。。。。

live id: liusu119@hotmail.com
email: liusu119@gmail.com
级别: 骑士
注册时间:
2004-08-24
在线时间:
0小时
发帖:
852
只看该作者 5楼 发表于: 2004-12-29
偶检讨
哦不晓得他要做什么.
只是量了他的图按他的尺寸写的脚本~

[Hammer]azsd

弱字节3千,唔取1k
级别: 版主
注册时间:
2002-12-02
在线时间:
0小时
发帖:
3002
只看该作者 6楼 发表于: 2004-12-29
###########################################################
## 此腳本效果是加上字幕於黑邊上 ##
## 原始影像分辨率需大於 PAL_W*PAL_H,否則會有變形之結果 ##
###########################################################

sClip=avisource("l:\test.avi") #.BilinearResize(512,384) ##測試用
#sClip.Width=512 ##註示用
#sClip.Height=384 ##註示用

## 使用者调整參數 ##
FontSize=20 #字幕大小
SubtitleT= "cinderella" #上字幕
SubtitleB= "仙履奇緣" #下字幕
PAL_W= 352 #水平分辨率,請盡量使用4的倍數
PAL_H= 288 #垂直分辨率,請盡量使用4的倍數
mux_mode="add" #合成模式
BorderRevision=0#寬度裁減修正值

## A 11:9 = 1.222222
## B 12:9 = 1.333333
## 銀幕寬不變時,
## A->B 要先在A時減少水平分辨率才可以一比一轉換,
## B->A 則反過來在B時增加水平分辨率,
## 反過來說就是一比一轉換後要乘以修正值A->B 是A/B,B->A 是B/A。
## PAR = DAR * (水平分辨率/垂直分辨率)
## 此例PAR 等於 Float(PAL_W)/PAL_H * Float(sClip.Width)/sClip.Height
## 當想使用PAL <-> NTSC 轉換時請除去下方 #PN# ※用於在TV看片時
#PN#sDAR= Float(sClip.Width)/sClip.Height
#PN#dDAR= Float(PAL_W)/PAL_H
#PN#PAR= (sDAR==dDAR) ? 1 : ((sDAR
New_H= PAL_H-((BorderRevision+FontSize)*2) #=248
## for resize filter 作修正
temp= New_H % 4
New_H= (temp == 0) ? New_H : New_H-temp

New_W= Ceil(Float(New_H)/sClip.Height *sClip.Width)
#PN#New_W= New_W *PAR
## for resize filter 作修正
temp= New_W % 4
New_W= (temp == 0) ? New_W : New_W-temp #=332

b= Ceil((PAL_W-New_W)/2)

#return sClip.subtitle(string(PAR)) ##除錯用
## X= b
## Y= FontSize

## 製作一個空的黑色Clip ##
MainP=NullClip(sClip, sClip.Framecount).BilinearResize(PAL_W,PAL_H).ConvertToYUY2

## 调整原影像使字幕夾擊它 ##
nClip=sClip.BilinearResize(New_W, New_H).ConvertToYUY2

#c=Layer(AudioDub(MainP,sClip), nClip, mux_mode, 255, X, Y)
c=Layer(AudioDub(MainP,sClip), nClip, mux_mode, 255, b,FontSize+BorderRevision)

## 加上下字幕 ##
c= (SubtitleT=="") ? c : c.Subtitle(SubtitleT, font="Arial", size=FontSize, align=8)
return SubtitleB=="" ? c : c.Subtitle(SubtitleB, font="華康細圓", size=FontSize-2,align=2)


function NullClip(clip "template", Int "Len")
{
Len = Default(Len, 0)
return Blackness(template, length= Len)
}

级别: 侠客
注册时间:
2003-11-04
在线时间:
0小时
发帖:
736
只看该作者 7楼 发表于: 2005-01-24
写成这样可以吗?

sClip=avisource("c:\001.avi")

FontSize=16
SubtitleT= "002.ssa"
SubtitleB= "003.ssa"
PAL_W= 352
PAL_H= 288
mux_mode="add"
BorderRevision=0

New_H= PAL_H-((BorderRevision+FontSize)*2)
temp= New_H % 4
New_H= (temp == 0) ? New_H : New_H-temp

New_W= Ceil(Float(New_H)/sClip.Height *sClip.Width)
temp= New_W % 4
New_W= (temp == 0) ? New_W : New_W-temp #=332

b= Ceil((PAL_W-New_W)/2)

MainP=NullClip(sClip, sClip.Framecount).BilinearResize(PAL_W,PAL_H).ConvertToYUY2

nClip=sClip.BilinearResize(New_W, New_H).ConvertToYUY2

c=Layer(AudioDub(MainP,sClip), nClip, mux_mode, 255, b,FontSize+BorderRevision)

c= (SubtitleT=="") ? c : c.Subtitle(SubtitleT, font="隶书", size=FontSize, align=8)
return SubtitleB=="" ? c : c.Subtitle(SubtitleB, font="隶书", size=FontSize-2,align=2)

function NullClip(clip "template", Int "Len")
{
Len = Default(Len, 0)
return Blackness(template, length= Len)
}

就是出来的效果是这个:


上面和下面一直显示:002.ssa 和003.ssa

怎么修改啊??
级别: 版主
注册时间:
2002-12-02
在线时间:
0小时
发帖:
3002
只看该作者 8楼 发表于: 2005-01-24
SubtitleT= "002.ssa"
SubtitleB= "003.ssa"
要填出路徑
比如放在 c:\ 的話
就是
SubtitleT= "c:\002.ssa"
SubtitleB= "c:\003.ssa"


最新版請用下面的...
使用時可發現字幕不會完全落在黑邊上,這時請編輯一下字幕檔的
[V4+ Styles] / [V4 Styles] 的 MarginV (字幕高度) 填 0 如太低慢慢試試加大(建議值 10)

比如原本 .ssa
[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,新細明體,26,&H00FF00,&HFCC4A5,&H000008,&H000008,0,0,1,2,1,2,10,30,30,3,1

改成

Style: Default,新細明體,26,&H00FF00,&HFCC4A5,&H000008,&H000008,0,0,1,2,1,2,10,30,10,3,1




###########################################################
## 此腳本效果是加上字幕於黑邊上 ##
## 原始影像分辨率需大於 PAL_W*PAL_H,否則會有變形之結果 ##
###########################################################

sClip=avisource("l:\test.avi") #.BilinearResize(512,384) ##測試用
#sClip.Width=512 ##註示用
#sClip.Height=384 ##註示用

## 使用者調整參數 ##
FontSize=25 #字幕大小
SubtitleT= "陸上防衛隊"#上字幕
SubtitleB= "l:\test.ass"#下字幕(文字請勿使用'\'),亦可填寫的是字幕檔案(此時請註上路徑比如 c:\a.aas)
PAL_W= 352 #水平分辨率,請盡量使用4的倍數
PAL_H= 288 #垂直分辨率,請盡量使用4的倍數
mux_mode="add" #合成模式
BorderRevision=0 #寬度裁減修正值
SubtitleFirst_frame=0 #字幕顯示的開始"時間"(請以frame編號填寫),預設值 0
SubtitleLast_frame=framecount(sClip)-1 #字幕顯示的結束"時間"(請以frame編號填寫),預設值 framecount(sClip)-1

####################

## A 11:9 = 1.222222
## B 12:9 = 1.333333
## 銀幕寬不變時,
## A->B 要先在A時減少水平分辨率才可以一比一轉換,
## B->A 則反過來在B時增加水平分辨率,
## 反過來說就是一比一轉換後要乘以修正值A->B 是A/B,B->A 是B/A。
## PAR = DAR * (水平分辨率/垂直分辨率)
## 此例PAR 等於 Float(PAL_W)/PAL_H * Float(sClip.Width)/sClip.Height
## 當想使用PAL <-> NTSC 轉換時請除去下方 #PN# ※用於在TV看片時
#PN#sDAR= Float(sClip.Width)/sClip.Height
#PN#dDAR= Float(PAL_W)/PAL_H
#PN#PAR= (sDAR==dDAR) ? 1 : ((sDAR
New_H= PAL_H-((BorderRevision+FontSize)*2) #=248
## for resize filter 作修正
temp= New_H % 4
New_H= (temp == 0) ? New_H : New_H-temp

New_W= Ceil(Float(New_H)/sClip.Height *sClip.Width)
#PN#New_W= Ceil(New_W *PAR)
## for resize filter 作修正
temp= New_W % 4
New_W= (temp == 0) ? New_W : New_W-temp #=332

b= Ceil((PAL_W-New_W)/2)

#return sClip.subtitle(string(PAR)) ##除錯用
## X= b
## Y= FontSize

## 製作一個空的黑色Clip ##
MainP=NullClip(sClip, sClip.Framecount).BilinearResize(PAL_W,PAL_H).ConvertToYUY2

## 調整原影像使字幕夾擊它 ##
nClip=sClip.BilinearResize(New_W, New_H).ConvertToYUY2

#c=Layer(AudioDub(MainP,sClip), nClip, mux_mode, 255, X, Y)
c=Layer(AudioDub(MainP,sClip), nClip, mux_mode, 255, b,FontSize+BorderRevision)

## 加上下字幕 ##
Loadplugin("VSfilter.dll")
c= (SubtitleT=="") ? c : c.Subtitle(SubtitleT, font="Arial", size=FontSize, align=8)
return (SubtitleB=="")||(Findstr(SubtitleB,"\")>0) ? Get_Sub_File(c,"",SubtitleB,"Auto") : c.Subtitle(SubtitleB, font="華康細圓", size=FontSize-2,align=2)


function NullClip(clip "template", Int "Len")
{
Len = Default(Len, 0)
return Blackness(template, length= Len)
}

#EX: Get_Sub_File(Video, File_Path, File_Name, Subtitle_Style)
Function Get_Sub_File (clip v, String F_P, String F_N, String S_S) {
Loadplugin("VSfilter.dll")
Function Auto_Subtitle_Load (String A_Sub_Name) {
A_Sub_Style =
\ Exist(A_Sub_Name + "IDX") ? "IDX" :
\ Exist(A_Sub_Name + "SRT") ? "SRT" :
\ Exist(A_Sub_Name + "SSA") ? "SSA" :
\ Exist(A_Sub_Name + "ASS") ? "ASS" :
\ Exist(A_Sub_Name + "SMI") ? "SMI" : "NOS"
return A_Sub_Style
}
## 求Subtitle 檔名、副檔名##
S_S_FrontNameChrNum = Get_File_Name_Info(S_S, ".")
F_N_FrontNameChrNum = Get_File_Name_Info(F_N, ".") #Findstr
S_N_Temp = LeftStr(F_N, F_N_FrontNameChrNum)

Sub_Style =
\ (UCase(S_S) == "AUTO") ?
\ Auto_Subtitle_Load(F_P + S_N_Temp) :
\ (S_S_FrontNameChrNum != 0) ?
\ UCase(RightStr(S_S, 3)) :
\ UCase(S_S)

Sub_Name =
\ (S_S_FrontNameChrNum == 0) ?
\ F_P + S_N_Temp + Sub_Style :
\ (Findstr(S_S, ":") > 0) ?
\ S_S :
\ F_P + S_S
## Subtitle File存在 #######
Temp_Sub_IDX = (Sub_Style == "IDX") ? v.VobSub(Sub_Name) : nop
Temp_Sub_SRT = (Sub_Style == "SRT") ? v.TextSub(Sub_Name) : nop
Temp_Sub_SSA = (Sub_Style == "SSA") ? v.TextSub(Sub_Name) : nop
Temp_Sub_ASS = (Sub_Style == "ASS") ? v.TextSub(Sub_Name) : nop
Temp_Sub_SMI = (Sub_Style == "SMI") ? v.TextSub(Sub_Name) : nop
#Temp_Sub_ = (Sub_Style == "") ? v.ConvertToRGB.VD_Subtitler(Sub_Name) : nop
Temp_Sub_NOS = (Sub_Style == "NOS") ? v : nop
File_Subtitle = (Sub_Style <> "") ? Eval("Temp_Sub_"+ Sub_Style) : v

return(File_Subtitle) #string().Subtitle(Sub_Name)
}

#EX: Get_File_Name_Info(StrS, "name") m:\abc.avi
Function Get_File_Name_Info (String ExWork_Movie_File, String Path_Or_Name) {
Function Do_GetStr (String ExWork_Movie_File, Int Str_Len_Num, Int Str_FilePath_necessary_word_Num, String Path_Or_Name) {
F_Str_Num = Str_Len_Num - Str_FilePath_necessary_word_Num + 1
F_Str = LeftStr(ExWork_Movie_File, F_Str_Num)
B_Str_Num = Str_FilePath_necessary_word_Num - 1
B_Str = RightStr(ExWork_Movie_File, B_Str_Num)
Return (Path_Or_Name == "PATH"?F_Str:(Path_Or_Name == "NAME")?B_Str:"")
}
Path_Or_Name = UCase(Path_Or_Name)

Str_Len_Num = StrLen(ExWork_Movie_File)
Str_FilePath_necessary_word_Num = Findstr(RevStr(ExWork_Movie_File), "\")
Str_FrontNameChrNum = (Findstr(RevStr(ExWork_Movie_File), ".") > 0)? Str_Len_Num - Findstr(RevStr(ExWork_Movie_File), ".") + 1 : 0

Return_Word =
\ (Str_FilePath_necessary_word_Num != 0) ?
\ Do_GetStr(ExWork_Movie_File, Str_Len_Num, Str_FilePath_necessary_word_Num, Path_Or_Name) : 0

return ((Path_Or_Name == ".")? Str_FrontNameChrNum : Return_Word)
}

级别: 工作组
注册时间:
2003-11-07
在线时间:
1小时
发帖:
7032
只看该作者 9楼 发表于: 2005-01-25
最近才知道,TMPG是可以自动调进字幕的....

青空が眩しい 君がいる風景は
幸せのオーラ 溢れ出すの とまらないよ
駅前の噴水 虹を作っているよ
君を待つ時間さえも かけがえない プレシャスな時

=========================

FANSUB的历史,又翻过了新的一页
级别: 侠客
注册时间:
2003-11-04
在线时间:
0小时
发帖:
736
只看该作者 10楼 发表于: 2005-01-29
下面的字幕显示出来了,还是我中意的字体,
可是上面的字幕,好象还是不会动。



sClip=avisource("I:\001.avi")

FontSize=20
SubtitleT= "I:\002.ssa"
SubtitleB= "I:\003.ssa"
PAL_W= 352
PAL_H= 288
mux_mode="add"
BorderRevision=0
SubtitleFirst_frame=0
SubtitleLast_frame=framecount(sClip)-1

New_H= PAL_H-((BorderRevision+FontSize)*2)
temp= New_H % 4
New_H= (temp == 0) ? New_H : New_H-temp

New_W= Ceil(Float(New_H)/sClip.Height *sClip.Width)
temp= New_W % 4
New_W= (temp == 0) ? New_W : New_W-temp #=332

b= Ceil((PAL_W-New_W)/2)

MainP=NullClip(sClip, sClip.Framecount).BilinearResize(PAL_W,PAL_H).ConvertToYUY2

nClip=sClip.BilinearResize(New_W, New_H).ConvertToYUY2

c=Layer(AudioDub(MainP,sClip), nClip, mux_mode, 255, b,FontSize+BorderRevision)

Loadplugin("VSfilter.dll")
c= (SubtitleT=="") ? c : c.Subtitle(SubtitleT, font="Arial", size=FontSize, align=8)
return (SubtitleB=="")||(Findstr(SubtitleB,"\")>0) ? Get_Sub_File(c,"",SubtitleB,"Auto") : c.Subtitle(SubtitleB, font="隶书", size=FontSize-2,align=2)

function NullClip(clip "template", Int "Len")
{
Len = Default(Len, 0)
return Blackness(template, length= Len)
}

Function Get_Sub_File (clip v, String F_P, String F_N, String S_S) {
Loadplugin("VSfilter.dll")
Function Auto_Subtitle_Load (String A_Sub_Name) {
A_Sub_Style =
\ Exist(A_Sub_Name + "IDX") ? "IDX" :
\ Exist(A_Sub_Name + "SRT") ? "SRT" :
\ Exist(A_Sub_Name + "SSA") ? "SSA" :
\ Exist(A_Sub_Name + "ASS") ? "ASS" :
\ Exist(A_Sub_Name + "SMI") ? "SMI" : "NOS"
return A_Sub_Style
}

S_S_FrontNameChrNum = Get_File_Name_Info(S_S, ".")
F_N_FrontNameChrNum = Get_File_Name_Info(F_N, ".") #Findstr
S_N_Temp = LeftStr(F_N, F_N_FrontNameChrNum)

Sub_Style =
\ (UCase(S_S) == "AUTO") ?
\ Auto_Subtitle_Load(F_P + S_N_Temp) :
\ (S_S_FrontNameChrNum != 0) ?
\ UCase(RightStr(S_S, 3)) :
\ UCase(S_S)

Sub_Name =
\ (S_S_FrontNameChrNum == 0) ?
\ F_P + S_N_Temp + Sub_Style :
\ (Findstr(S_S, ":") > 0) ?
\ S_S :
\ F_P + S_S

Temp_Sub_IDX = (Sub_Style == "IDX") ? v.VobSub(Sub_Name) : nop
Temp_Sub_SRT = (Sub_Style == "SRT") ? v.TextSub(Sub_Name) : nop
Temp_Sub_SSA = (Sub_Style == "SSA") ? v.TextSub(Sub_Name) : nop
Temp_Sub_ASS = (Sub_Style == "ASS") ? v.TextSub(Sub_Name) : nop
Temp_Sub_SMI = (Sub_Style == "SMI") ? v.TextSub(Sub_Name) : nop

Temp_Sub_NOS = (Sub_Style == "NOS") ? v : nop
File_Subtitle = (Sub_Style <> "") ? Eval("Temp_Sub_"+ Sub_Style) : v

return(File_Subtitle) #string().Subtitle(Sub_Name)
}

Function Get_File_Name_Info (String ExWork_Movie_File, String Path_Or_Name) {
Function Do_GetStr (String ExWork_Movie_File, Int Str_Len_Num, Int Str_FilePath_necessary_word_Num, String Path_Or_Name) {
F_Str_Num = Str_Len_Num - Str_FilePath_necessary_word_Num + 1
F_Str = LeftStr(ExWork_Movie_File, F_Str_Num)
B_Str_Num = Str_FilePath_necessary_word_Num - 1
B_Str = RightStr(ExWork_Movie_File, B_Str_Num)
Return (Path_Or_Name == "PATH"?F_Str:(Path_Or_Name == "NAME")?B_Str:"")
}
Path_Or_Name = UCase(Path_Or_Name)

Str_Len_Num = StrLen(ExWork_Movie_File)
Str_FilePath_necessary_word_Num = Findstr(RevStr(ExWork_Movie_File), "\")
Str_FrontNameChrNum = (Findstr(RevStr(ExWork_Movie_File), ".") > 0)? Str_Len_Num - Findstr(RevStr(ExWork_Movie_File), ".") + 1 : 0

Return_Word =
\ (Str_FilePath_necessary_word_Num != 0) ?
\ Do_GetStr(ExWork_Movie_File, Str_Len_Num, Str_FilePath_necessary_word_Num, Path_Or_Name) : 0

return ((Path_Or_Name == ".")? Str_FrontNameChrNum : Return_Word)
}
级别: 侠客
注册时间:
2003-11-04
在线时间:
0小时
发帖:
736
只看该作者 11楼 发表于: 2005-01-29
引用
最初由 wolfsoft 发布
最近才知道,TMPG是可以自动调进字幕的....


那能不能自己定义字体??:confused:
级别: 工作组
注册时间:
2003-11-07
在线时间:
1小时
发帖:
7032
只看该作者 12楼 发表于: 2005-01-29
字体定义是在字幕文件里完成的,你那个不是ssa嘛?

青空が眩しい 君がいる風景は
幸せのオーラ 溢れ出すの とまらないよ
駅前の噴水 虹を作っているよ
君を待つ時間さえも かけがえない プレシャスな時

=========================

FANSUB的历史,又翻过了新的一页
级别: 版主
注册时间:
2002-12-02
在线时间:
0小时
发帖:
3002
只看该作者 13楼 发表于: 2005-01-29
To "下面的字幕显示出来了,还是我中意的字体,可是上面的字幕,好象还是不会动。"

當初完全是我的誤解 ^^
不過改一下腳本就可以了

請自己改一下字幕檔名
種算完成了 ^^
###########################################################
## 此腳本效果是加上字幕於黑邊上 ##
## 原始影像分辨率需大於 PAL_W*PAL_H,否則會有變形之結果 ##
###########################################################
Loadplugin("VSfilter.dll")
sClip=avisource("l:\test.avi") #.BilinearResize(512,384) ##測試用
#sClip.Width=512 ##註示用
#sClip.Height=384 ##註示用

## 使用者調整參數 ##
FontSize=20 #字幕大小
SubtitleT= "l:\test.ssa"#上字幕
SubtitleB= "l:\test.ssa"#下字幕(文字請勿使用'\'),亦可填寫的是字幕檔案(此時請註上路徑比如 c:\a.aas)
PAL_W= 352 #水平分辨率,請盡量使用4的倍數
PAL_H= 288 #垂直分辨率,請盡量使用4的倍數
mux_mode="add" #合成模式
BorderRevision=0 #寬度裁減修正值
SubtitleFirst_frame=0 #字幕顯示的開始"時間"(請以frame編號填寫),預設值 0
SubtitleLast_frame=framecount(sClip)-1 #字幕顯示的結束"時間"(請以frame編號填寫),預設值 framecount(sClip)-1

####################

## A 11:9 = 1.222222
## B 12:9 = 1.333333
## 銀幕寬不變時,
## A->B 要先在A時減少水平分辨率才可以一比一轉換,
## B->A 則反過來在B時增加水平分辨率,
## 反過來說就是一比一轉換後要乘以修正值A->B 是A/B,B->A 是B/A。
## PAR = DAR * (水平分辨率/垂直分辨率)
## 此例PAR 等於 Float(PAL_W)/PAL_H * Float(sClip.Width)/sClip.Height
## 當想使用PAL <-> NTSC 轉換時請除去下方 #PN# ※用於在TV看片時
#PN#sDAR= Float(sClip.Width)/sClip.Height
#PN#dDAR= Float(PAL_W)/PAL_H
#PN#PAR= (sDAR==dDAR) ? 1 : ((sDAR
New_H= PAL_H-((BorderRevision+FontSize)*2) #=248
## for resize filter 作修正
temp= New_H % 4
New_H= (temp == 0) ? New_H : New_H-temp

New_W= Ceil(Float(New_H)/sClip.Height *sClip.Width)
#PN#New_W= Ceil(New_W *PAR)
## for resize filter 作修正
temp= New_W % 4
New_W= (temp == 0) ? New_W : New_W-temp #=332

b= Ceil((PAL_W-New_W)/2)

#return sClip.subtitle(string(PAR)) ##除錯用
## X= b
## Y= FontSize

## 製作一個空的黑色Clip ##
MainP=NullClip(sClip, sClip.Framecount).BilinearResize(PAL_W,PAL_H).ConvertToYUY2

## 加上字幕 ##
BlackP= (SubtitleT=="")||(Findstr(SubtitleT,"\")>0) ? Get_Sub_File(MainP,"",SubtitleT,"Auto") : MainP.Subtitle(SubtitleT, font="Arial", size=FontSize, align=8)
BlackP=BlackP.Crop(0, PAL_H-FontSize, PAL_W, FontSize)
MainP=Layer(MainP, BlackP, mux_mode, 255, 0, 0)

## 調整原影像使字幕夾擊它 ##
nClip=sClip.BilinearResize(New_W, New_H).ConvertToYUY2

#c=Layer(AudioDub(MainP,sClip), nClip, mux_mode, 255, X, Y)
c=Layer(AudioDub(MainP,sClip), nClip, mux_mode, 255, b,FontSize+BorderRevision)

## 加下字幕 ##
#c= (SubtitleT=="") ? c : c.Subtitle(SubtitleT, font="Arial", size=FontSize, align=8)
return (SubtitleB=="")||(Findstr(SubtitleB,"\")>0) ? Get_Sub_File(c,"",SubtitleB,"Auto") : c.Subtitle(SubtitleB, font="華康細圓", size=FontSize-2,align=2)


function NullClip(clip "template", Int "Len")
{
Len = Default(Len, 0)
return Blackness(template, length= Len)
}

#EX: Get_Sub_File(Video, File_Path, File_Name, Subtitle_Style)
Function Get_Sub_File (clip v, String F_P, String F_N, String S_S) {
Function Auto_Subtitle_Load (String A_Sub_Name) {
A_Sub_Style =
\ Exist(A_Sub_Name + "IDX") ? "IDX" :
\ Exist(A_Sub_Name + "SRT") ? "SRT" :
\ Exist(A_Sub_Name + "SSA") ? "SSA" :
\ Exist(A_Sub_Name + "ASS") ? "ASS" :
\ Exist(A_Sub_Name + "SMI") ? "SMI" : "NOS"
return A_Sub_Style
}
## 求Subtitle 檔名、副檔名##
S_S_FrontNameChrNum = Get_File_Name_Info(S_S, ".")
F_N_FrontNameChrNum = Get_File_Name_Info(F_N, ".") #Findstr
S_N_Temp = LeftStr(F_N, F_N_FrontNameChrNum)

Sub_Style =
\ (UCase(S_S) == "AUTO") ?
\ Auto_Subtitle_Load(F_P + S_N_Temp) :
\ (S_S_FrontNameChrNum != 0) ?
\ UCase(RightStr(S_S, 3)) :
\ UCase(S_S)

Sub_Name =
\ (S_S_FrontNameChrNum == 0) ?
\ F_P + S_N_Temp + Sub_Style :
\ (Findstr(S_S, ":") > 0) ?
\ S_S :
\ F_P + S_S
## Subtitle File存在 #######
Temp_Sub_IDX = (Sub_Style == "IDX") ? v.VobSub(Sub_Name) : nop
Temp_Sub_SRT = (Sub_Style == "SRT") ? v.TextSub(Sub_Name) : nop
Temp_Sub_SSA = (Sub_Style == "SSA") ? v.TextSub(Sub_Name) : nop
Temp_Sub_ASS = (Sub_Style == "ASS") ? v.TextSub(Sub_Name) : nop
Temp_Sub_SMI = (Sub_Style == "SMI") ? v.TextSub(Sub_Name) : nop
#Temp_Sub_ = (Sub_Style == "") ? v.ConvertToRGB.VD_Subtitler(Sub_Name) : nop
Temp_Sub_NOS = (Sub_Style == "NOS") ? v : nop
File_Subtitle = (Sub_Style <> "") ? Eval("Temp_Sub_"+ Sub_Style) : v

return(File_Subtitle) #string().Subtitle(Sub_Name)
}

#EX: Get_File_Name_Info(StrS, "name") m:\abc.avi
Function Get_File_Name_Info (String ExWork_Movie_File, String Path_Or_Name) {
Function Do_GetStr (String ExWork_Movie_File, Int Str_Len_Num, Int Str_FilePath_necessary_word_Num, String Path_Or_Name) {
F_Str_Num = Str_Len_Num - Str_FilePath_necessary_word_Num + 1
F_Str = LeftStr(ExWork_Movie_File, F_Str_Num)
B_Str_Num = Str_FilePath_necessary_word_Num - 1
B_Str = RightStr(ExWork_Movie_File, B_Str_Num)
Return (Path_Or_Name == "PATH"?F_Str:(Path_Or_Name == "NAME")?B_Str:"")
}
Path_Or_Name = UCase(Path_Or_Name)

Str_Len_Num = StrLen(ExWork_Movie_File)
Str_FilePath_necessary_word_Num = Findstr(RevStr(ExWork_Movie_File), "\")
Str_FrontNameChrNum = (Findstr(RevStr(ExWork_Movie_File), ".") > 0)? Str_Len_Num - Findstr(RevStr(ExWork_Movie_File), ".") + 1 : 0

Return_Word =
\ (Str_FilePath_necessary_word_Num != 0) ?
\ Do_GetStr(ExWork_Movie_File, Str_Len_Num, Str_FilePath_necessary_word_Num, Path_Or_Name) : 0

return ((Path_Or_Name == ".")? Str_FrontNameChrNum : Return_Word)
}

级别: 侠客
注册时间:
2003-11-04
在线时间:
0小时
发帖:
736
只看该作者 14楼 发表于: 2005-01-29
^^谢谢weilai~

~显示出来的是双字幕~
~这下可以转换出想要的效果ING~



Loadplugin("VSfilter.dll")
sClip=avisource("I:\001.avi")

FontSize=20
SubtitleT= "I:\002.ssa"
SubtitleB= "I:\003.ssa"
PAL_W= 352
PAL_H= 288
mux_mode="add"
BorderRevision=0
SubtitleFirst_frame=0
SubtitleLast_frame=framecount(sClip)-1

New_H= PAL_H-((BorderRevision+FontSize)*2)
temp= New_H % 4
New_H= (temp == 0) ? New_H : New_H-temp

New_W= Ceil(Float(New_H)/sClip.Height *sClip.Width)
temp= New_W % 4
New_W= (temp == 0) ? New_W : New_W-temp #=332

b= Ceil((PAL_W-New_W)/2)

MainP=NullClip(sClip, sClip.Framecount).BilinearResize(PAL_W,PAL_H).ConvertToYUY2

BlackP= (SubtitleT=="")||(Findstr(SubtitleT,"\")>0) ? Get_Sub_File(MainP,"",SubtitleT,"Auto") : MainP.Subtitle(SubtitleT, font="华文行楷", size=FontSize, align=8)
BlackP=BlackP.Crop(0, PAL_H-FontSize, PAL_W, FontSize)
MainP=Layer(MainP, BlackP, mux_mode, 255, 0, 0)

nClip=sClip.BilinearResize(New_W, New_H).ConvertToYUY2

c=Layer(AudioDub(MainP,sClip), nClip, mux_mode, 255, b,FontSize+BorderRevision)


return (SubtitleB=="")||(Findstr(SubtitleB,"\")>0) ? Get_Sub_File(c,"",SubtitleB,"Auto") : c.Subtitle(SubtitleB, font="隶书", size=FontSize-2,align=2)


function NullClip(clip "template", Int "Len")
{
Len = Default(Len, 0)
return Blackness(template, length= Len)
}


Function Get_Sub_File (clip v, String F_P, String F_N, String S_S) {
Function Auto_Subtitle_Load (String A_Sub_Name) {
A_Sub_Style =
\ Exist(A_Sub_Name + "IDX") ? "IDX" :
\ Exist(A_Sub_Name + "SRT") ? "SRT" :
\ Exist(A_Sub_Name + "SSA") ? "SSA" :
\ Exist(A_Sub_Name + "ASS") ? "ASS" :
\ Exist(A_Sub_Name + "SMI") ? "SMI" : "NOS"
return A_Sub_Style
}

S_S_FrontNameChrNum = Get_File_Name_Info(S_S, ".")
F_N_FrontNameChrNum = Get_File_Name_Info(F_N, ".") #Findstr
S_N_Temp = LeftStr(F_N, F_N_FrontNameChrNum)

Sub_Style =
\ (UCase(S_S) == "AUTO") ?
\ Auto_Subtitle_Load(F_P + S_N_Temp) :
\ (S_S_FrontNameChrNum != 0) ?
\ UCase(RightStr(S_S, 3)) :
\ UCase(S_S)

Sub_Name =
\ (S_S_FrontNameChrNum == 0) ?
\ F_P + S_N_Temp + Sub_Style :
\ (Findstr(S_S, ":") > 0) ?
\ S_S :
\ F_P + S_S

Temp_Sub_IDX = (Sub_Style == "IDX") ? v.VobSub(Sub_Name) : nop
Temp_Sub_SRT = (Sub_Style == "SRT") ? v.TextSub(Sub_Name) : nop
Temp_Sub_SSA = (Sub_Style == "SSA") ? v.TextSub(Sub_Name) : nop
Temp_Sub_ASS = (Sub_Style == "ASS") ? v.TextSub(Sub_Name) : nop
Temp_Sub_SMI = (Sub_Style == "SMI") ? v.TextSub(Sub_Name) : nop
#Temp_Sub_ = (Sub_Style == "") ? v.ConvertToRGB.VD_Subtitler(Sub_Name) : nop
Temp_Sub_NOS = (Sub_Style == "NOS") ? v : nop
File_Subtitle = (Sub_Style <> "") ? Eval("Temp_Sub_"+ Sub_Style) : v

return(File_Subtitle) #string().Subtitle(Sub_Name)
}


Function Get_File_Name_Info (String ExWork_Movie_File, String Path_Or_Name) {
Function Do_GetStr (String ExWork_Movie_File, Int Str_Len_Num, Int Str_FilePath_necessary_word_Num, String Path_Or_Name) {
F_Str_Num = Str_Len_Num - Str_FilePath_necessary_word_Num + 1
F_Str = LeftStr(ExWork_Movie_File, F_Str_Num)
B_Str_Num = Str_FilePath_necessary_word_Num - 1
B_Str = RightStr(ExWork_Movie_File, B_Str_Num)
Return (Path_Or_Name == "PATH"?F_Str:(Path_Or_Name == "NAME")?B_Str:"")
}
Path_Or_Name = UCase(Path_Or_Name)

Str_Len_Num = StrLen(ExWork_Movie_File)
Str_FilePath_necessary_word_Num = Findstr(RevStr(ExWork_Movie_File), "\")
Str_FrontNameChrNum = (Findstr(RevStr(ExWork_Movie_File), ".") > 0)? Str_Len_Num - Findstr(RevStr(ExWork_Movie_File), ".") + 1 : 0

Return_Word =
\ (Str_FilePath_necessary_word_Num != 0) ?
\ Do_GetStr(ExWork_Movie_File, Str_Len_Num, Str_FilePath_necessary_word_Num, Path_Or_Name) : 0

return ((Path_Or_Name == ".")? Str_FrontNameChrNum : Return_Word)
}
快速回复

限150 字节
上一个 下一个