视频写入后,以编程方式向Matroska (mkv)添加附件

Add attachment to Matroska (mkv) programmatically after video write

本文关键字:mkv Matroska 添加 方式 编程 视频      更新时间:2023-10-16

我想在所有视频帧写入后不复制视频数据,将protobuf消息添加到Matroska (mkv)视频文件的附件。这必须是可能的,因为可以使用MKVToolNix套件(用于JPG)将任意文件附加到mkv:

# add attachment, no copy according to man page
mkvpropedit out.mkv --add-attachment ~/Downloads/hummingbird.jpg
.
.
# get attachment id
mkvmerge -i out.mkv
.
Attachment ID 1: type 'image/jpeg', size 821740 bytes, file name 'hummingbird.jpg'
.
# extract attachment
mkvextract attachments out.mkv 1:./test.jpg

我希望能够通过调用库方法执行相同的读写周期。最好不需要先将protobuf消息写入文件(例如,通过传递序列化的protobuf消息的字节数组)。

目前我使用libav读取/写入视频数据从/到mkv。因此,我最喜欢的解决方案也只依赖于libav。如果这是不可能的,我会考虑引入libEBMLlibMatroska作为新的依赖项(与MKVToolNix相同)。

框架中需要调用哪些关键函数来实现目标?

我还没有以编程方式附加文件,但是我能够读取附件。这样做所收集的信息至少也可以帮助实现写作。

附件作为附加流处理。附件的流不包含帧。相反,数据作为额外数据存储到该流的编解码器中。文件名和mime类型作为元数据提供给编解码器。