我正在尝试用 C++ 编写一个程序,该程序需要显示 MKV 文件中的元数据并从文件中提取流。
我查看了 libmatroska,发现它很难使用,因为它的级别非常低。除了 mkvtoolnix 之外,也没有任何使用示例,由于必须引入大部分 mkvinfo 和 mkvextract,因此很难使用。 libmediainfo 涵盖了我需要的大部分内容,尽管如果可能的话更灵活会更好。
此外,我发现没有简单的方法可以提取视频流而不使用 mkvextract 将其写入临时文件。
如有任何建议,我们将不胜感激
您只对流的元数据或实际流本身感兴趣吗?
我一直在尝试让 libMatroska 自己工作 (收效甚微),但它似乎只用于解析
.mkv
容器元数据。
如果您想以编程方式提取容器格式中包含的流(视频、音频、字幕、章节等)我建议使用ffmpeg。
根据您的用例,仅使用 cmdline 接口可能就足够了,您可以轻松地提取流(无需重新编码任何内容),例如:
ffmpeg -i input.mkv -map 0:a -acodec copy audio.flac
ffmpeg -i input.mkv -an -c:v copy video.mp4
ffmpeg -i input.mkv -map 0:s:0 subs.srt
或者如果你想获得额外的花哨,你可以直接在c++中使用ffmpeg的库(libavcodec,libavformat等),这有点复杂,但是对于这两个
ffmpeg.exe
都有足够的文档cmdline 并手动使用 libav
(不过,如果你在 Windows 上,如果你想走
libav
路线,你必须自己编译 ffmpeg)
不幸的是,您不能使用
ffmpeg
来解析所有潜在的容器元数据,因为它只处理底层流而不是容器本身。