编程实现wmv文件添加字幕

snowdrop007 2007-02-15 06:05:13
大家好,请问有做过编程(非视频编缉软件)实现向wmv文件添加字幕的朋友么? 查找资料,有三种方法可行:
1. 写Script

由于播放器是支持 HTML 的,所以文字大小,字体,颜色都好解决。至于文字同步走动,只要将 HTML 的 /font 逐字往后移,同时产生新的行就可以了。也就是说一个字变化,就要写一行 HTML 代码。

不过手动生成全部 HTML 会死人的,所以我先制作好 ssa 格式的卡拉OK字幕,然后写个程序机械化的转换成 HTML ,在做成 Script 导入 ,wma .wmv 中。

2. 获取wmv视频每一帧,通过修改每一帧特定像素点的方式添加字幕

3. VMR9 Mix Render, 在正在播放的视频上添加背景透明的字幕,然后通过IVMRWindowlessControl::GetCurrentImage 获取已经添加字幕的视频帧

我目前采用的是第三种方法,在用IWMWriter::AllocateSample 以及WriteSample 方面遇到一些问题,而且这种方法的效率不高。

前两种方式还没有尝试,希望和做过/正在做相关项目的朋友交流一下,非常感谢。
...全文
1829 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdspower 2007-03-13
  • 打赏
  • 举报
回复
你为什么要把字幕添加覆盖在视频本身上面,在视频下面添加一块干净的区域来显示字幕效果会不会更好?我想就是字幕位置再低,再靠边,都有可能覆盖掉影片中某些可能有趣的画面吧,而且字幕的叠加肯定在干净的区域比在有内容的区域更好啊,起码新字幕出现时可以简单的清除原有内容再显示,当然用原有字幕图形值作个位异或也可以获得清除效果,不过在画面内容时时发生变化的区域叠加始终是没有在干净的地方叠加方便的。
snowdrop007 2007-03-13
  • 打赏
  • 举报
回复
欢迎大家踊跃发表高见,目前正在完善方法2,等我做完了,找个时间说说,然后结贴散分,先谢谢各位了!
snowdrop007 2007-03-13
  • 打赏
  • 举报
回复
xdspower(杂食菜熊),我已经放弃了方法3,由于写文件的问题无法解决以及必须通过render添加字幕才能获取带字幕的视频帧,我目前在采用方法2,感觉效率比方法3高。
xdspower 2007-03-12
  • 打赏
  • 举报
回复
其实方法2应该是效率最不高的,方法3应该是一个比较好的实际应用实现,而且很多现有播放器可能都是利用这种方法实现的,而且效率应该是比较高的,它可以看作是方法1的扩展的一种变化,就是根据检测当前播放时间,根据字幕显示要求在特定的接口更新输出此时字幕,这个方法不需要对原始视频图象进行处理,而仅仅检测播放时间(这个常规播放核心都提供回调接口来支持)实行更新,而且在新的DX支持中可能对此有较强支持了。
xdspower 2007-03-12
  • 打赏
  • 举报
回复
关于SMIL参考http://www.w3.org/AudioVideo/
这里有很多相关的资源链接。
此外在www.realnetworks.com也有系列资源是介绍RealPlayer对Smil实现的
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dntime/html/htmltime.asp
有微软的相关技术。
snowdrop007 2007-03-09
  • 打赏
  • 举报
回复
非常感谢 xdspower(杂食菜熊),constantine(飘遥的安吉儿) ! 我目前在按照第二种方法作。 我对SMI不太了解,如果您们有时间,发些介绍,链接上来吧,再次感谢!
xdspower 2007-03-08
  • 打赏
  • 举报
回复
第一种的文件格式好像微软定义的扩展名叫SMI
xdspower 2007-03-08
  • 打赏
  • 举报
回复
第一种不一定要写入script轨道,有专门的基于xml格式文件语法来描述,可以看作是MS 对SMIL的一种实现,好像从windows media 7 sdk中就有相应的实现例子了。
constantine(飘遥的安吉儿) 的回答不完全正确,wmp通过轨道定义也可以实现很多效果,不过没有Real公司基于SMIL的实现方便,我在项目中也是选用SMIL的实现,对于专门的字幕功能,real专门有一个叫RealText的描述语言实现。
RealOne Player也不是完全支持SMIL,而是完全实现了SMIL1,而且现阶段是对SMIL2若干定义实现的最多的播放器。
MS 对SMIL的实现是基于HTML+TIME的技术,也叫做时间线技术。
constantine 2007-03-06
  • 打赏
  • 举报
回复
SMIL用这个做,编辑好给wmp调用应该就可以了,wmp刚好只支持字幕,如果你要搞别的还不行
realone的可以完全支持smil语言,可以方便插入字幕,图片,广告等等
snowdrop007 2007-03-03
  • 打赏
  • 举报
回复
汗!这么久了,尽然没有一个人说两句!
snowdrop007 2007-02-26
  • 打赏
  • 举报
回复
怎么就没有朋友发表高见呢?

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