cunhan
核心会员
核心会员
帖子: 214
注册时间: 2010-09-20 22:09

【置顶】[Python脚本]BD Chapters MOD - 从mpls中抽取Chapter并输出qpfile

原始脚本来自:jamesthebard http://www.jamesthebard.net/blog/?p=125
有从mpls抽取chapter输出xml的功能
而这个mod在此基础上追加以下功能:
1、增加ogm格式输出,并强制utf8输出
2、按m2ts分隔输出
3、可指定章节项的最大长度,按此值来分割chapter
4、可自动填入章节标题
5、可输出qpfile

运行环境:
Python2 或者 Python3均可。

脚本参数说明如下:
-n CHAPTERNAME, --chapter-name=CHAPTERNAME
给脚本指定一个文本文件,文件内每行包含一个章节标题。脚本会顺序填入即将输出的chapter中。注意:脚本只是“顺序”填入,并不会智能填入,所以类似某些片子部分ep有avant部分ep没有avant的情况就不适用了 -_,-
-f FORMAT, --format=FORMAT
指定chapter输出格式,xml 或 ogm,默认为ogm
-o OUTPUT, --output=OUTPUT
指定输出路径。此参数非必需,若不指定,则脚本按内置命名规则输出;若指定此参数,则脚本以此参数的值为输出路径的前缀,脚本内置命名规则生成文件名后缀,前后缀合并作为输出文件名。
-q, --qpfile
是否输出qpfile的开关,输出路径规则同章节文件输出规则
--force-fps=FORCE_FPS
指定帧率以覆盖mpls记录的m2ts帧率,格式为xxxxx/xxxx,脚本根据此帧率来计算qpfile的输出帧。此参数一般用于对30i片源做IVTC的情况。
--time-code=TIMECODE
向脚本提供一个v2格式的timecode文件,脚本根据此timecode来计算qpfile的输出帧。此参数一般用于片源需要处理成VFR的情况。
--scene-cut
向脚本提供一个scene change的frame list,用以辅助脚本修正qpfile的输出,而chapter也会同步修正输出。因此修正的准确度依赖于所提供的scene change file。
--include=INCLUDE
给定一个5位数字的m2ts文件编号,例如--include 00002,则脚本只输出该编号对应的chapter/qpfile
-l MAXLENGTH, --max-length=MAXLENGTH
指定章节项的时间戳最大值,格式为hh:mm:ss。若在一个playlist里面遇到时间戳大于该值的章节项时,则从该章节项开始分割这个playlist,并调节分割后的时间戳。此功能一般用于对付一个m2ts内含两集动画的情况。
关于qpfile的输出结果:
一般来说,如果不对片源作“改变帧数”处理的话,qpfile中的帧数都是准确对应各章节项的起始帧的。如果您在这种情况下使用本脚本得到的qpfile不是完全准确的,请作为bug报告给作者。
但是,如果对片源做了“改变帧数”的处理,例如IVTC或者手动/自动VFR等等,qpfile的输出结果就很难保证完全准确,使用该qpfile前请对照avs进行必要的修正。这种情况下生成的qpfile一般是有些是准确的有些是不准确的,就权当是参考资料吧。

Q:这个脚本抽出来的chapter好像有问题,我如何确认?
A:可以运行eac3to或者bdtools里的mpls_dump,对照结果。

# changlog:
# 2012-07-21:
# * bug fix: delete "link point"
# 删除"link point"类型的Playlist Mark entry
#
# 2012-02-05:
# * bug fix: exception occured when extract a empty playlist of some m2ts
# * 当mpls里的m2ts的playlist为空时,处理不当而抛异常。
#
# 2011-12-29:
# * add: --scene-cut, give a file contains scene cut frame number, to help script ajust qpfile/chapter output.
# 指定一个内容为scene cut帧号的文件,辅助本脚本修正qpfile/chapter的输出。
# 至于scene cut文件如何来,就请八仙过海吧。例如可以用taro新发布的SCDetect脚本。
# * add: add a comment line to the end of splited qpfile, to give a hint where to trim m2ts file
# 在分割的qpfile文件末尾写入一行注释,记录分割项的第一项在源m2ts的位置,以便trim。


# 2011-12-26:
# * bug fix: error output of splited chapter/qpfile.
# 修正分割时的输出错误
# * bug fix: some mpls fill 00 at the end can't extract.
# 不能抽取那些在文件尾填充00的mpls(例如白兔糖的BD)


下载地址(或者附件):
http://code.google.com/p/cunhan-media-t ... pters_MOD/
附件
BD_Chapters_MOD_20120721.7z
(6.8 KiB) 下载 534 次
上次由 cunhan 在 2012-07-22 0:26,总共编辑 9 次。
头像
-o-o-304-o-o-
超级版主
帖子: 640
注册时间: 2010-10-10 20:00
来自: US
联系: 网站

Re: [Python脚本]BD Chapters MOD - 从BDMV的mpls中抽取Chapter并输出qpfil

拜谢村神~~
► 显示剧情透露 En Taro 06!Taro Pie NC Fanclub project始动!聊天用Q群开放中
► 显示剧情透露 胸中有万言,退敌无一策,是谓书生误国"
► 显示剧情透露 前辈们的信念
► 显示剧情透露 妇联招新广告,走过路过可以看看撒
► 显示剧情透露 香芋派,后期菊苣们的一致选择
► 显示剧情透露 众菊苣喜评香芋派
► 显示剧情透露 聊天用工具
cunhan
核心会员
核心会员
帖子: 214
注册时间: 2010-09-20 22:09

Re: [Python脚本]BD Chapters MOD - 从BDMV的mpls中抽取Chapter并输出qpfil

update @ 2011-12-26

