国语视界

 找回密码
 立即注册
搜索
查看: 273|回复: 20

[蓝光技术] 请问如何获得音轨的timeshift和字幕的fps信息?

[复制链接]
  • TA的每日心情
    无聊
    19-11-11 21:30
  • 签到天数: 2 天

    [LV.1]初来乍到

    8

    主题

    54

    帖子

    16

    积分

    列兵

    Rank: 1

    大洋
    125
    矿工
    0
    发表于 19-11-8 21:52 | 显示全部楼层 |阅读模式
    我想制作一个批量自动提取chinese音轨和字幕的python脚本,核心是调用tsMuxeR命令行工具进行demux(GUI版本制作批量处理工具比较困难)。现在遇到的问题是给tsMuxeR命令行工具制作.meta文件时,发现有的音轨具有timeshift参数,有的字幕具有fps参数(GUI版本中可以自动分析得到),但tsMuxeR命令行获得的信息中没有包含这些必要参数。因此来版上请教大家,应该如何获取音轨和字幕的这些参数?
  • TA的每日心情
    开心
    16-11-26 19:53
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    62

    主题

    106

    帖子

    1398

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    大洋
    121218
    矿工
    177
    发表于 19-11-8 22:16 | 显示全部楼层
    tsMuxeR和tsMuxeR gui都是开源的,你如果不懂c我可以帮你看看
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    16-11-26 19:53
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    62

    主题

    106

    帖子

    1398

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    大洋
    121218
    矿工
    177
    发表于 19-11-8 22:29 | 显示全部楼层
    1. QString TsMuxerWindow::getAudioMetaInfo(QtvCodecInfo* codecInfo)
    2. {
    3.   QString rezStr = codecInfo->programName + ", ";
    4.     rezStr += getFileList(codecInfo);
    5.   if (codecInfo->delay != 0)
    6.     rezStr += QString(", timeshift=") + QString::number(codecInfo->delay) + "ms";
    7.   if (codecInfo->dtsDownconvert && codecInfo->programName == "A_DTS")
    8.     rezStr += ", down-to-dts";
    9.   else if (codecInfo->dtsDownconvert && codecInfo->programName == "A_AC3")
    10.     rezStr += ", down-to-ac3";
    11.     if (codecInfo->isSecondary)
    12.         rezStr += ", secondary";
    13.   return rezStr;
    14. }
    复制代码
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    299

    帖子

    145

    积分

    论坛大神

    大洋
    2199
    矿工
    0
    QQ
    发表于 19-11-8 23:45 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    19-11-11 21:30
  • 签到天数: 2 天

    [LV.1]初来乍到

    8

    主题

    54

    帖子

    16

    积分

    列兵

    Rank: 1

    大洋
    125
    矿工
    0
     楼主| 发表于 19-11-9 22:04 | 显示全部楼层
    世界哪有真情lu 发表于 19-11-8 23:45
    tsMuxeR 源码~~
    https://github.com/justdan96/tsMuxer

    感谢二位大佬,原来tsMuxeR仍然有人在维护。由于我的工作完全与软件开发和多媒体编程无关,我先试试最新版的tsMuxeR,如果命令行版本已经可以输出完整信息,那问题就已经得到了解决。有新情况我再来版上汇报进展。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    19-11-11 21:30
  • 签到天数: 2 天

    [LV.1]初来乍到

    8

    主题

    54

    帖子

    16

    积分

    列兵

    Rank: 1

    大洋
    125
    矿工
    0
     楼主| 发表于 19-11-9 23:01 | 显示全部楼层
    本帖最后由 yellowolf 于 19-11-9 23:03 编辑


    非常感谢大佬。
    我从事的工作(电气工程),与软件开发和多媒体编程相差比较远,我也就是能用python边百度边写,弄点傻瓜化的程序,从源码级别修改完善eac3to和txMuxeR很困难。
    您提示的这段程序代码上我能看懂,但我的具体困难可能是如何获得codecInfo,而且至少是从.m2ts文件、最好是从.mpls文件获得(因为有很多资源是由多个m2ts组成的所谓肉酱盘)。为了说清楚问题,我还是向大大完整汇报一下来龙去脉,请大大指导解决方案。
    为了实现批量提取国语音轨和字幕的目标,我先后尝试了eac3to和tsMuxeR两个方案。
    eac3to的问题是:
    1、经测试,eac3to 3.34不支持含5.1 core的7.1 E-AC3,只能使用-core参数。
    2、更麻烦的是,有些资源提取出来的音频被发现与视频不同步。似乎是eac3to发现了音频流中存在gap而引入2nd pass时就会出现(不充分测试)。
    tsMuexR的问题是:
    1、命令行版本需要编写.meta文件,但是,只有使用GUI版本才能自动生成所需参数。如资源Toy.Story.4.2019.ULTRAHD.Blu-ray.2160p.HEVC.TrueHD.Atmos.7.1-xxx(55.6 GB,纯研究,为了避免引起发布组不快此处隐去名称),GUI版本可以得到最后一条音轨的timeshift参数,
    A_AC3, "F:\_Hashed\_UHD\Toy.Story.4.2019.ULTRAHD.Blu-ray.2160p.HEVC.TrueHD.Atmos.7.1-xxx\BDMV\PLAYLIST\00004.mpls", timeshift=300ms, track=4358, lang=zho。然而这个参数在命令行版本的分析结果中却根本没有,因此无法独立于GUI版本进行自动化输出。
    2、不能正确parser部分资源(包括上述案例)的.mpls文件,一处理便报错。经观察似乎是把部分m2ts文件名识别成了乱码。
    3、由于tsMuexR的批量处理尚未实现,可能还有其他问题。
    由于我有约300个原盘需要处理,我很需要一个能全面处理各种格式、可靠输出结果的程序。我打算两个软件都调用,对它们的处理结果进行自动化比较,当发现明显差异时提示我。这是后话了,目前的关键是如何用tsMuxeR命令行版本进行demux。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    16-11-26 19:53
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    62

    主题

    106

    帖子

    1398

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    大洋
    121218
    矿工
    177
    发表于 19-11-10 09:08 | 显示全部楼层
    本帖最后由 bobo 于 19-11-10 12:19 编辑

    看了下ts gui的代码,是用qt5写的,95%的代码是用来做人机交互的。真正实现处理工作的代码非常简单,调用tsmuxer程序加文件名,获得侍处理文件的回显示信息并格式化,其中有一项叫Stream delay: 就是你要的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    16-11-26 19:53
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    62

    主题

    106

    帖子

    1398

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    大洋
    121218
    矿工
    177
    发表于 19-11-10 09:42 | 显示全部楼层
    简单测试了下,可以正常获取延迟信息,看下图

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    19-11-11 21:30
  • 签到天数: 2 天

    [LV.1]初来乍到

    8

    主题

    54

    帖子

    16

    积分

    列兵

    Rank: 1

    大洋
    125
    矿工
    0
     楼主| 发表于 19-11-10 13:17 | 显示全部楼层
    本帖最后由 yellowolf 于 19-11-10 13:22 编辑
    bobo 发表于 19-11-10 09:42
    简单测试了下,可以正常获取延迟信息,看下图


    非常感谢。是我检查得不够仔细,时延参数可以在命令行界面中找到。现在还有一个问题,tsMuxeR不能正常解析一部分.mpls文件。执行命令"tsMuxeR.exe" "F:\_Hashed\_UHD\Toy.Story.4.2019.ULTRAHD.Blu-ray.2160p.HEVC.TrueHD.Atmos.7.1-xxx\BDMV\PLAYLIST\00004.mpls",解析结果在此处终止:



    在.meta中指定这条mpls,tsmuxer在demux一开始就会报告无法解析的错误。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    19-11-11 21:30
  • 签到天数: 2 天

    [LV.1]初来乍到

    8

    主题

    54

    帖子

    16

    积分

    列兵

    Rank: 1

    大洋
    125
    矿工
    0
     楼主| 发表于 19-11-10 13:19 | 显示全部楼层
    本帖最后由 yellowolf 于 19-11-10 13:31 编辑

    txmuxer的GUI版本也无法解析这个资源的“所有”.mpls文件,任意一条.mpls解析结果如下:



    demux就会报错:



    每一条.mpls文件都有这样的问题。但是,在bdinfo和python程序中却都是可以正常解析的。bdinfo的解析结果如下:



    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    19-11-11 21:30
  • 签到天数: 2 天

    [LV.1]初来乍到

    8

    主题

    54

    帖子

    16

    积分

    列兵

    Rank: 1

    大洋
    125
    矿工
    0
     楼主| 发表于 19-11-10 13:49 | 显示全部楼层
    bobo 发表于 19-11-10 09:08
    看了下ts gui的代码,是用qt5写的,95%的代码是用来做人机交互的。真正实现处理工作的代码非常简单,调用ts ...

    大大,我试了一下,单独的mpls文件发上来没用,必须结合.m2ts才能测试。
    我把tsmuxer的代码下载回来了,打算调试看看解析的BUG出在哪里,也想评估一下解决.mpls解析bug的难度。
    那么很圡的问题来了,请问应该用什么IDE比较好?我目前只会用pycharm这类轻量级工具作调试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    19-12-7 00:07
  • 签到天数: 513 天

    [LV.9]以坛为家II

    4

    主题

    616

    帖子

    1009

    积分

    营长

    Rank: 5Rank: 5

    大洋
    686
    矿工
    34
    发表于 19-11-10 14:51 | 显示全部楼层
    你是拿DIY过的盘测试,还是未DIY的?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    19-11-11 21:30
  • 签到天数: 2 天

    [LV.1]初来乍到

    8

    主题

    54

    帖子

    16

    积分

    列兵

    Rank: 1

    大洋
    125
    矿工
    0
     楼主| 发表于 19-11-10 15:40 | 显示全部楼层
    hyb9373 发表于 19-11-10 14:51
    你是拿DIY过的盘测试,还是未DIY的?

    回大大,是我自己从一些PT站搜集的DIY原盘。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    18-12-14 23:18
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    7

    主题

    321

    帖子

    319

    积分

    排长

    Rank: 3Rank: 3

    大洋
    5209
    矿工
    0
    发表于 19-11-11 09:57 | 显示全部楼层
    hyb9373 发表于 19-11-10 14:51
    你是拿DIY过的盘测试,还是未DIY的?

    DIY的盘一样可以扫描读取,不能读,那发布的作品字幕音轨信息哪来。所以跟DIY与否无关
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    19-12-7 00:07
  • 签到天数: 513 天

    [LV.9]以坛为家II

    4

    主题

    616

    帖子

    1009

    积分

    营长

    Rank: 5Rank: 5

    大洋
    686
    矿工
    34
    发表于 19-11-11 12:46 | 显示全部楼层
    jack_son 发表于 19-11-11 09:57
    DIY的盘一样可以扫描读取,不能读,那发布的作品字幕音轨信息哪来。所以跟DIY与否无关 ...

    你看他ts有张图有乱码,00055m2ts后面应该是00057,然而不是,我没有这个原盘,也没有DIY过的,所以无法确认是否是DIY原因造成的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    19-11-11 21:30
  • 签到天数: 2 天

    [LV.1]初来乍到

    8

    主题

    54

    帖子

    16

    积分

    列兵

    Rank: 1

    大洋
    125
    矿工
    0
     楼主| 发表于 19-11-11 20:16 | 显示全部楼层
    本帖最后由 yellowolf 于 19-11-11 20:33 编辑

    为了调试这个问题,我安装了qt-creator、cmake、MIinGW-w64。在搭建的这个环境里,简单的cpp可以编译成功。但是编译tsmuxer时却在最后连接时报告错误:
    19:39:46: Running steps for project tsmuxer...
    19:39:47: Starting: "C:\Program Files\CMake\bin\cmake.exe" --build . --target all
    jom: parallel job execution disabled for Makefile
    [ 1%] Linking CXX executable tsmuxer.exe
    D:/Software/mingw64(posix)/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lmediation
    collect2.exe: error: ld returned 1 exit status
    jom: D:\Software (x86)\_Encode\tsMuxer-master\build-tsMuxer-test111-Debug\CMakeFiles\tsmuxer.dir\build.make [tsmuxer.exe] Error 1
    jom: D:\Software (x86)\_Encode\tsMuxer-master\build-tsMuxer-test111-Debug\CMakeFiles\Makefile2 [CMakeFiles\tsmuxer.dir\all] Error 2
    jom: D:\Software (x86)\_Encode\tsMuxer-master\build-tsMuxer-test111-Debug\Makefile [all] Error 2
    19:39:55: The process "C:\Program Files\CMake\bin\cmake.exe" exited with code 2.
    Error while building/deploying project tsmuxer (kit: test111)
    When executing step "CMake Build"
    19:39:55: Elapsed time: 00:09.
    谷歌了很久,似乎是缺少库libmediation。注意到项目目录下有个同名文件夹,我把它编译了,生成的有用文件似乎是libmediation.a。另外,我还在工程设置中勾上了依赖项:


    但是还是会报告这个找不到库的错误。请问如何把这个库包含进去?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    16-11-26 19:53
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    62

    主题

    106

    帖子

    1398

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    大洋
    121218
    矿工
    177
    发表于 19-11-11 22:02 | 显示全部楼层
    本帖最后由 bobo 于 19-11-11 22:32 编辑



    图上面的libmediation目录,先用cmake编译,此时目录下会生成makefile文件,完成后使用命今make install安装你编译文件,如果不行查看用户变量PATH ,并手动复制到相关目录。

    另外看你的截图好像mpls有问题。



    看文件名是乱码啊,ts中断因该是ts不支持这种编码方式。你可以在其它原盘或不同的mpls测试下。

    最后,你如果能看懂c,就不用编译调试了,如果你看不懂就算编译完,你还是不懂。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    18-12-14 23:18
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    7

    主题

    321

    帖子

    319

    积分

    排长

    Rank: 3Rank: 3

    大洋
    5209
    矿工
    0
    发表于 19-11-12 16:22 | 显示全部楼层
    波波大威武,啥语言都懂,膜拜
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    19-11-11 21:30
  • 签到天数: 2 天

    [LV.1]初来乍到

    8

    主题

    54

    帖子

    16

    积分

    列兵

    Rank: 1

    大洋
    125
    矿工
    0
     楼主| 发表于 19-11-12 19:26 | 显示全部楼层
    bobo 发表于 19-11-11 22:02
    图上面的libmediation目录,先用cmake编译,此时目录下会生成makefile文件,完成后使用命今make install ...


    谢谢波波大。多谢您的提醒,我确定自己慢慢看C是看得懂的。如果有具体的问题,我就厚着脸皮到版上来请教。
    mpls文件应该没有问题,原盘可以正常播放,然后github上的这个库:
    https://github.com/Guymer/PyGuymer
    也能正常解析mpls中的所有信息,每个mpls都能列出所有相关的m2ts文件列表。
    我是在windows下面调试,您说的make install暂时不能用。
    我现在离开始调试只差一步了:目前可以通过手动复制这个自编库的文件然后在命令行下编译连接成功了,不过有个条件,只能对库和tsmuxer分别编译,就是必须分别使用它们各自的CMakeLists.txt文件编译。如果使用项目master根目录下的CMakeLists.txt联合编译,则会报告如下错误:
    1. E:\Code\cpp\tsMuxer-master2\tsMuxer\textSubtitlesRender.cpp:217:17: warning: overflow in conversion from 'std::__cxx11::basic_string<char>::size_type' {aka 'long long unsigned int'} to 'int' changes value from '18446744073709551615' to '-1' [-Woverflow]
    2.   return string::npos;
    3.                  ^~~~
    4. [ 85%] Building CXX object tsMuxer/CMakeFiles/tsmuxer.dir/tsDemuxer.cpp.obj
    5. [ 86%] Building CXX object tsMuxer/CMakeFiles/tsmuxer.dir/tsMuxer.cpp.obj
    6. [ 88%] Building CXX object tsMuxer/CMakeFiles/tsmuxer.dir/tsPacket.cpp.obj
    7. [ 90%] Building CXX object tsMuxer/CMakeFiles/tsmuxer.dir/utf8Converter.cpp.obj
    8. [ 91%] Building CXX object tsMuxer/CMakeFiles/tsmuxer.dir/vc1Parser.cpp.obj
    9. [ 93%] Building CXX object tsMuxer/CMakeFiles/tsmuxer.dir/vc1StreamReader.cpp.obj
    10. [ 95%] Building CXX object tsMuxer/CMakeFiles/tsmuxer.dir/vod_common.cpp.obj
    11. [ 96%] Building CXX object tsMuxer/CMakeFiles/tsmuxer.dir/wave.cpp.obj
    12. [ 98%] Building CXX object tsMuxer/CMakeFiles/tsmuxer.dir/osdep/textSubtitlesRenderWin32.cpp.obj
    13. [100%] Linking CXX executable tsmuxer.exe
    14. CMakeFiles\tsmuxer.dir/objects.a(matroskaDemuxer.cpp.obj):matroskaDemuxer.cpp:(.text+0x17c0): undefined reference to `inflateInit_'
    15. CMakeFiles\tsmuxer.dir/objects.a(matroskaDemuxer.cpp.obj):matroskaDemuxer.cpp:(.text+0x1852): undefined reference to `inflate'
    16. CMakeFiles\tsmuxer.dir/objects.a(matroskaDemuxer.cpp.obj):matroskaDemuxer.cpp:(.text+0x188a): undefined reference to `inflateEnd'
    17. collect2.exe: error: ld returned 1 exit status
    18. make[2]: *** [tsMuxer\CMakeFiles\tsmuxer.dir\build.make:935: tsMuxer/tsmuxer.exe] Error 1
    19. make[1]: *** [CMakeFiles\Makefile2:144: tsMuxer/CMakeFiles/tsmuxer.dir/all] Error 2
    20. make: *** [Makefile:129: all] Error 2
    复制代码


    CMakeLists.txt文件内容:
    1. cmake_minimum_required (VERSION 3.1)
    2. project (tsmuxer_main)

    3. set(CMAKE_CXX_STANDARD 11)
    4. set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
    5. set(CMAKE_CXX_EXTENSIONS FALSE)

    6. if (WIN32)
    7.   set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWIN32")
    8. else()
    9.   if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    10.     set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMAC")
    11.   else()
    12.     set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLINUX")
    13.   endif()
    14. endif()

    15. add_subdirectory (libmediation)
    16. add_subdirectory (tsMuxer)
    17. if(TSMUXER_GUI)
    18.         add_subdirectory (tsMuxerGUI)
    19. endif()
    复制代码


    谷歌了一圈,好像是zlib.h的问题。求指点
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    16-11-26 19:53
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    62

    主题

    106

    帖子

    1398

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    大洋
    121218
    矿工
    177
    发表于 19-11-12 21:57 | 显示全部楼层
    https://github.com/filler56789/RV-tsMuxeR
    这里有个zlib库你可试试编译它
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|cnlang.org

    GMT+8, 19-12-7 09:41 , Processed in 0.019367 second(s), 6 queries , Gzip On, MemCache On.

    Powered by Discuz! X3.4

    © 2001-2018 Comsenz Inc.

    快速回复 返回顶部 返回列表