无法使用FFmpeg将评论的元数据写入MP3文件

4
我想使用FFmpeg将AAC音频文件转换为MP3并在MP3文件的元数据中添加注释。 -metadata comment选项无效,FFmpeg没有返回错误信息。
我运行的完整命令是: ffmpeg -i "test.aac" -ab 128k -metadata comment='this is test' "test.mp3" 我还尝试了-metadata description='this is test',甚至更新了FFmpeg。其他选项如-metadata artist-metadata album可以很好地工作。
这种方法有什么问题吗?
Stream mapping:
  Stream #0:0 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, mp3, to 'test.mp3':
  Metadata:
    description     : this is test
    TSSE            : Lavf58.29.100
    Stream #0:0: Audio: mp3 (libmp3lame), 48000 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc58.54.100 libmp3lame

环境
ffmpeg版本4.2.2版权所有(c) 2000-2019 FFmpeg开发者
使用Apple clang版本11.0.3 (clang-1103.0.32.59)进行构建

2个回答

3
可能出现了一个错误。 ffmpeg 正在将注释元数据作为用户文本帧(TXXX),而不是预期的注释(COMM)进行编写。
目前,我建议使用另一种工具来添加注释标记,例如 eyeD3
eyeD3 --comment "added a comment" input.mp3

我非常高兴找到了这个答案,因为eyeD3在我的共享Web托管服务器上从非特权帐户中安装非常容易。 - Fred Sobotka

2
默认情况下,ffmpeg 会向 MP3 输出文件写入ID3v2标签。截至版本4.3.1(甚至包括snapshot 2021-02-10和2022-09-20),它仍然被错误地写成了TXXX帧而不是COMM帧 - /libavformat/id3v2.c 没有处理所需的关联,而/libavformat/id3v2enc.c 则表明-comment参数仅在提供要嵌入的图形(即专辑封面)时使用。
作为替代方案,您可以强制使用 ID3v1 标签(带有其所有缺点)。您还必须禁用 ID3v2 标签的创建,因为几乎每个遇到两个 ID3 版本的软件都更喜欢来自 v2 的数据。要添加的参数是 -write_id3v1 true -id3v2_version 0,因此整个执行过程如下(在 Windows 上):
ffmpeg -i "test.aac" -ab 128k -metadata "comment=this is a test" -write_id3v1 true -id3v2_version 0 "test.mp3"

这个按预期工作:没有ID3v2标签,只有一个填写了注释的ID3v1标签。在comment之前开始并在test之后结束的引号是必需的,以便Windows知道该参数从哪里开始和结束(默认情况下不是从下一个空格字符开始,这也是文件名应该放在引号中的原因)。

尝试您建议的方法,ffmpeg -i "sample.wav" -ab 320k -metadata comment='this is test' -write_id3v1 true -id3v2_version 0 "test.mp3" 在 Windows 10 命令提示符上的 ffmpeg version 2022-09-19-git-4ba68639ca-full_build-www.gyan.dev 上无法正常工作。我收到了错误消息:Unable to find a suitable output format for 'is' is: Invalid argument(现在已经没有官方的 Windows 构建版本了。FFmpeg 网站上唯一链接的两个构建版本来自 BtbN 和 gyan.dev)。 - Arete
你是对的:我已经根据BtbN发布将示例从comment='with space'更正为"comment=with space",以适用于Windows 7x64。旧版本的行为相同 - 我可能只是复制了OP的示例,而没有实际使用空格。 - AmigoJack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接