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

如何使用FFmpeg将FLAC文件转换为ALAC并完整保留所有元数据

如何使用FFmpeg将FLAC文件转换为ALAC并完整保留所有元数据

嗨,我来帮你解决这个FLAC转ALAC时元数据丢失的问题!我之前也碰到过类似的情况——FFmpeg默认的元数据映射有时候确实没法把VorbisComment(FLAC用的元数据格式)完整转换成MP4容器(ALAC常用的m4a格式)支持的QuickTime元数据字段,光加-map_metadata 0和-id3v2_version 2确实不够。

试试这个优化后的命令,应该能解决大部分元数据丢失的问题:

for i in *.flac; do ffmpeg -i "$i" -y -vn -c:a alac -map_metadata 0 -map_metadata:s:a 0:s:a -movflags use_metadata_tags "${i%.flac}".m4a; done

我给你拆解下关键参数的作用:

  • -map_metadata 0:把源文件的全局元数据(比如专辑名、艺术家)映射到输出文件
  • -map_metadata:s:a 0:s:a:专门处理音频流的元数据,避免漏掉流层面的标签
  • -movflags use_metadata_tags:这个是核心!它会让FFmpeg严格按照MP4的元数据规范来转换标签,把FLAC里的VorbisComment对应到正确的QuickTime字段里,之前没加这个的话很多标签会被忽略。

如果还是有个别自定义标签或者特殊字段没被保留,那可以用更手动的方式:先用ffprobe提取FLAC里的标签,再手动注入到输出的m4a中,命令示例如下:

for i in *.flac; do ffmpeg -i "$i" -y -vn -c:a alac \
  -metadata title="$(ffprobe -v error -show_entries format_tags=title -of default=noprint_wrappers=1:nokey=1 "$i")" \
  -metadata artist="$(ffprobe -v error -show_entries format_tags=artist -of default=noprint_wrappers=1:nokey=1 "$i")" \
  -metadata album="$(ffprobe -v error -show_entries format_tags=album -of default=noprint_wrappers=1:nokey=1 "$i")" \
  -metadata genre="$(ffprobe -v error -show_entries format_tags=genre -of default=noprint_wrappers=1:nokey=1 "$i")" \
  -metadata date="$(ffprobe -v error -show_entries format_tags=date -of default=noprint_wrappers=1:nokey=1 "$i")" \
  "${i%.flac}".m4a; done

你可以根据自己的需求添加更多-metadata行,覆盖你需要保留的所有标签。

转换完成后,你可以用这个命令验证元数据是否完整:

ffprobe -show_entries format_tags -of default=noprint_wrappers=1 output.m4a

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 09:18:18