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

标签 ffmpeg libavcodec libav libavformat

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

我可以使用 VLC 播放器(以及 libvlc 库)播放视频并找到信息。但我需要以编程方式对音频和字幕流进行一些处理。我不想使用 SmartRipper 之类的工具分割 VOB,然后再进行处理。

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

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

最佳答案

我不确定在这种情况下 1 帧精度意味着什么。但是,我一直在使用一个名为 lsdvd 的工具。 ,这是一个基本的 CLI 工具,它以 DVD 驱动器的 block 设备为唯一参数。 (如果没有该参数,它会猜测 /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

如果您想编写自己的代码,我想查看 lsdvd 的源代码将会很有启发。它在 Fedora 25 中链接的唯一库(标准库除外)是 libdvdread.so.4,它是 dvdnav 的一部分。项目。

HTH。

关于ffmpeg - 如何获取DVD中的标题和章节信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12239235/

相关文章:

javascript - FFMPEG - 如何将覆盖视频的大小设置为输入大小

java - 视频压缩不适用于 ffmpeg4android_lib 库

ffmpeg - 使用 FFMPEG 更快地分割视频和重新合并剪辑的方法

c - 如何在中使用比特流过滤器

android - Android NDK 中的 FFMPEG - 无法加载库 "libavfilter.so"

video - 如何在 libavformat 中设置 RTP 有效负载类型?

c - 使用 libav* 将 H.264 转码为 VP8 的帧速率不正确

python-3.x - 从 ffmpeg mp4 文件中删除音频

c - 如何关闭 libavformat 错误消息

c++ - 如何逐像素填充AvFrame