ChatGPT實戰100例 - (17) 用ChatGPT實現音頻長度測量和音量調整

文章目錄

  • ChatGPT實戰100例 - (17) 用ChatGPT實現音頻長度測量和音量調整
    • 獲取音頻長度
      • pydub獲取音頻長度
        • 獲取時長
        • 精確到秒
        • 格式設定
      • mutagen獲取音頻長度
    • 調整音量
    • 視頻音量調整
    • 注意事項

ChatGPT實戰100例 - (17) 用ChatGPT實現音頻長度測量和音量調整

請添加圖片描述

老王媳婦說上次那個pip挺好用的,就是長度這個有點迷茫,
那就測下吧

獲取音頻長度

使用 pydub 和 mutagen 庫都可以獲取MP3文件的長度。

pydub獲取音頻長度

獲取時長
from pydub.utils import mediainfodef get_duration(filename):info = mediainfo(filename)duration = info['duration']return durationfilename = 'yourfile.mp3'
print(get_duration(filename))
精確到秒
from pydub.utils import mediainfodef get_duration(filename):info = mediainfo(filename)duration = round(float(info['duration']))return durationfilename = 'yourfile.mp3'
print(get_duration(filename))
格式設定

如果你需要將獲取的時長轉換為 “03:03” 這樣的格式, 可以首先將時長轉換為整數(秒數), 然后通過除法和取余運算獲取分鐘和秒, 然后將這些值格式化為字符串。這是一個示例:

def get_duration(filename):info = mediainfo(filename)duration = int(float(info['duration']))  # change to intminutes, seconds = divmod(duration, 60)  # get minutes and secondsreturn "{:02d}:{:02d}".format(minutes, seconds)  # format as stringfilename = 'yourfile.mp3'
print(get_duration(filename))

這個函數將返回一個字符串,比如 “03:03”。

mutagen獲取音頻長度

如果你想使用的是mutagen庫,可以這樣做:

from mutagen.mp3 import MP3def get_duration(filename):audio = MP3(filename)duration = audio.info.lengthreturn durationfilename = 'yourfile.mp3'
print(get_duration(filename))

同樣,如果需要精確到秒級+格式化如上pydub的處理操作即可

調整音量

老王媳婦說這小視頻挺好的,就是聲音有點大,
安排!

使用pydub直接調整mp3音量

以下是一個可以用于調整mp3音量的函數,使用pydub庫:

from pydub import AudioSegmentdef adjust_audio_db(input_file, output_file, db):song = AudioSegment.from_mp3(input_file)adjusted_song = song + dbadjusted_song.export(output_file, format="mp3")# 使用函數:
adjust_audio_db('input.mp3', 'output.mp3', -10)

在這個函數中,input_fileoutput_file是輸入和輸出音頻文件的路徑,db是想要增加或減少的分貝數。首先,函數加載輸入文件,然后調整音量,最后導出修改后的音頻到output_file。注意db可以是負數,如果你想降低音量。

請確保已經正確安裝了pydub和ffmpeg,因為pydub需要ffmpeg進行音頻編解碼。

設定音量為隨機值

如果你想讓音量設定為一個隨機值,你可以通過引入Python的random庫來實現這一點。這里是如何修改上面的函數,以便音量增減設置為一個隨機值:

from pydub import AudioSegment
import randomdef adjust_audio_random_db(input_file, output_file, min_db, max_db):song = AudioSegment.from_mp3(input_file)# 生成一個介于min_db和max_db之間的隨機分貝值db_change = random.randint(min_db, max_db)adjusted_song = song + db_changeadjusted_song.export(output_file, format="mp3")# 使用函數:
adjust_audio_random_db('input.mp3', 'output.mp3', -5, 5)

在這個修改版函數中,min_dbmax_db定義了可能的分貝變化范圍。random.randint(min_db, max_db)會生成一個在這個范圍內的隨機整數,這個值可以是正的(增加音量)或負的(減少音量)。然后,這個隨機生成的分貝值被用來調整音頻的音量。

記住,使用隨機分貝變化時要謹慎選擇min_dbmax_db的值,以確保音量的變化在可接受的范圍內,不會對聽者造成不適。

老王媳婦:你搞錯了
我:對對,先試試水么,馬上安排

視頻音量調整

調整原視頻中的音頻信號db,隨機到-30到-20之間

你可以使用moviepy庫中的AudioClip的fx函數來改變音頻信號的db。volumex函數可以用于改變音頻的音量,參數是音量的倍數,比如0.5表示降低一半的音量。

volumex函數的參數是一個對數尺度,所以如果你想把db調整到-30到-20之間,你需要把這個范圍轉換成線性尺度。對數尺度和線性尺度的轉換公式是 value_in_linear_scale = 10^(value_in_db_scale/20)

這個轉換是因為人耳對聲音的感知是對數的。例如,如果一個聲音的音量是另一個的兩倍,我們感覺到的并不是兩倍的響,而是稍微大一點。因此,在對數尺度上,增加10db大約意味著將音量加倍。

以下是一個如何用moviepy調整音頻db的示例:

