在视频写入后以编程方式添加到Matroska(mkv)的附件

时间:2015-10-01 13:40:23

标签: c++ ffmpeg libav mkv matroska

我想在写完所有视频帧而不复制视频数据后,将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相同)。

为实现目标需要调用的框架中的关键功能是什么?我很确定mbunkus知道解决方案......

1 个答案:

答案 0 :(得分:0)

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

附件作为附加流处理。附件的流不包含框架。相反,数据作为extradata存储到此流的编解码器中。文件名和mime类型作为编解码器的元数据给出。