pydub、ffmpeg 音頻文件聲道選擇轉換、采樣率更改

快速查看音頻通道數和每個通道能力判斷具體哪個通道說話;一般能量大的那個算是說話

import wave
from pydub import AudioSegment
import numpy as npdef read_wav_file(file_path):with wave.open(file_path, 'rb') as wav_file:params = wav_file.getparams()num_channels = params.nchannelssample_width = params.sampwidthframe_rate = params.frameratenum_frames = params.nframesprint(f"Number of channels: {num_channels}")print(f"Sample width: {sample_width}")print(f"Frame rate: {frame_rate}")print(f"Number of frames: {num_frames}")frames = wav_file.readframes(num_frames)audio_data = np.frombuffer(frames, dtype=np.int16)if num_channels > 1:audio_data = audio_data.reshape(-1, num_channels)return audio_data, frame_rate, num_channelsdef analyze_channels(audio_data, frame_rate, num_channels):for channel in range(num_channels):channel_data = audio_data[:, channel] if num_channels > 1 else audio_data# 計算通道的能量energy = np.sum(np.abs(channel_data))print(f"Channel {channel} energy: {energy}")# 你可以在這里添加更多的分析邏輯,比如使用語音活動檢測(VAD)來判斷說話聲if __name__ == "__main__":file_path = r"E:\allchat\output.wav"audio_data, frame_rate, num_channels = read_wav_file(file_path)analyze_channels(audio_data, frame_rate, num_channels)

這里 channel0 的聲音算說話的
在這里插入圖片描述

1、轉換mono單聲道,選擇人聲的那個通道

mp3格式

from pydub import AudioSegmentdef extract_and_save_channel(input_file, output_file, channel_index):# 讀取 MP3 文件audio = AudioSegment.from_mp3(input_file)# 提取特定通道if audio.channels > 1:channel_data = audio.split_to_mono()[channel_index]else:channel_data = audio# 保存提取的通道為新的 MP3 文件channel_data.export(output_file, format="mp3")if __name__ == "__main__":input_file = "your_audio_file.mp3"output_file = "channel_0.mp3"channel_index = 0  # 選擇 Channel 0extract_and_save_channel(input_file, output_file, channel_index)

wav格式

from pydub import AudioSegment# 加載WAV文件
wav_file_path = r"E:\allchat\output_16000.wav"
audio_segment = AudioSegment.from_wav(wav_file_path)# 提取Channel 0
if audio_segment.channels > 1:channel_0 = audio_segment.split_to_mono()[0]
else:channel_0 = audio_segment# 導出為單聲道WAV文件
mono_wav_file_path = r"E:\allchat\output_16000_channel_0.wav"
channel_0.export(mono_wav_file_path, format="wav")

在這里插入圖片描述

2、采樣率更改為16000

from pydub import AudioSegmentdef resample_wav_with_pydub(input_file, output_file, new_rate):# 讀取原始WAV文件audio = AudioSegment.from_wav(input_file)# 設置新的采樣率audio = audio.set_frame_rate(new_rate)# 導出重采樣后的WAV文件audio.export(output_file, format='wav')# 使用示例
resample_wav_with_pydub('input.wav', 'output_16000.wav', 16000)

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40925.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40925.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40925.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

量化交易:金融投資的新篇章

在金融投資的世界里,量化交易正逐漸成為一股不可忽視的力量。它以數據驅動和算法決策為特點,為投資者提供了一種全新的交易方式。本文將深入探討量化交易的基本概念、優勢、挑戰以及如何開始使用量化交易策略。 量化交易的定義與起源 量化交易&#xf…

Android10以上實現獲取設備序列號功能