from moviepy.editor import VideoFileClip
import numpy as np# 打開視頻
clip = VideoFileClip('video.mp4')# 生成-30到-20之間的隨機數
db = np.random.uniform(-30, -20)# 轉換到線性尺度
linear = 10 ** (db / 20)# 調整音頻
clip = clip.fx(vfx.volumex, linear)# 輸出到文件
clip.write_videofile('output.mp4')

這段代碼首先打開輸入視頻,然后生成-30到-20之間的隨機db值,并把這個值轉換成線性尺度。然后用vfx.volumex函數調整音頻的音量。最后將視頻輸出到文件。

提取函數

你可以使用moviepy庫中的AudioClip的fx函數來改變音頻信號的db。volumex函數可以用于改變音頻的音量,參數是音量的倍數,比如0.5表示降低一半的音量。

volumex函數的參數是一個對數尺度,所以如果你想把db調整到-30到-20之間,你需要把這個范圍轉換成線性尺度。對數尺度和線性尺度的轉換公式是 value_in_linear_scale = 10^(value_in_db_scale/20)

這個轉換是因為人耳對聲音的感知是對數的。例如,如果一個聲音的音量是另一個的兩倍,我們感覺到的并不是兩倍的響,而是稍微大一點。因此,在對數尺度上,增加10db大約意味著將音量加倍。

以下是一個如何用moviepy調整音頻db的示例:

from moviepy.editor import VideoFileClip
import numpy as np# 打開視頻
clip = VideoFileClip('video.mp4')# 生成-30到-20之間的隨機數
db = np.random.uniform(-30, -20)# 轉換到線性尺度
linear = 10 ** (db / 20)# 調整音頻
clip = clip.fx(vfx.volumex, linear)# 輸出到文件
clip.write_videofile('output.mp4')

這段代碼首先打開輸入視頻,然后生成-30到-20之間的隨機db值,并把這個值轉換成線性尺度。然后用vfx.volumex函數調整音頻的音量。最后將視頻輸出到文件。

注意事項

長度也測了,聲音也小了,老王媳婦終于學會絲滑混剪短視頻了。
請添加圖片描述

繼續pip

pip install pydub mutagen moviepy

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

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

相關文章

深度學習的學習筆記帖子2

人臉數據集的介紹: https://zhuanlan.zhihu.com/p/362356480 https://blog.csdn.net/bjbz_cxy/article/details/122210641 CASIAWebFace人臉數據集等的github: https://github.com/deepinsight/insightface/blob/master/recognition/datasets/README.md…

藍橋杯基礎知識點9 stack、queue、priority_queue

藍橋杯基礎知識點9 stack、queue、priority_queue 01 stack的定義和結構 stack是一種后進先出&#xff08;LIFO&#xff09;的數據結構&#xff0c;頭文件<stcak>。 template <class T, class Container deque<T>> class stack; T&#xff1a;存儲在stack…

《VitePress 簡易速速上手小冊》第7章 高級功能與動態內容(2024 最新版)

文章目錄 7.1 動態路由與 API 集成7.1.1 基礎知識點解析7.1.2 重點案例&#xff1a;技術博客7.1.3 拓展案例 1&#xff1a;電商網站7.1.4 拓展案例 2&#xff1a;事件管理網站 7.2 狀態管理與 Vuex 使用7.2.1 基礎知識點解析7.2.2 重點案例&#xff1a;用戶認證系統7.2.3 拓展案…

力扣精選算法100道——Z字形變換(模擬專題)

目錄 &#x1f388;了解題意 &#x1f388;算法原理 &#x1f6a9;先處理第一行和最后一行 &#x1f6a9;再處理中間行 &#x1f388;實現代碼 &#x1f388;了解題意 大家看到這個題目的時候肯定是很迷茫的&#xff0c;包括我自己也是搞不清楚題目什么意思&#xff0c;我…

memcpy和strcat的區別

memcpy 函數&#xff1a; memcpy 函數用于在內存之間復制一定數量的字節。memcpy 是按字節進行復制的&#xff0c;可以用于復制任意類型的數據&#xff0c;不僅限于字符串。memcpy 不會自動添加字符串結束符號 \0&#xff0c;因此在復制字符串時&#xff0c;需要確保復制的字節…

喝點小酒-胡謅“編程語言學習”

今天&#xff0c; 與一個小哥們兒&#xff08;學習計算機科學與技術專業的&#xff0c;我兒子&#xff0c;這是真的&#xff09;一塊兒吃飯&#xff08;這頓飯&#xff0c;在家里吃的&#xff0c;吹個牛哈&#xff0c;我做的&#xff0c;三個葷菜、一個素材、一個湯、主食米飯 …

約瑟夫經典問題C++,STL容器queue解法

題目&#xff1a; Description n 個人圍成一圈&#xff0c;從第一個人開始報數,數到 m 的人出列&#xff0c;再由下一個人重新從 1 開始報數&#xff0c;數到m 的人再出圈&#xff0c;依次類推&#xff0c;直到所有的人都出圈&#xff0c;請輸出依次出圈人的編號。 注意&…

[linux]進程間通信(IPC)———共享內存(shm)(什么是共享內存,共享內存的原理圖,共享內存的接口,使用演示)

