如何获取DVD中的标题和章节信息?

Tar*_*han 8 ffmpeg libavcodec libav libavformat

我发现很多关于使用ffmpeg创建DVD菜单的问题,但我没有发现任何关于以编程方式访问DVD结构信息的问题.当我使用libav(或FFmpeg)库时,我可以打开DVD映像(iso文件)并访问视频,音频和字幕流.但我找不到任何API.

我可以使用VLC播放器(以及libvlc库)播放视频和查找信息.但我需要在程序上对音频和字幕流进行一些处理.我不想使用像SmartRipper这样的工具拆分VOB,然后才进行处理.

libav(ffmpeg)是否包含用于处理DVD菜单的任何API?如果没有,您能否推荐任何其他库,可用于获取有关标题(章节)开始和结束时间的信息,一帧(样本,AVPacket)准确度?

我听说过libdvdnav库,但我不知道它是否适合我.我是libav和DVD格式内部的新手.

小智 5

我不确定在这种情况下1帧精度意味着什么.但是,我一直在使用一个名为lsdvd的工具,它是一个基本的CLI工具,它只作为参数,是DVD驱动器的块设备.(没有那个参数,它会猜测/dev/dvd,这在现代Linux上是缺乏的,并且通常是/dev/sr0.)然后它会给你一个很好的光盘章节列表,如下所示:

$ lsdvd /dev/sr0
Disc Title: METAL_DISC_2
Title: 01, Length: 00:00:00.433 Chapters: 01, Cells: 01, Audio streams: 01, Subpictures: 01
Title: 02, Length: 00:00:11.500 Chapters: 01, Cells: 01, Audio streams: 01, Subpictures: 00
Title: 03, Length: 00:00:00.433 Chapters: 01, Cells: 01, Audio streams: 01, Subpictures: 01
Title: 04, Length: 00:00:00.433 Chapters: 01, Cells: 01, Audio streams: 01, Subpictures: 01
Title: 05, Length: 00:00:09.000 Chapters: 01, Cells: 01, Audio streams: 01, Subpictures: 00
Title: 06, Length: 00:00:10.000 Chapters: 01, Cells: 01, Audio streams: 01, Subpictures: 00
Title: 07, Length: 00:00:00.433 Chapters: 01, Cells: 01, Audio streams: 01, Subpictures: 01
Title: 08, Length: 00:25:02.333 Chapters: 06, Cells: 06, Audio streams: 01, Subpictures: 00
Title: 09, Length: 00:00:00.433 Chapters: 01, Cells: 01, Audio streams: 01, Subpictures: 00
Title: 10, Length: 00:07:48.700 Chapters: 16, Cells: 16, Audio streams: 01, Subpictures: 00
Title: 11, Length: 00:00:00.433 Chapters: 01, Cells: 01, Audio streams: 01, Subpictures: 00
Title: 12, Length: 00:16:43.066 Chapters: 08, Cells: 08, Audio streams: 01, Subpictures: 00
...snip...
Longest track: 20
Run Code Online (Sandbox Code Playgroud)

如果你想编写自己的代码,我认为查看源代码lsdvd将具有指导意义.它在Fedora 25中链接的唯一库(标准内容除外)是dvdnav项目的libdvdread.so.4一部分.

HTH.


小智 3

Mplayer 可以做到这一点。我不熟悉他们的图书馆,但这可以帮助您入门

mplayer dvd:// -identify
Run Code Online (Sandbox Code Playgroud)

结果

章节:00:00:00.000,00:03:40.200,00:07:29.500,00:12:04.033,00:16:17.199,
00:27:36.499,00:34:26.166,00:43:37.199,00:49:29.533,00:59:46.500,01:12:47.667,
01:17:09.000,01:26:13.700,01:47:15.833,01:50:06.200,01:55:25.500,02:06:42.500,
02:13:03.666,02:20:37.499,02:28:20.832,02:33:26.832,02:37:47.532,02:43:58.665,
02:51:00.165,02:56:36.165,03:01:21.998,03:05:09.331,03:07:14.665,03:11:49.665,
03:16:35.165,

  • 我添加了“-frames 0”选项以防止实际播放视频。示例:`mplayer -identify -frames 0 '/path/to/VIDEO_TS.IFO 2>/dev/null | grep 章节:` (3认同)