菜鸟科技网

flac镜像命令具体怎么用?

“镜像”在 FLAC 的语境下通常有两种理解:

flac镜像命令具体怎么用?-图1
(图片来源网络,侵删)
  1. 精确备份:创建一个与原始音频 CD 完全相同的 1:1 副本,包括所有轨道、元数据和 CD-TEXT(如果有的话),这个副本是一个包含 .cue.flac 文件(或一个大的 .flac 文件)的文件夹。
  2. 批量转换:将一个包含多个音频文件的文件夹(如 MP3、WAV)中的所有文件,全部转换为 FLAC 格式,并保持原有的文件夹结构。

下面我将针对这两种情况,提供最常用和最强大的命令行工具。


核心工具

  • flac:FLAC 官方的命令行编码器/解码器,用于编码和解码 FLAC 文件。
  • shntool:一个强大的命令行工具,用于处理无损音频文件,特别是分割和合并,它经常与 flac 配合使用。
  • sox:“Swiss Army knife of audio”,功能极其强大的音频处理工具,也支持 FLAC。
  • ffmpeg:多媒体处理领域的“瑞士军刀”,功能极其全面,可以处理几乎所有格式的音视频,当然也包括 FLAC。

从 CD 创建精确的 FLAC 镜像备份

这是最常见的需求,目标是制作一个可以完美还原为原始 CD 的备份。

使用 shntoolflac (推荐,功能最全)

这个方法可以完美处理 CD 的轨道间隙、元数据,并生成一个标准的镜像文件夹。

步骤 1:抓取 CD 音轨

flac镜像命令具体怎么用?-图2
(图片来源网络,侵删)

你需要将 CD 音轨抓取为 WAV 文件。cdparanoia 是 Linux 和 macOS 下的经典工具。

# 抓取所有音轨到当前目录,文件名为 track01.wav, track02.wav ...
cdparanoia -B
# 或者指定一个艺术家和专辑名
cdparanoia -B "Artist Name - Album Name"

执行后,你会得到一堆 .wav 文件和一个 .toc (Table of Contents) 文件。

步骤 2:使用 shntoolflac 进行编码

shntool 可以读取 .toc 文件来处理轨道间隙,然后调用 flac 进行编码。

flac镜像命令具体怎么用?-图3
(图片来源网络,侵删)
# 创建一个输出目录
mkdir flac_backup
# 使用 shntool 的 'cue' 功能,它会自动处理轨道和元数据
# -a flac: 指定使用 flac 编码器
# -o "output=%d/%f.flac": 定义输出格式,%d是轨道号,%f是文件名
# -f: 强制覆盖已存在的文件
# *.toc: 处理所有 .toc 文件
shntool cue -a flac -o "output=flac_backup/%d %t.flac" -f *.toc

命令解释:

  • cue: shntool 的一个模式,用于根据 CUE 文件或 TOC 文件处理音轨。
  • -a flac: 指定使用 flac 作为后端编码器。
  • -o "output=flac_backup/%d %t.flac": 这是关键,定义了输出文件的命名规则。
    • output=...: 指定输出模板。
    • flac_backup/: 输出到 flac_backup 这个子文件夹。
    • %d: 轨道号 (e.g., 01, 02)。
    • %t: 轨道标题。
    • .flac: 文件扩展名。
  • -f: 如果目标文件已存在,则强制覆盖。
  • *.toc: 指定要处理的输入文件。

执行后,flac_backup 文件夹里就会包含所有按轨道号和标题命名的 .flac 文件,并且嵌套了完整的元数据。

使用 ffmpeg (更现代,更简单)

ffmpeg 也可以直接从 CD 设备抓取并编码,非常方便。

步骤 1:找到你的 CD-ROM 设备名

通常是 /dev/cdrom/dev/sr0

ls /dev/sr*

步骤 2:使用 ffmpeg 抓取并编码

