ASS.js - 一个在 HTML5 video 上渲染 ASS 字幕文件的库

2015-05-04 09:31:45 +08:00
 weizhenye

GitHub

Demo

去年二月份花了一星期写了基本的解析和渲染, 之后就沉迷 Minecraft 坑掉了... 上个月重新捡起来填坑, 重构了一遍, 完成了大部分特效, fade, move 之类的.

ASS.js 尽可能地还原 Aegisub 中的显示效果, 但是浏览器的限制肯定无法 100% 还原特效, 比如多个旋转的效果就和 Aegisub 里有偏差, 不过应该在可接受的范围内. 之后可能会考虑写一个全用 Canvas 来渲染的版本, 自己实现 3D 变换.

因为使用了 CSS Animation 来实现高效率的动画效果, 所以浏览器要求 Chrome, Firefox, IE10 及以上.

现在依然在不断地更新和修 bug 中, 欢迎大家用各种 ASS 文件来测试来提 issue.

8191 次点击
所在节点    分享创造
19 条回复
phoenixlzx
2015-05-04 10:35:55 +08:00
点赞
star 已送

顺便lz填完坑来本服玩吧233
lincanbin
2015-05-04 10:57:51 +08:00
取这种名字不会被屏蔽吗?
est
2015-05-04 11:01:51 +08:00
冲这名字点个star
weizhenye
2015-05-04 11:32:34 +08:00
@phoenixlzx 已经加入喵窝了, 主要是观光, 再自己开荒什么的懒得做了_(:з」∠)_

@lincanbin @est ASS♂We♂Can
dangge
2015-05-04 12:06:37 +08:00
只会写一点渣ass的蒟弱已送上star
Stof
2015-05-04 12:50:43 +08:00
看样子放上简单些的ASS才行,有些不想外放的ASS还得重新加进去再压一遍片
gDD
2015-05-04 13:10:31 +08:00
为了更好的 SEO,建议楼主把 README.md 第一行改为 Markdown 的 # ASS.js,然后紧接一行写 ASS.js parses ASS subtitle file format, then renders subtitles on HTML5 video. (把原句修复成了我认为正确且易读的语法)。

然后项目名是不是从 ASS 改为 ass.js 更好,放心重命名项目 GitHub 会自动做跳转的。

想起一个笑话,随便想一个名词 <noun>,然后都会有一个项目叫 <noun>.js。
weizhenye
2015-05-04 15:22:02 +08:00
@Stof 没有理解你的意思. 是指你的 ASS 文件不想外传? Demo 页是纯前端的, 搭在 GitHub Pages 上, 不会上传到什么服务器的.
@gDD 关于 README.md, 我英语表达确实不太好, 我会修改的; 命名的问题, 当时也没多想, 之后可能会建一个 canvas 分支, 文件名可能为 ass.canvas.js 或 ass-canvas.js, 作为各个分支的整体, 项目名为 ASS 还是合适的吧.
Earthman
2015-05-04 15:40:37 +08:00
支持绘图么?有些NB的字幕组用了矢量图来做特效
caiya21
2015-05-04 15:55:13 +08:00
我是来送star的
davepkxxx
2015-05-04 16:00:02 +08:00
ass。。。。
weizhenye
2015-05-04 16:05:29 +08:00
@Earthman 部分支持, 图形是可以画出来, 但是描边和阴影效果还暂时没做.
goodbest
2015-05-04 16:20:41 +08:00
@weizhenye
@Earthman

我这里正好测试了一下:
测试样例:harmonia pv
无字幕视频、ass、成品见链接: http://pan.baidu.com/s/1bnpUqg3 密码: yux5

1. ass draw的语法似乎还不行。(0-10秒)
2. \fad的话效果没有实现?没看到淡入淡出效果
3. style里定义的position,似乎在不同的分辨率下面,位置没法正确解析。(1分22秒左右)
4. 16:9的视频,在16:10的屏幕全屏的话,字幕位置不合适。

总之先star了,以后去github提issue
weizhenye
2015-05-04 19:12:55 +08:00
@goodbest
1. draw 是没问题的, 暂时还不知道具体原因, 我猜测是因为 4000 条 Dialogue 同时显示卡了, 你直接点进度条到 2~10 秒之间卡一万年后是可以看到效果的.
2. \fad 我测试是正常的, 你什么浏览器?
3. 通道获取算法里的 MarginV 忘乘 scale 了, 是 bug.
4. 这个晚点再测试.
goodbest
2015-05-05 07:31:50 +08:00
@weizhenye
不知道是不是你更新了代码还是什么,刚才试了一下,mac chrome v42

1的问题已经从不显示,变为了“非常卡”,但有效果显示。
2、3的问题问题已经修复
4的话,16:9的视频在16:10的屏幕上播放时,视频是垂直居中显示的(上下各有黑边 0.5*屏幕高度)。
但是这时候的字幕,依然在上方9/10的区域里显示,导致了位置错误。
Stof
2015-05-05 07:40:36 +08:00
@weizhenye 我的意思是指以后准备加上点什么ASS加密措施吗?
weizhenye
2015-05-05 18:38:54 +08:00
@goodbest 昨晚是更新了一下. 1 的问题暂时无解, 4000 条同一时间分别插入肯定卡爆, 但又要插入 DOM 后才能得到宽和高所以不能加到一起再插入. 4 的话, 由于似乎没法得到 video 的分辨率, 放大到与视频不同的分辨率时, 没法知道其确切的宽和高, 也暂时不知道怎么办.
@Stof 不会吧, 也没法加密吧, 要获取 ASS 信息肯定 init() 前就能获取到了.
metalbug
2015-05-06 00:12:13 +08:00
GOOD JOB MAN
ayconanw
2016-11-01 00:45:45 +08:00
赞啊,如果能顺便兼容 srt 就更好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/188251

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX