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

如何通过Bash+FFmpeg自动为FLAC音频添加专辑封面标签

推荐适用的CLI工具
  • beets:专门用于音乐库管理的命令行工具,原生支持自动匹配元数据、嵌入封面、按规则整理目录结构,可直接配置封面输出分辨率为1000x1000,无需手动编写FFmpeg/ImageMagick处理逻辑,对FLAC等无损格式兼容性极强。
  • eyeD3:专注于音频元数据编辑的CLI工具,操作标签比FFmpeg直观很多,支持通过--add-image参数直接指定封面路径、封面类型、描述信息,无需处理复杂的流映射参数。
  • kid3-cli:可视化元数据编辑工具Kid3的命令行版本,支持批量处理封面嵌入和元数据修改,适配绝大多数音频格式,也支持自定义封面分辨率处理逻辑。
完整可运行Bash脚本

以下脚本修复了原始逻辑中的通配符匹配、文件名空格兼容、临时文件清理等问题,可直接在专辑目录下运行:

#!/bin/bash
# 开启通配符空匹配支持,避免未找到文件时通配符变为普通字符串
shopt -s nullglob
shopt -s extglob

# 检查依赖是否存在
if ! command -v convert &> /dev/null || ! command -v ffmpeg &> /dev/null; then
    echo "错误:需要先安装ImageMagick和FFmpeg"
    exit 1
fi

# 先检查当前目录是否有FLAC文件
flac_files=(*.flac)
if [ ${#flac_files[@]} -eq 0 ]; then
    echo "当前目录未找到FLAC文件,退出"
    exit 0
fi

cover_file=""
temp_cover=""

# 第一步:查找现有封面文件
folder_covers=(folder.@(jpg|jpeg|png|webp))
if [ ${#folder_covers[@]} -gt 0 ]; then
    # 取第一个匹配的封面文件
    cover_file="${folder_covers[0]}"
else
    # 没有封面则从第一个FLAC文件提取
    first_flac="${flac_files[0]}"
    cover_file="folder.png"
    echo "未找到现有封面,从${first_flac}提取封面"
    ffmpeg -i "$first_flac" -vf scale=1000:1000 -an "$cover_file" -y &> /dev/null
    if [ ! -f "$cover_file" ]; then
        echo "提取封面失败,退出"
        exit 1
    fi
fi

# 生成调整尺寸的临时封面
temp_cover="temp_${cover_file##*/}"
convert "$cover_file" -resize 1000x1000 "$temp_cover"
if [ ! -f "$temp_cover" ]; then
    echo "调整封面尺寸失败,退出"
    exit 1
fi

# 批量处理所有FLAC文件
for track in "${flac_files[@]}"; do
    echo "处理文件:$track"
    temp_track="${track%.flac}_with_art.flac"
    # 嵌入封面,静默输出
    ffmpeg -i "$track" -i "$temp_cover" -map a -map 1:v -disposition:v attached_pic -metadata:s:v comment="Cover (Front)" -codec copy "$temp_track" -y &> /dev/null
    if [ -f "$temp_track" ]; then
        rm "$track"
        mv "$temp_track" "$track"
    else
        echo "处理${track}失败,跳过"
        continue
    fi
done

# 清理临时文件
rm -f "$temp_cover"

echo "所有文件处理完成"

脚本使用说明

  1. 将上述内容保存为embed_album_art.sh
  2. 执行chmod +x embed_album_art.sh赋予执行权限
  3. 进入对应专辑目录后执行/path/to/embed_album_art.sh即可
  4. 如果需要批量处理所有专辑目录,可在音乐库根目录执行以下命令遍历所有子目录运行脚本:
find /path/to/your/music/library -type d -exec bash -c 'cd "{}" && /path/to/embed_album_art.sh' \;

内容的提问来源于stack exchange,提问作者satanobsidian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:21:01