如何使用 ffmpeg 向 AAC 文件添加元数据而无需重新编码?

如何使用 ffmpeg 向 AAC 文件添加元数据而无需重新编码?

我正在使用 ffmpeg 从视频文件中提取音频流:

ffmpeg -i video.mp4 -vn -acodec copy audio.aac

这将生成一个干净的音频文件,但没有任何元数据。

要添加元数据,ffmpeg 有一个命令行选项:

ffmpeg -i video.mp4 -vn -acodec copy -metadata title="My Title" audio.aac

运行没有错误,但是当用 ffprobe 检查输出文件时,它根本没有元数据标签。

如果将输出容器改为 mp4,则可以设置元数据并出现在输出文件中:

ffmpeg -i video.mp4 -vn -acodec copy -metadata title="My Title" audio.mp4

有趣的是,如果我使用 Banshee 编辑现有 .aac 文件的元数据,然后使用 ffmpeg 以相同方式处理该文件,则原始元数据将成功复制到新的 .aac 文件中。

ffmpeg -i metadata.aac -vn -acodec copy audio.aac

但尝试更改元数据则不会有任何效果:

ffmpeg -i metadata.aac -vn -acodec copy -metadata title="My Title" audio.aac

因此看起来 .aac 容器可以保存元数据并且 ffmpeg 可以将其从输入复制到输出,但是在使用复制编解码器时无法更改它。

有谁知道如何让 ffmpeg 改变 aac 容器中的元数据而无需重新编码?

或者,是否有另一个通用工具可以用来在文件处理后设置元数据?

非常感谢,克里斯。

答案1

目标是从视频文件生成纯音频文件,无需重新编码,并引入媒体播放器可识别的元数据。环境是 Debian GNU/Linux。

我要感谢@bootload 引导我找到答案的正确途径。

ffmpeg 似乎不支持向 .AAC 输出文件添加元数据标签,但是这里有两种可能的解决方法。

  1. 命令行实用程序 id3 和 id3v2(可从标准存储库获取)可以将 id3 标签应用于 .aac 音频文件。Nautilus 可识别 v1 和 v2 标签样式,因此两者都可以工作。Banshee 媒体播放器可识别相同的标签。
id3v2 -t "My Title" audio.aac
  1. ffmpeg 可以向 MP4 容器添加元数据,但 Nautilus 中的 .mp4 扩展名将显示为视频文件。Apple Inc. 使用非标准扩展名对 MP4 容器进行区分,以区分视频文件 (.m4v) 和音频文件 (.m4a)。Nautilus 和 ffmpeg 在 Debian 下可以识别这些扩展名。因此,
ffmpeg -i video.mp4 -vn -acodec copy -metadata title="My Title" audio.m4a

将生成一个 Nautilus 识别的仅音频文件,并且 ffmpeg 可以安全地将元数据添加到容器中。

答案2

目标硬件是什么?是用于 Apple iP* 设备吗?如果是,请尝试http://atomicparsley.sourceforge.net/ 否则尝试http://ffmpeg.org/ffmpeg.html#示例使用“UTF-8 编码的 INI”mex/demux 方法。(将元数据提取为 utf8 文件并修改并重新插入)。

答案3

MP4盒(属于“gpac”软件包)使用 MP4 容器封装 AAC 文件,而不会改变原始数据。然后可以使用几乎任何标记软件添加元数据:

MP4Box -add old.aac new.mp4

答案4

根据此,这个问题多年前已经修复

使用选项 -write_apetag 例如:

ffmpeg -i video.mp4 -vn -acodec copy -write_apetag 1 -metadata title="My Title" audio.aac

相关内容