Android10以上實現獲取設備唯一標識,目前只支持華為和榮耀設備。實現原理:通過無障礙服務讀取序列號界面。 public class DeviceHelper implements Application.ActivityLifecycleCallbacks {static final String TAG "WADQ_DeviceHelper";s…

Zoom使用的基本步驟和注意事項

Zoom是一款功能強大的視頻會議軟件,廣泛應用于遠程辦公、在線教育、團隊協作等多個場景。以下是Zoom使用的基本步驟和注意事項: 一、注冊與登錄 注冊Zoom賬戶: 訪問Zoom官方網站(如zoom.us),點擊“注冊”…

Android Enable 和clickable

setEnabled 使能控件 設置為false,該控件永遠不會活動,不管設置為什么屬性,都無效; 設置為true,表明激活該控件,控件處于活動狀態,處于活動狀態,就能響應事件了,比如觸摸…

mybatis實現動態sql

第一章、動態SQL MyBatis 的強大特性之一便是它的動態 SQL。如果你有使用 JDBC 或其它類似框架的經驗,你就能體會到根據不同條件拼接 SQL 語句的痛苦。例如拼接時要確保不能忘記添加必要的空格,還要注意去掉列表最后一個列名的逗號。利用動態 SQL 這一特…

2024北京大健康展,北京健康生活產品展覽會十月舉辦

2024北京健博會,立足北京,效應輻射全國買方市場,助力健康中國事業建設; 2024第11屆中國(北京)國際大健康產業博覽會 The 2024 China (Beijing) International Health Service Expo 時間:2024年…

華為 RIP 協議中 RIP 兼容版本、RIPv1、RIPv2 在收發 RIP 報文時的區別

華為 RIP 協議中 RIP 兼容版本、RIPv1、RIPv2 的區別 為了更好地支持實際環境中路由器對 RIP 的支持,華為 VRP 平臺具有一個兼容版本,默認情況下啟動 RIP 進程后,如果沒有配置 RIP 版本,該版本就為兼容版本,對 versio…

[ C++ ] 深入理解模板( 進 階 )

目錄 非類型模板參數 類模板沒有實例化的情況 模板的特化 注意函數特化中遇到的問題 建議:(直接使用函數重載) 類模板特化 全特化 偏特化 偏特化有以下兩種表現方式: 部分特化(將模板參數類表中的一部分參數特化…

vue this.$refs加變量名

想動態獲取$refs,我們可以用模板字符串來動態綁定ref的值。代碼如下: this.$refs[${this.treeQueFlag}].setCheckedNodes([]); $refs后面拼變量,vue動態給$refs賦值_vue ref動態賦值-CSDN博客

旅游系統(附管理端+前臺)PHP源碼

一. 前言 今天小編給大家帶來了一款可學習,可商用的,旅游系統 源碼,支持二開,無加密。支持景點管理,登錄,景點預定,意見反饋,統計等功能。詳細界面和功能見下面視頻演示。 二. 視頻…

【flutter問題記錄】 無效的源發行版:17

問題描述 在看開源項目的時候,clone下來后一直編譯失敗,提示:無效的源發行版:17,看描述大概是jdk的版本問題,但是在Android studio各種指定都無用,網上資料也沒有flutter項目的解決方案,最后在…

在Spring MVC框架中,如何處理HTTP請求和響應?

在Spring MVC框架中,HTTP請求和響應的處理是通過一系列組件和流程來完成的。以下是Spring MVC處理HTTP請求和響應的主要步驟: 用戶發起請求: 用戶在客戶端(如瀏覽器)上發起一個HTTP請求,這個請求被發送到服…

廣州自閉癥機構哪家好?

在廣州,眾多的自閉癥康復機構中,星貝育園自閉癥兒童康復學校以其獨特的優勢脫穎而出。 一、專業的師資團隊 我們擁有一支經驗豐富、專業素養極高的師資隊伍。每位老師都經過嚴格的專業培訓,深入了解自閉癥兒童的特點和需求。他們不僅具…

深入挖掘海外快手kwai ads推廣巴西slots手游廣告獨家優勢

深入挖掘海外快手kwai ads推廣巴西slots手游廣告獨家優勢 在數字化時代,廣告投放已成為各行各業不可或缺的一部分,特別是在游戲行業,如何有效地推廣游戲產品,吸引玩家的眼球,成為了每一個游戲開發商和廣告主所關注的焦…

假設性文檔嵌入 HyDE:大模型 + 對比學習,從關鍵詞相似度搜索到語義搜索

假設性文檔嵌入 HyDE:大模型 對比學習,從關鍵詞相似度搜索到語義搜索 提出背景流程圖解法拆解類比1. 單一文檔嵌入空間的搜索2. 指令跟隨型語言模型(InstructLM)的引入3. 生成文檔的嵌入編碼 提出背景 論文:https://…

python怎么樣將一段程序無效掉

1、python中可以用注釋屏蔽一段語句,具體方法如下,首先打開一段python的示例程序: 2、然后單行注釋的方法是在語句前面加上#,程序運行后添加注釋的地方的語句會被自動跳過,這里可以看到將打印變量a的語句添加注釋就沒有…

vue處理重復請求

處理方法記錄第一次的請求時間-后面的請求時間,判斷間隔時間提示請求重復 // 登錄方法 定義repeatSubmit屬性控制是否重復請求 export function login(username, password, code, uuid) {const data {username,password,code,uuid}return request({url: /login,he…

前端css性能優化

前端css性能優化 1. 減少樣式表數量和壓縮文件大小: 通過合并多個樣式表、刪除未使用的樣式、壓縮樣式表等方式來減少樣式表數量和大小,從而減少網絡請求和提高加載速度。 通常來說,樣式文件會被瀏覽器緩存,進入到其他頁面樣式文件…

在 C++中,如何實現高效的多線程并發編程以處理大規模數據計算,同時避免常見的競態條件和死鎖問題?

在 C 中,可以使用以下幾種方法來實現高效的多線程并發編程以處理大規模數據計算,并避免常見的競態條件和死鎖問題: 使用互斥鎖:使用 std::mutex 類型的互斥鎖來保護共享數據的訪問。在訪問共享數據之前,線程先要獲取互…

二叉樹 Leetcode 101 對稱二叉樹

二叉樹 Leetcode 101 對稱二叉樹 Leetcode 101 要點:1.比較的是左右子樹是否相同,不是節點的左右孩子; 2.左子樹左右中遍歷,右子樹右左中遍歷; 3.靈活遞歸。 /*** Definition for a binary tree node.* struct Tree…