如何给FLV文件加字幕
关键字:FFMPEG AVS 字幕
本文只是收集工作中的一点经验和积累,如果你能从本文中得到收获,或者得到启发。那将是我最开心的事情。
本文面向的读者是对FFMPEG以及AVS有一定基础的,对电脑有一定基础的,否则你在读的过程也许会感到比较困难。
在网上关于FFMPEG加字幕或者水印的文章不要太多,但是很多文章只是将各种命令给你罗列一堆,直到最后看到你茫然而不知所措,另外就是一些朋友在网上大说自己什么问题什么问题解决了啊,开心啊,什么的。用GOOGLE搜索一下就能搜索到,可是当你满怀希望的去打开的时候,却发现你要的东西并不是他写的东西。我就很郁闷:你倒是说说啊,你解决了,别人是替你开心,但是你也说一下,让别人也开心一下啊,随便BS一下。这种年头搞这种全开源的东西的技术封锁有花头啊,能赚钱吗?好了,不说了。
好了,不发牢骚,下面还是说一下正题吧:
首先说一下,我的工作环境:WINDOWS(而且是WINDWOS下在大多数的版本),FFMPEG,Avisynth2.5.6
解决的思路:通过AVS脚本实现对大都数文件的支持,通过VSFilter.dll插件实现对字幕文件的添加,我使用的SSA格式的纯文本字幕,该格式的好处是:文件小,文字的式样多,字幕出现的形式、位置等等都比较容易控制,在实际使用中,你可以根据你自己的需求来使用你的字幕格式。
VSFilter.dll支持的字幕格式有很多种:idx、srt、ssa、ass、sub等。
认识字幕的格式,认识字幕格式对想挂字幕或者说是加水印的来说应该是很重要的一个过程,只有充分认识了才写出好的字幕文件,才能实现你心中的预期效果,我们这里只是以ssa文件为例进行说明:
[Script Info]
; This is a Sub Station Alpha v4 script.
; For Sub Station Alpha info and downloads,
; go to http://www.eswat.demon.co.uk/
; or email
[email protected]
;
; Note: This file was saved by Subresync.
;
ScriptType: v4.00
Collisions: Normal
PlayResX: 384
PlayResY: 288
Timer: 100.0000
[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: SytleCN,simhei,26,&Hffffff,&Hff0000,&Hff0000,&H000000,0,0,0,1,1,2,20,20,20,0,134
Style: mine,Arial,24,&Hffffff,&Hff0000,&Hff0000,&H000000,0,0,0,1,1,2,20,20,20,0,0
[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: Marked=0,0:00:00.00,0:00:9.99,SytleCN,,0000,0000,0000,,{/pos(50,35)}捷群科技(HTTP://www.jiequn.net)
上面的这一段是截取的一段SSA中的片段,你可以使用字幕的修改编辑软件来进行修改,常用的字幕的修改和编辑软件网上有很你,你可以去搜索一下。本文主要讲的是SSA的文件的格式:
我们看一下:[V4 Styles] 后面的那一段你可以任意的加上你所需要的文字的格式,这样你可就可以写出很PP的字幕了。Name对就于后面你在引用时的字体的名称。Fontname,需要提醒大家注意的:SSA对中文的字体提供的不够,所以你如果希望使用黑体,那就不能写成黑体,然是要写成simhei,其它字体的对应关系如下:(黑体:simhei;宋体:simsun;仿宋:simfang;楷体:simkai;隶书:simli)虽然网上很多地方都没有写明,需要这样设置字体,但是如果你不听我的劝告,你将不能正确的设置中文字体。还有一点需要提醒你注意的是:“Encoding”,134表示简体中文的编码,繁体中文的编码为136。其它的都是根据上面一项一项对应下来的。MarginL ---字幕距左边的距离---取值范围0-PlayResX的数值;MarginR ---字幕距右边的距离---取值范围0-PlayResX的数值;VarginV ---字幕高度---取值范围0-PlayResY的数值。PrimaryColour ---主体颜色---颜色格式为&HXXXXXX,十六进制,X取值为0-f;SecondaryColour ---次要颜色---格式同上,卡拉OK中使用,即变色前的颜,变色后显示主体颜色;TertiaryColour ---边框颜色---格式同上;BackColour ---阴影颜色---格式同上
3.[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
从这里开始就是字幕部分了,以“Dialogue: Marked=0,0:00:00.00,0:00:9.99,SytleCN,,0000,0000,0000,,{/pos(50,35)}捷群科技(HTTP://www.jiequn.net)”这里是将[v4 Styles]部分中已定义的字体提供给字幕,并能对字体的各属性重新定义;通过特定的SSA代码实现特效.
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Marked---标记---一般都设为0
Start ---字幕开始时间---格式0:00:00.00最小单位0.01秒
End ---字幕结束时间---格式同上
Style ---字体名称---引用的是[v4 Styles]部分中的Name项
Name ---名字---注意这个Name和[v4 Styles]部分中的Name完全不同,相当于注释,一般省略,省略后只留一逗号.
MarginL---是对[v4 Styles]部分MarginL值的重新设定,0000表示采用原值;若不为零,则代替原值(此时原值不再起作用)
MarginR---是对[v4 Styles]部分MarginR值的重新设定,用法同上
MarginV---是对[v4 Styles]部分MarginV值的重新设定,用法同上
Effect---这里是SSA为编辑人员方便使用动态效果而自定义的代码,有Scroll up,Scroll down,Banner和Karaoke四种形式.为集中学习这里就不作介绍将其放到SSA代码部分说明.
Text---字幕区---在这里可以添加代码改变字体属性,实现多种特效
好了,累死了,休息一会儿,相信在看完上面的文章后你应该对SSA的字幕有一定的了解了吧,如果这一步搞定的话那下面的步骤就简单多了。。
下一步:如果将字幕加到文件中去?
当然得是AVS了。打开记事本编写AVS脚本:
LoadPlugin("VSFilter.dll")
DirectShowSource("待转换的文件路径及文件名", fps=15, convertfps=true)
TextSub("SSA文件")
Levels(0,1.2,255,0,255)
看了上在的代码:第一句就是LoadPlugin("VSFilter.dll"),那就别急了,先到网上去下载VSFilter.dll,当然你也可以到本网上下载。
下载后将文件复制到你的SYSTEM32目录下面。
执行命令“regsvr32 VSFilter.dll”完成该DLL文件的注册。
好了,到了这里你可以正确引用VSFilter.dll了。
下面的事件就是写一句FFMPEG命令(举个最简单的例子:ffmpeg -i XXX.avs -y test.flv)去执行,就可以得到加字幕后的FLV文件了。
好了,朋友们去享受AVS给我们带来的方便吧。由于本文才疏学浅,肯定有说的不到的地方,还请更正(直接在下面留言就可以了)。我将在后面写一些关于AVS加载别的格式或者水印的文章。
本文如果需要转载请注明出处:捷群科技(HTTP://www.jiequn.net)
本文转自
http://bbs.jiequn.net/showtopic-10.aspx