一、什么是共享內存 共享內存區是最快的&#xff08;進程間通信&#xff09;IPC形式。一旦這樣的內存映射到共享它的進程的地址空間&#xff0c;這些進程間數據傳遞不再涉及到內核&#xff0c;換句話說是進程不再通過執行進入內核的系統調用來傳遞彼此的數據。注意&#xff1a;…

Three.js初學(2)

Three.js初學&#xff08;2&#xff09; 三維坐標系的認識1. 輔助坐標系 光源的影響1. 光材質的影響2. 光源介紹點光源環境光平行光 3. 光源衰減/位置 相機控件1. 引入擴展庫2. 使用方法 三維坐標系的認識 這一章節的主要作用是加強自我對三維坐標空間的認識。 1. 輔助坐標系…

貓頭虎分享已解決Bug || TypeError: Cannot set property ‘innerHTML‘ of null

博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題大全》 — 面試準備的寶典&#xff01;《IDEA開發秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鴻蒙》 …

華為配置直連三層組網隧道轉發示例

配置直連三層組網隧道轉發示例 組網圖形 圖1 配置直連三層組網隧道轉發示例組網圖 業務需求組網需求數據規劃配置思路配置注意事項操作步驟配置文件擴展閱讀 業務需求 企業用戶接入WLAN網絡&#xff0c;以滿足移動辦公的最基本需求。且在覆蓋區域內移動發生漫游時&#xff0c;不…

Linux 系統編程:文件編程

本篇涉及文件的創建、打開、讀和關閉。 文件為操作系統服務和設備提供了一個簡單而一致的 接口 。“接口”指的是一種約定或標準&#xff0c;通過提供一個一致的接口&#xff0c;可以為上層隱藏底層硬件和服務的復雜性&#xff0c;上層無需關注它們的具體實現細節。 比如操作系…

Kafka進階

文章目錄 概要應用場景消息隊列兩種模式kafka的基礎架構分區常見問題小結 概要 kafka的傳統定義&#xff1a;kafka是一個分布式的基于發布\訂閱模式的消息隊列&#xff0c;主要用于大數據實時處理領域。 kafka的最新概念&#xff1a;kafka是一個開源的分布式事件流平臺&#x…

隨機森林模型、模型模擬技術和決策樹模型簡介

隨機森林模型、模型模擬技術和決策樹模型簡介 隨機森林模型 隨機森林模型是一種比較新的機器學習模型&#xff0c;它是通過集成學習的方法將多個決策樹模型組合起來&#xff0c;形成一個更加強大和穩定的模型。隨機森林模型的基本原理是“數據隨機”和“特征隨機”&#xff0…

10種常見的光伏發電量計算方法

光伏發電是一種將太陽能轉化為電能的清潔能源技術。隨著環境保護意識的日益增強和能源結構的轉型&#xff0c;光伏發電得到了廣泛的應用。對于光伏系統來說&#xff0c;發電量的準確計算是評估系統性能、預測長期收益和優化系統運行的關鍵。以下是常見的光伏發電量計算方法&…

Vista 2.08: The storm chaser

A story about Mathew —— the storm chaser. "He is too young to understand his dream and the Harvard is just others dream put into his mind." "You dont have to chase for the happiness that defined by others. You must define your own happines…

Python3零基礎教程之Python解釋器與開發環境搭建

大家好&#xff0c;我是千與編程&#xff0c;碩士畢業于北京大學&#xff0c;曾先后就職于字節跳動&#xff0c;京東等互聯網大廠&#xff0c;目前在編程導航知識星球擔任星球嘉賓&#xff0c;著有《AI算法畢設智囊袋》&#xff0c;《保姆級帶你通關秋招教程》兩大專欄。 今天開…

從it方面介紹部分好玩的電影

電影推薦 1.《黑客帝國》《The matrix》 僅推薦第一二三部2. 《代碼奔騰》《code rush》3 人物傳記類 《社交網絡》 《硅谷傳奇》 《喬布斯》4《模仿游戲》也是傳記 但主演是 卷福5 《環形使者》6 《蝴蝶效應》 三部7.《隱私大盜》8.《監視資本主義&#xff1a;智能陷阱》9. 劇…

RMAN備份與恢復

文章目錄 一、RMAN介紹二、全量備份三、增量備份0級備份1級增量備份累積性差量備份總結 四、壓縮備份壓縮備份介紹壓縮備份操作壓縮備份優缺點 五、異常恢復1、恢復前的準備2、恢復數據庫 六、RMAN相關參數 一、RMAN介紹 RMAN&#xff08;Recovery Manager&#xff09;是Oracl…

在做了frp的實驗室服務器不同端口間傳輸文件

背景 實驗室有兩臺服務器&#xff0c;使用的是一個IP&#xff0c;兩個端口&#xff0c;給人看上去是一臺服務器的兩個端口&#xff0c;實際是兩臺服務器。 現在我需要從一個端口傳輸一個文件夾到另外一個端口&#xff0c;實際上是從一個機器傳輸到另外一個機器。 操作 在兩臺…