公共书签 安全交流 打印区 版务区 投稿海外
新手上路 办公相关 专题区 放心情 声明退党
论坛目录 | 技术文章 | 原创及公告 | 下载专区 | 转发投稿 | 工具箱 | 礼品店
论坛登陆
* 用户名 * 密 码
文章搜索 范 围

当前位置:首页>>技术文章>>多媒体和办公软件>>
正文
相关文章
·RM文件转mpg的一个小总结
·新手必读:Google检索必备技
·常用图像文件格式比较
·Firefox使用常见问题和解决方
推荐文章
AviSynth+VobSub+Tmpgeng 挂字幕
作者:法雷@qxbbs.org
  文章出处:清心原创    发布时间:2006-07-27

 很多人在为视频文件加挂字幕的处理上,采用了通过DirectShow + DVobSub 自动调用avi文件和同目录下的同名文件的方法。不过,坦白地说,这样的调用方法不但效率低速度慢,而且并不能保证在所有的系统或者任何情况下都能稳定(tmpgenc压缩时经常出现漏字)。那么有没有更好的办法?这里有一个答案:AviSynth。

AviSynth是一种脚本化的视频处理工具。与常见的Win32程序不同,她完全没有GUI或者Consol界面,所有的操作全部取决于你用notepad的时候,键入的寥寥几个参数。其特点是效率高,速度快,接口和源代码开放,稳定。

首先,可以到 http://sourceforge.net/projects/avisynth2/ 下载安装最新版本的AviSynth。现在2.5.2中还包括一个ffvfw包,可以让你的系统把avs(AviSynth脚本文件)当成普通的视频文件打开甚至播放。

接着,可以到 http://sourceforge.net/projects/guliverkli/ 下载安装最新版本的VSFliter,并确认将包中VSFliter.dll复制到 %Windir%\System32 目录下,并在“开始—>运行—>中运行了 “regsvr32 VSFilter.dll” 进行注册。

(其中有二个VSFilter.dll文件,我没分出差别来,都能用。)

请确认已装了XviD解码器。

现在用Notepad建立一个空白的文本文件,并将之命名为train.avs。

接下来在这个文本文件中键入这样3行文字:

 
AVISource("C:\Video\train.avi")
LoadPlugin("VSFilter.dll")
VobSub("C:\Video\train.idx")

现在随便你用什么软件,如用Tmpgenc直接就能压mpeg了、还有CCE或者是Media Player来打开这个avs文件,你都可以看 vobdub 已经准确地出现在视频文件之中。

当然,用文本字幕时,语句需要些许变化:

AVISource("C:\Video\train.avi")
LoadPlugin("VSFilter.dll")
TextSub("C:\Video\train.srt")

现在,文本字幕也会出现在视频图像中了。

那么,这简单的三行文字代表什么?第一行 AVISource() 命令软件将右侧括号中的文件当作avi标准文件来打开编辑;第二行 LoadPlugin 命令,要求AviSynth在处理时调入括号中的插件,本例中打开了VSFilter.dll插件,就可以令AviSynth支持vobsub字幕;第三行 VobSub() 或者 TextSub() 命令,则是Vobsub插件自定义的命令,可以将括号中的字幕文件加入视频汇总流,最终输出到任何打开avs文件视频编辑软件上。

同样道理:处理mpeg时,写入如下代码:

DirectShowSource ("J:\train\train.mpg")
LoadPlugin("VSFilter.dll")
TextSub("J:\train\train.srt")

DirectShowSource ("C:\Video\train.mpg") 这句载入mpeg格式文件,但没有音频部分,音频部分可在Tmpgenc压缩时加上去。从此就不用再麻烦会声会影了,自已修改字幕自已压。 
 

附:汉城火车的字幕本地下载 如只要片头的话,用文本编辑器编辑一下即可。

神奇的 AviSynth 就是这样的简单。不过目前调入字幕时还没有使用到VobSUB()或者TextSub()命令中的高级部分,所有字幕的显示设定将依赖于Vobsub的默认设置。语种选择取决于idx文件中的 langidx: 指数。您也可以通过rundll32 VSFilter,DirectVobSub 可进入设定面板。

让使用AviSynth作PAL与NTSC制式转换

打开记事本,输入下面的内容,并存为一个扩展名为avs的文件,比如“n2p.avs。
 
NTSC转PAL


DirectShowSource("Capture01.AVI")
Bob()
BicubicResize(720,576)
ConvertFPS(50)
SeparateFields.SelectEvery(4, 1, 2)
Weave

如果是PAL转NTSC,则这样写:

DirectShowSource("Capture01.AVI")
Bob()
BicubicResize(720,480)
ConvertFPS(59.94)
SeparateFields.SelectEvery(4, 1, 2)
Weave

AviSynth的语法

上面的句子是AviSynth的语法,利用AviSynth的强大脚本语句,通过几个步骤完成制式的转换。其具体含义是:

  1. AviSource("Capture01.AVI") 指定avi的源文件。
  2. Bob() 将每个场单独分开,并插值为全高尺寸。比如720x480的NTSC的每个场单独分开后,变成720x240,然后扩大为720x480。
  3. BicubicResize(720,576) 用Bicubic算法缩放到720x576的分辨率。
  4. ConvertFPS(50) 转换场频到50Hz,使用混合模式(Blend Mode)。如果是PAL转NTSC,则用59.94(29.97x2)
  5. SeparateFields.SelectEvery(4, 1, 2) 这一句决定场序,输出为Low Field First时,用SelectEvery(4, 1, 2)。如果需要Upper Field First,则用SelectEvery(4, 0, 3)。
  6. Weave 将2个场交织为一个帧。

有两点要注意的:

1、转过来的AVS文件中是只有视频而不含音频的。解决方法也很简单,把原始AVI的音轨和此AVS链结在一起行了;

2、按照原文中的方法转DV制式,不管是N转P还是P转N,运动的画而都是抖的。对此,需把上面的(4,1,2)改为(4,0,3),场序就换过来了

这一点是较不好理解的。因为这样改后就成了上场在前,但反而显示正常。大家最好也先在自己机器上试好了再正式使用。要注意的是,如果只在电脑上看是怎么设也不会抖的,只能刻好碟后在电视上播放才能看出。我的方法是选几个摇镜头片断,在CDRW盘上刻成超级VCD,这样能就看出场序有无出错,并可反复修改设置后擦盘重刻,直到电视上看来完全正常为止。

源自清心论坛[qxbbs.org]原创,欢迎转载,禁止修改。



[返回顶部↑]   
 
清心论坛 版权所有 --- 2002-2007 Copyright --- QXBBS.org