多种音频文件(.wav, .mp3, .ogg)转化为wav文件,支持分、秒级别切分

多种音频文件(.wav, .mp3, .ogg)转化为wav文件,支持分、秒级别切分

需求:调用python脚本,输入源文件路径、目标路径、切割的时长、切割时长的时间单位,能够将对应路径的源音频文件按照设置的切割时长切割到目标路径中。

最终效果

在这里插入图片描述
按照每8分钟切割一次:
在这里插入图片描述

在这里插入图片描述

注意:如果没有对应的依赖包,需要自己通过pip3命令进行下载(pydub、ffmpge)
[如果出现类似的问题可以参考这篇文章]
(https://blog.csdn.net/baidu_38903149/article/details/105680450)
代码:audio_to_wav.py(多种音频转为wav音频)

import os
from pydub import AudioSegment


# 支持的格式
SUPPORTED_FORMATES = [".mp3", ".m4a", ".wav", ".flac", ".ogg", ".flv"]

def audios_to_wavs(src_path, res_path):
    """
    src_path目录下的所有音频文件进行 ——> 常见音频格式转wav格式
    :param src_path: 源音频存在的目录
    :param res_path: 转换后的音频存储路径
    :return:
    """
    if(os.path.exists(src_path) == False or os.path.exists(res_path) == False):
        print("路径出错,请确认src_path和res_path存在")
        exit(-1)
    # 支持的音频格式列表
    supported_formats = SUPPORTED_FORMATES
    # 记录转换的总文件数
    count = 0
    # 循环遍历文件夹中的所有音频文件
    for audio_file in os.listdir(src_path):
        # 检查文件是否为支持的音频格式
        if audio_file.endswith(tuple(supported_formats)):
            # 获取不带扩展名的文件名
            file_name = os.path.splitext(audio_file)[0]
            # 使用pydub读取音频文件
            audio = AudioSegment.from_file(os.path.join(src_path, audio_file))
            # 将音频文件导出为wav格式
            audio.export(os.path.join(res_path, file_name + ".wav"), format="wav")
            count = count + 1
    print(count)


def audio_to_wav(src_path, res_path):
    """
    单个文件 ——> 常见音频格式转wav格式
    :param src_path: 源音频路径
    :param res_path: 转换后的音频存储路径
    :return:
    """
    if(os.path.exists(src_path) == False or os.path.exists(res_path) == False):
        print("路径出错,请确认src_path和res_path存在")
        exit(-1)
    # 支持的音频格式列表
    supported_formats = SUPPORTED_FORMATES
    # 检查文件是否为支持的音频格式
    if src_path.endswith(tuple(supported_formats)):
        # 获取不带扩展名的文件名
        file_name = os.path.splitext(os.path.basename(src_path))[0]
        # 使用pydub读取音频文件
        audio = AudioSegment.from_file(src_path)
        # 将音频文件导出为wav格式
        audio.export(os.path.join(res_path, file_name + ".wav"), format="wav")
    else:
        print("目前仅支持" + supported_formats + "进行格式转换")
    print(src_path + "转换完成~")


if __name__ == '__main__':
    # audio目录下的所有音频文件,不包含子目录
    audios_to_wavs("D:\\TAL\\音视频脚本测试数据\\audio\\", "D:\\TAL\\音视频脚本测试数据\\wav\\");
    # audio_to_wav("D:\\TAL\\音视频脚本测试数据\\audio\\sent.mp3", "D:\\TAL\\音视频脚本测试数据\\wav");

代码:wav_split.py(wav音频切割脚本)

import os.path

from pydub import AudioSegment


def wav_split(wav_path, part_path, split_time):
    """
    音频切片,获取部分音频,单位秒
    :param wav_path: 原音频文件路径
    :param splitTime: 切割时长(s)
    :param part_path: 截取后的音频路径
    :return:
    """
    if(os.path.exists(wav_path) == False or os.path.exists(part_path) == wav_path):
        print("路径出错,请确认wav_path和part_path存在")
        exit(-1)

    file_name = os.path.splitext(os.path.basename(wav_path))[0] # wav文件名
    dir_part_path = os.path.join(part_path, file_name) # 以file_name生成目录存放对应音频切割的文件
    if(os.path.exists(dir_part_path) == False):
        os.mkdir(dir_part_path)
    sound = AudioSegment.from_wav(wav_path) # wav音频数据
    duration = sound.duration_seconds  # 音频时长(s)
    nframes = duration // split_time if (duration % split_time == 0) else duration // split_time + 1 # 分割后的段数
    for i in range(int(nframes)):
        # 该段对应的起始时间
        start = i * split_time
        # 该段对应的结束时间
        if (i != nframes - 1):
            end = start + split_time
        else:
            end = duration
        # 分割后的路径
        tempPath = os.path.join(dir_part_path, file_name + "_" + str(i * split_time) + "_" + str((i + 1) * split_time) + "s.wav")
        get_second_part_wav(wav_path, start, end, tempPath)
        print(tempPath + "已切割成功!")


def wavs_split(wav_dir, part_path, split_time):
    """
    音频切片,获取部分音频,单位秒
    :param wav_dir: 音频目录
    :param splitTime: 切割时长(s)
    :param part_path: 截取后的音频路径
    :return:
    """
    if(os.path.exists(wav_dir) == False or os.path.exists(part_path) == False):
        print("路径出错,请确认wav_dir和part_path存在")
        exit(-1)

    for src_wav in os.listdir(wav_dir):
        filename = os.path.join(wav_dir, os.path.basename(src_wav))
        wav_split(filename, part_path, split_time)
        print(filename + "已切割完毕~")


def get_second_part_wav(main_wav_path, start_time, end_time, part_wav_path):
    """
    音频切片,获取部分音频,单位秒
    :param main_wav_path: 原音频文件路径
    :param start_time: 截取的开始时间
    :param end_time: 截取的结束时间
    :param part_wav_path: 截取后的音频路径
    :return:
    """
    start_time = start_time * 1000
    end_time = end_time * 1000
    sound = AudioSegment.from_wav(main_wav_path)
    word = sound[start_time:end_time]
    try:
        word.export(part_wav_path, format="wav")
    except FileNotFoundError:
        print("存储路径不存在!请使用正确的存储路径")
        exit(-1)

if __name__ == '__main__':
    # 单个文件切割
    # wav_split('D:\\TAL\\音视频脚本测试数据\\wavs\\1.wav', 'D:\\TAL\\音视频脚本测试数据\\split_wav', 2)
    # 目录文件切割
    wavs_split('D:\\TAL\\音视频脚本测试数据\\wavs', 'D:\\TAL\\音视频脚本测试数据\\splits', 2)


  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Audio Components Suite (ACS) is a freeware cross-platform set of components designed to perform different sound-processing tasks.Platforms supported: Windows, LinuxIDEs supported: Delphi 6, 7, Kylix 1, 2, 3Main features inlude:Audio playback and capture Simultaneous operations on the same or different devices are allowed. OSS-compatible, ALSA, AOLive drivers are supported under Linux. CD-ROM playback and direct CDDA data capture Wave files/streams support Raw PCM, MS ADPCM, DVI IMA ADPCM support Append data to existing file/stream capability MP3 format support Encode mp3 files using LAME mp3 playback with smpeg library (Linux only) mp3 to wav files or streams conversion using MAD decoder Ogg Vorbis format support Reading Ogg files/streams (including multi-streamed ones). Storing data in Ogg Vorbis format with wide range of settings for compression/quality tweaks. Ogg comments support Append data to existing file/stream capability FLAC format support Reading FLAC files/streams Storing data in FLAC format with wide range of settings for compressiontweaks. Monkey Audio format support (for Windows only) AudioMixer component for mixing/concatenating audio streams InputList component for building dynamically playback/input lists Set of audio converter components Sample converter for bits per sample conversion. Sample rate converter (resampler) using sinc filtering Mono/Stereo conveter Stereo balance control Sound indicator Windowed sinc and Butterworth filters for changing audio spectrum Convolver component for applying custom sound effects The ACS object model allows you to build such applications as players, rippers and mixers in a fast and easy way. And of course, with ACS you can add sound playing/recording capabilities to any of your applications.ACS is used in QuickPopup sofware as well as in several other projects, including OpenRipper for Linux

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值