Python-混音、叠加音频、拼接音频及批处理

一.首先我们来了解混音、叠加音频、拼接音频的概念
1.1 混音:把单声道音频a和单声道音频b(可以是两个单声道音频或更多单声道音频)合并成一个多声道音频c。需要注意的是音频a和音频b的时长要相同且都为单声道音频。(音频c的时长=音频a的时长)

1.2 叠加音频:把音频a和音频b叠加成音频c,单声道音频a和单声道音频b叠加成单声道音频c,双声道音频a和单声道音频b叠加成双声道音频c,双声道音频a和双声道音频b叠加成双声道音频c。(如果把音频b叠加在音频a上,那么音频c的时长和音频a的时长相同,反之如果把音频a叠加在音频b上,那么音频c的时长和音频b的时长相同)

1.3 拼接音频:把音频a和音频b拼接起来成一个长音频c(即音频c的时长=音频a的时长+音频b的时长)

二.代码示例:
2.1 混音代码:

 

from pydub import AudioSegment

sound1 = AudioSegment.from_wav(r'F:\误入测试集\dianshiju-0.wav')
sound2 = AudioSegment.from_wav(r'F:\误入测试集\dianshiju-14.wav')
# sound3 = AudioSegment.from_wav(r'F:\误入测试集\dianshiju-16.wav')

output = AudioSegment.from_mono_audiosegments(sound1, sound2)  # 把sound1和sound2合并成两通道音频
# output = AudioSegment.from_mono_audiosegments(sound1, sound2,sound3)  # 把sound1、sound2、sound3合并成三通道音频
output.export("output.wav", format="wav")  # 保存文件

2.2 叠加音频代码:

from pydub import AudioSegment

sound1 = AudioSegment.from_wav(r'F:\误入测试集\dianshiju-0.wav')
sound2 = AudioSegment.from_wav(r'F:\误入测试集\dianshiju-14.wav')

output = sound1.overlay(sound2)  # 把sound2叠加到sound1上面
# output = sound1.overlay(sound2,position=5000)  # 把sound2叠加到sound1上面,从第5秒开始叠加
output.export("output.wav", format="wav")  # 保存文件

2.3 拼接音频代码

from pydub import AudioSegment

sound1 = AudioSegment.from_wav(r'F:\误入测试集\dianshiju-0.wav')
sound2 = AudioSegment.from_wav(r'F:\误入测试集\dianshiju-14.wav')
# sound3 = AudioSegment.from_wav(r'F:\误入测试集\dianshiju-16.wav')

output = sound1 + sound2  # sound1拼接sound2
# output=sound1+sound2+sound3  # sound1拼接sound2拼接sound3
output.export("output.wav", format="wav")  # 保存文件

三、敲重点!!!批处理

3.1 一个文件夹的批处理,即一个文件夹内的音频文件和一个音频文件进行批处理

import os
from pydub import AudioSegment
input_path = r"E:\untitled1\audio_test\a"  # 第一个文件路径
output_path = r"E:\untitled1\audio_test\output"  # 输出文件路径
for file in os.listdir(input_path):  # 遍历第一个文件路径下的文件
    path1 = input_path + "\\" + file  # 拼接第一个输入路径和对应文件名
    path3 = output_path + "\\" + file  # 拼接输出路径和输出文件名,这里我是以第一个输入的文件名命名
    sound1 = AudioSegment.from_wav(path1)  # 第一个文件
    sound2 = AudioSegment.from_wav(r"E:\untitled1\audio_test\b\爱惜花草不践踏_高清_1.wav")  # 第二个文件
    output = sound1.overlay(sound2)  # 把sound2叠加到sound1上面
    output.export(path3, format="wav")  # 保存文件

3.2 两个文件夹的批处理,即两个文件夹分别有相同数量的音频文件进行批处理

import os
from pydub import AudioSegment