# 创建输出目录
mkdir flac_backup
# 执行抓取和编码
ffmpeg -i /dev/sr0 -map 0:a:0 -c:a flac -compression_level 5 "flac_backup/track_%02d.flac"

命令解释:

  • -i /dev/sr0: 输入源是 CD-ROM 设备。
  • -map 0:a:0: 映射第一个(通常是唯一的)音频流,这可以避免抓取到数据轨道等。
  • -c:a flac: 指定音频编解码器为 flac
  • -compression_level 5: 设置压缩级别(0-8),5 是一个很好的平衡点,压缩率和速度都适中。
  • "flac_backup/track_%02d.flac": 输出文件名模板,%02d 表示两位数的轨道号,如 track_01.flac

这个方法会生成独立的 FLAC 文件,但通常不如 shntool 方法生成的文件包含那么丰富的元数据(如 CUE 文件信息),如果你需要一个包含所有信息的单文件镜像,可以看下面的进阶用法。


批量转换文件夹中的音频文件为 FLAC

假设你有一个文件夹,里面有很多 MP3 或 WAV 文件,你想把它们全部转成 FLAC,并保持文件夹结构。

使用 ffmpeg (最推荐)

ffmpeg 的批处理能力非常强大。

命令:

# 遍历当前目录及其子目录下的所有 .wav 文件,并转换为 .flac
find . -type f -name "*.wav" -exec ffmpeg -i {} -c:a flac -compression_level 5 {}.flac \;
# 遍历所有 .mp3 文件
find . -type f -name "*.mp3" -exec ffmpeg -i {} -c:a flac -compression_level 5 {}.flac \;

更优雅的写法(保留原文件名,只改扩展名):

# 创建一个脚本来执行,convert.sh
#!/bin/bash
for file in "$@"; do
  # 检查文件是否存在且是常规文件
  if [ -f "$file" ]; then
    # 获取不带扩展名的文件名
    filename="${file%.*}"
    # 执行转换
    ffmpeg -i "$file" -c:a flac -compression_level 5 "${filename}.flac"
  fi
done
# 赋予执行权限
chmod +x convert.sh
# 使用方法:将脚本放在目标文件夹的父目录,然后把要转换的文件夹作为参数传入
# ./convert.sh path/to/your/music_folder

使用 sox (简单直接)

sox 语法更简洁,适合简单的批量转换。

命令:

# 遍历当前目录下所有 .wav 文件并转换为 .flac
for f in *.wav; do
  sox "$f" "${f%.wav}.flac"
done
# 遍历所有 .mp3 文件
for f in *.mp3; do
  sox "$f" "${f%.mp3}.flac"
done

sox 命令解释:

  • sox input_file output_file: sox 的基本语法。
  • "${f%.wav}.flac": 这是 Bash 的参数扩展。
    • %.wav: 从变量 $f 的结尾移除 .wav 字符串。
    • .flac: 然后加上 .flac 后缀。
    • song.wav 会变成 song.flac

总结与推荐

场景 推荐工具 优点 缺点
CD 精确备份 shntool + flac 功能最全,完美处理轨道、元数据、CD-TEXT,是发烧友和备份的首选。 需要两步操作(抓取+编码),稍微复杂。
CD 精确备份 ffmpeg 一步到位,现代且功能强大,集成度高。 生成的 FLAC 文件元数据可能不如 shntool 方案完整。
批量转换 ffmpeg 最灵活,支持几乎所有格式,可精细控制参数,适合复杂批处理。 语法相对复杂。
批量转换 sox 语法最简单,速度快,适合简单的、同格式文件间的批量转换。 功能相对 ffmpeg 较少,对元数据的处理可能不如 ffmpeg 精细。

  • 想做完美的 CD 备份,用 shntool
  • 想做快速的 CD 抓取复杂的批量转换,用 ffmpeg
  • 想做最简单的批量转换,用 sox
分享:
扫描分享到社交APP
上一篇
下一篇