修了两个bug
cunhan
核心会员
核心会员
帖子: 214
注册时间: 2010-09-20 22:09

Re: [Python脚本]BD Chapters MOD - 从BDMV的mpls中抽取Chapter并输出qpfil

update @2011-12-29

增加外部输入scene change frame list,辅助修正qpfile的功能。
头像
06_taro
核心会员
核心会员
帖子: 998
注册时间: 2010-09-22 18:32
来自: United Kingdom
联系: 网站

Re: [Python脚本]BD Chapters MOD - 从BDMV的mpls中抽取Chapter并输出qpfil

代码: 全选

D:\Program Files\Media\MeGUI\tools\ChapterGrabber>D:\Python\27\python.exe BD_Chapters_MOD.py --qpfile "E:\Download\[BDMV]Detective Conan Movie 5 Countdown To Heaven\BDMV\PLAYLIST\00001.mpls"
Input file: E:\Download\[BDMV]Detective Conan Movie 5 Countdown To Heaven\BDMV\PLAYLIST\00001.mpls
Output file: E:\Download\[BDMV]Detective Conan Movie 5 Countdown To Heaven\BDMV\PLAYLIST\00001
Output format: ogm
Traceback (most recent call last):
  File "BD_Chapters_MOD.py", line 533, in <module>
    main(arg, options, p)
  File "BD_Chapters_MOD.py", line 474, in main
    multi_ptsinfo = get_playlist(mpls)
  File "BD_Chapters_MOD.py", line 355, in get_playlist
    info.shift_pts()
  File "BD_Chapters_MOD.py", line 111, in shift_pts
    offset = self.pts[0]
IndexError: list index out of range
An exception occured.
Maybe you can send the info above to the author for debug.
Press Enter to continue
00001.mpls.7z
(284 Bytes) 下载 294 次
2.7和3.2一样
つまんねー事聞くなよ!

I, personally, for me, believe (obviously sometimes) that my OS choice is right. That's me. I'm not telling you that you should believe it. Learn the facts, and the origins behind the facts, and make up your own damn mind. That's why you have one. (source)

Follow me: @06_taro

304——
为纪念伟大的宇宙史上最强压制304先生,联合国教科文组织决定,将每年的第304天,即平年的10月31日或者闰年的10月30日,定为世界304日。
cunhan
核心会员
核心会员
帖子: 214
注册时间: 2010-09-20 22:09

Re: [Python脚本]BD Chapters MOD - 从BDMV的mpls中抽取Chapter并输出qpfil

06_taro 写了:

代码: 全选

D:\Program Files\Media\MeGUI\tools\ChapterGrabber>D:\Python\27\python.exe BD_Chapters_MOD.py --qpfile "E:\Download\[BDMV]Detective Conan Movie 5 Countdown To Heaven\BDMV\PLAYLIST\00001.mpls"
Input file: E:\Download\[BDMV]Detective Conan Movie 5 Countdown To Heaven\BDMV\PLAYLIST\00001.mpls
Output file: E:\Download\[BDMV]Detective Conan Movie 5 Countdown To Heaven\BDMV\PLAYLIST\00001
Output format: ogm
Traceback (most recent call last):
  File "BD_Chapters_MOD.py", line 533, in <module>
    main(arg, options, p)
  File "BD_Chapters_MOD.py", line 474, in main
    multi_ptsinfo = get_playlist(mpls)
  File "BD_Chapters_MOD.py", line 355, in get_playlist
    info.shift_pts()
  File "BD_Chapters_MOD.py", line 111, in shift_pts
    offset = self.pts[0]
IndexError: list index out of range
An exception occured.
Maybe you can send the info above to the author for debug.
Press Enter to continue
00001.mpls.7z
2.7和3.2一样

已修正@2012-02-05
以前大虾也跟我报告过这个bug,不过那时候引起bug的mpls只有一个空playlist,于是我觉得无伤大雅就没更新了
而这次taro报的mpls则既含空playlist也含非空的
cunhan
核心会员
核心会员
帖子: 214
注册时间: 2010-09-20 22:09

Re: [Python脚本]BD Chapters MOD - 从BDMV的mpls中抽取Chapter并输出qpfil

update
# 2012-07-21:
# * bug fix: delete "link point"
# 删除"link point"类型的Playlist Mark entry
头像
upyzl
帖子: 446
注册时间: 2010-12-25 18:44
来自: 湘/京
联系: 网站

Re: 【置顶】[Python脚本]BD Chapters MOD - 从mpls中抽取Chapter并输出qpfile

使用11月的那个版本
qpfile遇到问题:
初音2013Live disc1整体偏多125874帧 disc2整体偏多341648帧
但chapters的时间是准确的
也尝试--force-fps不过没用

这是由于BD的特殊性所致?
cunhan
核心会员
核心会员
帖子: 214
注册时间: 2010-09-20 22:09

Re: 【置顶】[Python脚本]BD Chapters MOD - 从mpls中抽取Chapter并输出qpfile

请提供一下mpls,脚本生产的qpfile文件,以及你期待的正确qpfile。
头像
upyzl
帖子: 446
注册时间: 2010-12-25 18:44
来自: 湘/京
联系: 网站

Re: 【置顶】[Python脚本]BD Chapters MOD - 从mpls中抽取Chapter并输出qpfile

cunhan 写了:请提供一下mpls,脚本生产的qpfile文件,以及你期待的正确qpfile。
fixed为期待正确的qpfile(whole的那个用不上所以没弄fixed...)
顺带上chapters
PLAYLIST.zip
MIKUPA2013INKANSAI_BD_DISC2
(2.21 KiB) 下载 265 次

回到 “封装容器 / Container muxer and demuxer”