You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FFmpeg保留MP3指定元数据标签(专辑与封面)的方法求助

FFmpeg保留MP3指定元数据标签(专辑与封面)的方法求助

嗨,我来帮你搞定这个问题!你的思路方向是对的,但FFmpeg的-map_metadata参数用法和你想的不一样——它不能直接指定单个标签名来保留,而且封面图片不属于普通的元数据标签,是作为附加流存在的,得单独处理。

先给你捋清楚问题出在哪:

  • -map_metadata -1确实会清除所有元数据,但后面的-map_metadata album这种写法是错误的,这个参数是用来指定元数据的来源(比如从哪个输入流或文件读取),不是直接指定单个标签。
  • 封面图片是MP3里的APIC帧,对应FFmpeg里的图片附加流,不能用元数据参数处理,得用-map来保留这个流。

下面给你两种在Windows 11下完全可行的方案:

方案一:先清所有元数据,再提取写入专辑标签+保留封面

这个方法需要先用ffprobe提取原文件的专辑标签值,再用FFmpeg写入,一步到位的话可以用命令嵌套:

一步执行版(命令提示符中运行)

for /f "delims=" %a in ('ffprobe -v error -show_entries format_tags=album -of default=noprint_wrappers=1:nokey=1 "input.mp3"') do ffmpeg -i "input.mp3" -map 0:a -map 0:v? -c copy -map_metadata -1 -metadata album="%a" "output.mp3"

如果是写在批处理.bat文件里,记得把%a改成%%a。

参数解释

  • -map 0:a:保留输入文件的音频流
  • -map 0:v?:如果输入有封面图片流就保留它,?表示没有也不会报错
  • -c copy:直接复制流不重新编码,速度超快
  • -map_metadata -1:彻底清除所有元数据标签
  • -metadata album="%a":把从原文件提取的专辑名写入新文件

方案二:逐个删除不需要的标签(适合标签少的情况)

如果原MP3的元数据标签不多,也可以直接把不需要的标签设为空,FFmpeg会自动移除它们,同时保留专辑和封面:

ffmpeg -i "input.mp3" -map 0:a -map 0:v? -c copy -metadata title="" -metadata artist="" -metadata genre="" -metadata date="" "output.mp3"

这里只需要把除了album之外的标签都设为空就行,缺点是如果原文件有很多冷门标签,得一个个列出来删除,不如方案一高效。

另外要注意:有些MP3的封面可能嵌在元数据里而非单独流,这种情况方案一也能处理,因为-map_metadata -1只会清除标签,不会影响流里的封面。

你先试试方案一,应该完美符合你的需求!

备注:内容来源于stack exchange,提问作者Ricardo Bohner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:08:14