月下惊魂 发表于 2019-9-21 19:50:14

ass转sup字幕工具Spp2Pgs 0.9.3.7

工具及简要说明】
Spp2Pgs 0.9.3.7
输入ass文件,bgra格式的avs,或者其他可播放的bgra源文件,或者来自stdin的bgra raw流
输出sup文件,或者输出到stdout
参数详见程序运行输出

运行时,%Temp%路径所在分区需要留出4G以上空间;可在执行前设置%Temp%路径,转移工作时临时文件的存储位置。
devel目录下为.net库及其它开发相关的内容;legacy目录下为基于3.0.0.306版本的xy-VSSppf

遵GPLv3许可协议发布,协议内容见源码,详见后文
耐得住一般特效;全屏动态黑板一般也能生成文件,但是为了兼容性会掉帧。
生成的sup文件严格遵照蓝光标准,因此大面积+动态的话会导致丢帧,严重程度主要与画面面积相关,请结合临床。

默认在起点处添加了“前黑”,避免字幕在大金中混流时需要手工指定起始偏移。
另可通过二次开发将多个ass文件连续合编入单一的sup文件中,参见示例代码。

项目概况】

目前项目维护地址(git):
https://github.com/subelf/Spp2Pgs

从13年开始就断断续续地做蓝光标准相关的一些文件的解析
手上资料匮乏,也没有相关的经验,更无奈的是现有的蓝光相关的工具没几个开源的
暂时这么搞着……至少是个开源的东西,就算我扑街了还有别的盼头……

目前想法是,小文件和目录结构交给C#了,大文件里流数据的编解还是应该用C++来写,封装后再交给CLR来调用。一方面解决效率问题,另一方面也是避免一些许可协议问题。
小文件目前能处理整个mpls文件和半个clpi文件,目录结构被我写成翔了,等参考一下MGVC和3D的盘重写。
目前扔在这儿了(hg):
https://bitbucket.org/subelf/bluraysharp

现在开始处理大文件。


外挂结构制作概况】

该项目以外挂结构的制作为重,最理想的情况当然是ass直接变外挂。
那么简述一下传统外挂结构制作的整个过程:
1. ass调轴准备,就绪后用avs挂成argb视频片段。
2. 用工具avs2bdnxml逐帧分析该片段,确定各帧图片和帧的持续时间;切除掉空白区,并适当处理后输出为xml+png;也可以输出sup文件,但是问题多多。
3. 生成的xml+png,作为bndxml,被SceanaristBD导入后,编码成pes+mui文件。其中pes存储编码后的显示图形(PG)。而mui具体含义不明,对pes来说存储的是各数据单元的时间戳信息。之后,pes+mui可以被大金用来混流形成m2ts文件,混流时的时间戳需要参考对应的视频片段。
3. sup文件,也可以直接被tsmuxer用以与音频或视频进行混流,形成m2ts文件。但是此方法可能存在兼容性问题。
4. 之后通过修改mpls文件,将字幕m2ts与视频m2ts关联起来,形成外挂结构。

整个过程中,最期望的就是2~4的完全自动化。
目前tsmuxer姑且可用,avs2bdnxml则麻烦多一些,mpls的修改目前没什么问题。大金参与的自动化则基本是不可能。
因此实现外挂字幕自动化的原则如下:
1. 最终期望可以有图形化界面。
2. 核心的代码,效率另说,可读性最重要,尤其是在体现文件结构方面。开源。
3. 先解决有无,再解决稳定性和兼容性,最后是尽量尝试替代闭源工具。

所以目前选择pes先下手,以期从ass生成可用的pgs文件成为可能。
之后再考虑pgs/sup生成m2ts的问题。


目录】

PG的基本顶层概念
PG相关的编码概念
定义:文件结构
定义:时间戳计算公式
卖萌的夏娜菊
其他细节


目前已完成的】

1. 解析从原始Epoch到pes文件的编码过程中,需要做的特殊动作:补空白段,时间戳生成等
2. avs2bdnxml的核心逻辑部分重写为C++代码,保留原有sse2汇编并稍作修改。
3. 初代:关键帧存档功能,帧剪裁+窗口区覆盖统计;色板的生成与映射算法·改;Demo v0.1, 完成视频流解析动作,捕获帧,并模拟编码pgs
4. 二代:pgs文件的编码;图形元件的编码;时间戳的统计与计算;窗口区域的判明及切割·改;pgs输出;管道输入
5. 三代:图形元件的面积优化算法;C++/CLI封装版本;去除对avs的依赖


未来已完成的】
6. 四代:避免生成临时文件;优化图元buffer使用;pes+mui的可选生成版本;
7. 五代:那么遥远的未来以我的能力看不到
8. 六代:完善文档,在这帖子卖萌,加图,加特技;验证3D盘的标准定义
使用方法:软件目录按住shift+右键选择powershell,出入命令

.\spp2pgs -i "1.ass" -s -1080 -r 23 "output.sup"

-i <filename>
               Input subtitle file name. Use '-' for a stdin raw input.
      -s <format>
               Frame format:
               480i   = 1/240/-480
               576i   = 2/288/-576
               480p   = 3/480
               1080i= 4/540/-1080
               720p   = 5/720
               1080p= 6/1080
               576p   = 7/576
      -r <rate>
               Frame rate:
               23.976 = 1/23
               24.0   = 2/24
               25.0   = 3/25
               29.97= 4/29
               30.0   = 5/30
               50.0   = 6/50
               59.94= 7/59
               60.0   = 8/60
      -b <frameid>
               Beginning index of valid frames.
      -e <count>
      -n <count>
               count of frames.
      -z
               Setting up an extra epoch at the very beginning or not.
               0      = No;
               1      = Yes;
               (blank)= Yes. (default)
      -x
               Using extremely strict mode or not.
               0      = No;
               1      = Yes;
               (blank)= Yes. (default)
      -v
               Output level.
               (blank)= All, verbose;
               63   = Errors only.
               127    = Errors and warnings.
               144    = Normal outputs. (default)
      <filename>
               Output file name. Use '-' for a stdout output.

目前软件已经停更了,现在导出的字幕用在4k原盘字幕会过小,有源码,根据字幕动态的强度自动调整帧率从而符合大金规范,望高手接手更新下。
下载地址:链接: https://pan.baidu.com/s/12OLnfdyL-OSkeGJPk65UxQ 提取码: 3ben
gihub-zip链接:链接: https://pan.baidu.com/s/1lh12UdbFCdW5CnXOdlgNUw 提取码: 1a7y

nymph81 发表于 2019-9-23 18:26:55

感谢分享

sunping360 发表于 2019-10-26 08:33:36


谢谢分享,。。。。。。。

Bobbigylz 发表于 2020-6-25 15:03:28

受教了,虽然不懂,感谢楼主分享技术经验

skycharlene 发表于 2020-7-12 15:20:04

学习一下,虽然不会。

dahaonan 发表于 2022-4-11 10:11:09

谢谢楼主分享
页: [1]
查看完整版本: ass转sup字幕工具Spp2Pgs 0.9.3.7