读取 Matroska (MKV) 元数据并提取流

问题描述 投票:0回答:1

我正在尝试用 C++ 编写一个程序,该程序需要显示 MKV 文件中的元数据并从文件中提取流。

我查看了 libmatroska,发现它很难使用,因为它的级别非常低。除了 mkvtoolnix 之外,也没有任何使用示例,由于必须引入大部分 mkvinfo 和 mkvextract,因此很难使用。 libmediainfo 涵盖了我需要的大部分内容,尽管如果可能的话更灵活会更好。

此外,我发现没有简单的方法可以提取视频流而不使用 mkvextract 将其写入临时文件。

如有任何建议,我们将不胜感激

c++ video
1个回答
0
投票

您只对流的元数据或实际流本身感兴趣吗?

我一直在尝试让 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的库libavcodeclibavformat等),这有点复杂,但是对于这两个

ffmpeg.exe
都有足够的文档cmdline 并手动使用
libav

(不过,如果你在 Windows 上,如果你想走

libav
路线,你必须自己编译 ffmpeg)

不幸的是,您不能使用

ffmpeg
来解析所有潜在的容器元数据,因为它只处理底层流而不是容器本身。

© www.soinside.com 2019 - 2024. All rights reserved.