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

Chr*_* C. 17 metadata ffmpeg aac

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

ffmpeg -i video.mp4 -vn -acodec copy audio.aac
Run Code Online (Sandbox Code Playgroud)

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

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

ffmpeg -i video.mp4 -vn -acodec copy -metadata title="My Title" audio.aac
Run Code Online (Sandbox Code Playgroud)

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

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

ffmpeg -i video.mp4 -vn -acodec copy -metadata title="My Title" audio.mp4
Run Code Online (Sandbox Code Playgroud)

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

ffmpeg -i metadata.aac -vn -acodec copy audio.aac
Run Code Online (Sandbox Code Playgroud)

但是,尝试更改元数据无效:

ffmpeg -i metadata.aac -vn -acodec copy -metadata title="My Title" audio.aac
Run Code Online (Sandbox Code Playgroud)

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

有没有人知道一种让 ffmpeg 在不重新编码的情况下更改 aac 容器中的元数据的方法?

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

非常感谢。克里斯。

Chr*_* C. 14

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

我要感谢@bootload 让我走上正确的道路来寻找答案。

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

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

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