input_path1 = r"E:\untitled1\audio_test\a"  # 第一个文件路径
input_path2 = r"E:\untitled1\audio_test\b"  # 第二个文件路径
output_path = r"E:\untitled1\audio_test\output"  # 输出文件路径
for file1, file2 in zip(os.listdir(input_path1), os.listdir(input_path2)):  # 遍历两个文件路径下的文件
    path1 = input_path1 + "\\" + file1  # 拼接第一个输入路径和对应文件名
    path2 = input_path2 + "\\" + file2  # 拼接第二个输入路径和对应文件名
    path3 = output_path + "\\" + file1  # 拼接输出路径和输出文件名,这里我是以第一个输入的文件名命名
    sound1 = AudioSegment.from_wav(path1)  # 第一个文件
    sound2 = AudioSegment.from_wav(path2)  # 第二个文件
    output = sound1.overlay(sound2)  # 把sound2叠加到sound1上面
    output.export(path3, format="wav")  # 保存文件

四、效果展示:
5.1 如下图所示,两个10s的单声道(a、b)混合成一个10s的多声道音频c:


5.2.1 如下图所示,两个10s的单声道音频(a、b)叠加成一个10s的单声道音频c

在这里插入图片描述

5.2.2 如下图所示,一个3分11s的多声道音频a和一个9分35秒的多声道音频b叠加成一个3分11s/9分35秒的多声道音频c(如果把b叠加在a上,音频c的时间长度就和音频a一样)

在这里插入图片描述

 在这里插入图片描述

5.3 如下图所示,两个10s的音频拼接成一个20s的音频

在这里插入图片描述

批处理一定要掌握啊!!!掌握批处理,学习工作无烦恼~

来源:

Python-混音、叠加音频、拼接音频及批处理_zkw_1998的博客-CSDN博客_python 合并音频

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
全景影像拼接是一个非常有趣的应用程序,可以使用 Python 和 OpenCV 库来实现。下面是一个简单的步骤: 1. 读取图像:使用 OpenCV 库中的 cv2.imread() 函数读取所有图像。 2. 特征提取:使用 SIFT 或 SURF 算法提取图像的关键点和描述符。 3. 特征匹配:对于每对相邻的图像,使用描述符匹配算法(如 FLANN 或 BFMatcher)来找到它们之间的最佳匹配点。 4. 图像配准:根据匹配点计算图像之间的转换矩阵,然后使用 OpenCV 的 cv2.warpPerspective() 函数将图像变形为共面。 5. 图像拼接:将所有变形图像叠加在一起形成全景图像。 下面是一个简单的 Python 示例代码: ```python import cv2 import numpy as np # 读取图像 img1 = cv2.imread('image1.jpg') img2 = cv2.imread('image2.jpg') # 特征提取 sift = cv2.xfeatures2d.SIFT_create() kp1, des1 = sift.detectAndCompute(img1, None) kp2, des2 = sift.detectAndCompute(img2, None) # 特征匹配 bf = cv2.BFMatcher() matches = bf.knnMatch(des1, des2, k=2) # 图像配准 good_matches = [] for m, n in matches: if m.distance < 0.75 * n.distance: good_matches.append(m) src_pts = np.float32([kp1[m.queryIdx].pt for m in good_matches]).reshape(-1, 1, 2) dst_pts = np.float32([kp2[m.trainIdx].pt for m in good_matches]).reshape(-1, 1, 2) M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0) img1_aligned = cv2.warpPerspective(img1, M, (img1.shape[1], img1.shape[0])) # 图像拼接 result = np.zeros((img1_aligned.shape[0], img1_aligned.shape[1] + img2.shape[1], 3), dtype=np.uint8) result[:img2.shape[0], :img2.shape[1]] = img2 result[:, img2.shape[1]:] = img1_aligned cv2.imshow('result', result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 注意:这只是一个简单的示例代码,实际应用中可能需要更复杂的特征提取和匹配算法来获得更准确的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值