FFMPEG 附加文件作为元数据

Posted

技术标签:

【中文标题】FFMPEG 附加文件作为元数据【英文标题】:FFMPEG attach file as metadata 【发布时间】:2015-08-11 19:51:41 【问题描述】:

我有一组图像,我想使用 ffmpeg 将其转换为视频。以下命令运行良好:

ffmpeg -y -i frames/%06d.png -c:v huffyuv -pix_fmt rgb24 testout.mkv

我在一个二进制文件中有一些元数据,我想将其附加到视频中。我尝试执行以下操作,但它给了我一个错误:

ffmpeg -y -i frames/%06d.png -c:v huffyuv -pix_fmt rgb24 -attach mybinaryfile -metadata:s:2 mimetype=application/octet-stream testout.mkv

这是错误:

[matroska @ 0x656460] Codec for stream 1 does not use global headers but container format requires global headers
[matroska @ 0x656460] Attachment stream 1 has no mimetype tag and it cannot be deduced from the codec id.
Output #0, matroska, to 'testout.mkv':
  Metadata:
    encoder         : Lavf56.33.101
    Stream #0:0: Video: huffyuv (HFYU / 0x55594648), rgb24, 640x640, q=2-31, 200 kb/s, 25 fps, 1k tbn, 25 tbc
    Metadata:
      encoder         : Lavc56.39.100 huffyuv
    Stream #0:1: Attachment: none
    Metadata:
      filename        : 2ceb-1916-56bb-3e10
Stream mapping:
  Stream #0:0 -> #0:0 (png (native) -> huffyuv (native))
  File 2ceb-1916-56bb-3e10 -> Stream #0:1
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument

如果有人可以向我解释我做错了什么,那就太好了:)

【问题讨论】:

【参考方案1】:

您需要正确指定您的流

例子:

ffmpeg -y -i frames/%06d.png -c:v huffyuv -pix_fmt rgb24 -attach mybinaryfile \
-metadata:s:t mimetype=application/octet-stream testout.mkv

此命令将为所有附件 (t) 流 (s) 设置元数据。如果您有多个附件,并且元数据不同,则必须更具体,例如:

-metadata:s:t:0 mimetype=text/plain \
-metadata:s:t:1 mimetype=application/gzip

这会将第一个附件的元数据设置为mimetype=text/plain,将第二个附件的元数据设置为mimetype=application/gzip。请记住,流索引从0 开始,因此第一个流标记为0

你的命令出了什么问题

使用-metadata:s:2(似乎已从文档中逐字复制)设置第三个流的元数据,无论流类型如何(因为不存在说明符),但您的输出仅包含两个流。

附件:无

你可能会看到这样的东西:

Output #0, matroska, to 'output.mkv':
...
    Stream #0:1: Attachment: none
    Metadata:
      filename        : 2ceb-1916-56bb-3e10
      mimetype        : application/octet-stream

Attachment: none不代表没有附件,而是没有与之关联的格式,所以可以忽略。

另见

Stream specifiers 和 -attach-metadata-map_metadata 上的 ffmpeg documentation 了解更多详情。

【讨论】:

以上是关于FFMPEG 附加文件作为元数据的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg文档23-元数据(metadata)

使用 FFmpeg 检索和保存媒体元数据

如何使用 ffmpeg 删除所有元数据?

ffmpeg vs mediainfo 用于获取缩略图和元数据

ffmpeg 在 php 或 python 中获取元数据

使用 ffmpeg 复制 GoPro 元数据 - 找不到编解码器的标签无