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

在macOS上用FFmpeg批量分割音频的技术实现问询

完善FFmpeg批量音频分割Shell脚本(macOS/UNIX)

我来帮你搞定这个批量分割音频的需求,针对你给出的文本格式和macOS终端环境,下面是完整的可运行脚本,以及关键细节的解释:

完整的split.command脚本

#!/bin/bash

# 配置你的输入参数
inputFileName="audiofile.mp3"  # 记得加上音频文件的后缀,比如.mp3/.flac/.m4a等
inputList="test.txt"

# 先检查必要文件是否存在,避免后续报错
if [[ ! -f "$inputFileName" ]]; then
    echo "❌ 错误:输入音频文件 $inputFileName 不存在,请检查路径!"
    exit 1
fi

if [[ ! -f "$inputList" ]]; then
    echo "❌ 错误:时间列表文件 $inputList 不存在,请检查路径!"
    exit 1
fi

# 逐行读取时间列表文件
while IFS= read -r line
do
    # 跳过空行,避免处理无效内容
    [[ -z "$line" ]] && continue

    # 用awk分割每行内容,分隔符是你文本里的「空格-空格」
    # 同时去除每个字段前后的空格,保证时间和名称格式干净
    startTime=$(echo "$line" | awk -F ' - ' '{gsub(/^[[:space:]]+|[[:space:]]+$/, "", $1); print $1}')
    endTime=$(echo "$line" | awk -F ' - ' '{gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2); print $2}')
    artist=$(echo "$line" | awk -F ' - ' '{gsub(/^[[:space:]]+|[[:space:]]+$/, "", $3); print $3}')
    title=$(echo "$line" | awk -F ' - ' '{gsub(/^[[:space:]]+|[[:space:]]+$/, "", $4); print $4}')

    # 构造输出文件名:把空格换成下划线,避免文件名带空格导致FFmpeg报错
    # 同时保留原音频的文件后缀
    outputFileName="${artist// /_}-${title// /_}.${inputFileName##*.}"

    # 执行FFmpeg分割命令
    echo "🔄 正在分割:$outputFileName"
    ffmpeg -hide_banner -loglevel error -i "$inputFileName" -ss "$startTime" -to "$endTime" -c copy "$outputFileName"

    # 检查分割是否成功,给出反馈
    if [[ $? -eq 0 ]]; then
        echo "✅ $outputFileName 分割完成!"
    else
        echo "⚠️ $outputFileName 分割失败,请检查时间格式或FFmpeg安装情况!"
    fi

done < "$inputList"

echo "🎉 所有分割任务已完成!"

关键细节解释

  1. 脚本头部:#!/bin/bash指定用bash执行,macOS默认shell是zsh,但bash完全兼容,这样写更通用。
  2. 文件检查:提前判断音频文件和列表文件是否存在,避免脚本执行到一半才报错。
  3. 行处理:IFS= read -r line保证读取每行时不会丢失空格或特殊字符;跳过空行避免无效处理。
  4. 字段分割:用awk处理多字符分隔符-,比cut更适配你的文本格式;同时用gsub清理每个字段前后的空格,保证时间、艺术家名称等格式干净。
  5. 输出文件名:把名称里的空格换成下划线,避免文件名带空格导致FFmpeg识别问题;${inputFileName##*.}提取原音频的后缀,保证输出文件和原文件格式一致。
  6. FFmpeg命令优化:-hide_banner -loglevel error减少冗余输出,只保留关键信息;-ss指定开始时间、-to指定结束时间,-c copy直接复制音频编码,速度极快且无质量损失(如果需要转码,可去掉-c copy换成-c:a mp3这类编码参数)。

使用步骤

  1. 把脚本保存为split.command,放在和你的音频文件、test.txt同一目录下。
  2. 打开终端,给脚本添加执行权限:
    chmod +x split.command
    
  3. 修改脚本里的inputFileName为你的实际音频文件名(记得加后缀,比如audiofile.mp3)。
  4. 运行脚本:
    ./split.command
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:42:43