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

如何批量自动将MP3文件切割为45秒?求Bat/Python实现方案

刚好我之前也做过类似的批量音频处理需求,给你两种实用的解决方案,分别是Windows批处理脚本和Python脚本,都能高效完成批量切割MP3到45秒的任务:

方法一:Windows批处理(.bat脚本)

这种方式不需要额外安装软件,只要你已经有ffmpeg,写个简单的循环脚本就能搞定。脚本会自动遍历当前目录下的所有MP3文件,逐个切割成前45秒的新文件。

@echo off
setlocal enabledelayedexpansion

:: 配置切割时长(单位:秒)
set "cut_duration=45"

:: 遍历当前目录下所有.mp3格式文件
for %%f in (*.mp3) do (
    echo 正在处理:%%f
    :: 执行ffmpeg切割,输出文件添加cut_前缀避免覆盖原文件
    ffmpeg -t !cut_duration! -i "%%f" -acodec copy "cut_%%~nf.mp3"
)

echo 所有文件处理完成!
pause

脚本说明:

  • @echo off:关闭命令行的冗余输出,让过程更简洁
  • setlocal enabledelayedexpansion:确保循环里的变量能正常解析
  • %%~nf:提取当前文件的文件名(不含扩展名),方便生成新的输出文件名
  • 如果你ffmpeg没加到系统环境变量,把ffmpeg换成你的ffmpeg绝对路径,比如"C:\Program Files\ffmpeg\bin\ffmpeg.exe"

方法二:Python脚本实现

如果你更熟悉Python,这种方式灵活性更高,还能轻松扩展功能(比如过滤特定文件、自定义输出路径等)。

import os
import subprocess

def batch_cut_mp3(input_directory, cut_duration=45):
    # 筛选出目录下所有MP3文件(忽略大小写)
    mp3_files = [
        file for file in os.listdir(input_directory)
        if file.lower().endswith(".mp3")
    ]

    if not mp3_files:
        print("当前目录下没有找到MP3文件,请检查路径!")
        return

    for index, filename in enumerate(mp3_files, start=1):
        input_path = os.path.join(input_directory, filename)
        # 生成输出文件名,这里给原文件名加cut_前缀
        output_filename = f"cut_{filename}"
        output_path = os.path.join(input_directory, output_filename)

        print(f"正在处理第{index}个文件:{filename}")
        # 构建ffmpeg命令(用列表形式避免字符串拼接的空格问题)
        ffmpeg_cmd = [
            "ffmpeg",
            "-t", str(cut_duration),
            "-i", input_path,
            "-acodec", "copy",
            output_path
        ]

        try:
            # 执行命令,隐藏冗余输出,只在出错时显示错误信息
            subprocess.run(
                ffmpeg_cmd,
                check=True,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                encoding="utf-8"
            )
            print(f"✅ 处理完成:{output_filename}")
        except subprocess.CalledProcessError as e:
            print(f"❌ 处理{filename}时出错:{e.stderr}")

if __name__ == "__main__":
    # 处理当前目录下的MP3文件,你也可以换成指定路径,比如"D:\Music"
    target_dir = os.getcwd()
    batch_cut_mp3(target_dir)

脚本说明:

  • 用os.listdir结合后缀筛选,只处理MP3文件
  • 用subprocess.run执行ffmpeg命令,比直接用os.system更安全,能捕获错误信息
  • 输出文件名加cut_前缀,避免覆盖原文件,你也可以改成用序号命名(比如f"cut_{index}.mp3")

通用注意事项:

  1. 确保ffmpeg已经安装,并且能在命令行直接调用(把ffmpeg所在路径添加到系统PATH环境变量里)
  2. 如果你需要从指定时间点开始切割(比如从第10秒开始切45秒),可以在ffmpeg命令里加-ss 10参数,变成ffmpeg -ss 10 -t 45 -i ...
  3. 尽量不要让输出文件名和原文件重名,避免意外覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:28:53