ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整

文章目录

  • ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整
    • 获取音频长度
      • pydub获取音频长度
        • 获取时长
        • 精确到秒
        • 格式设定
      • mutagen获取音频长度
    • 调整音量
    • 视频音量调整
    • 注意事项

ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整

老王媳妇说上次那个pip挺好用的,就是长度这个有点迷茫,
那就测下吧

获取音频长度

使用 pydub 和 mutagen 库都可以获取MP3文件的长度。

pydub获取音频长度

获取时长
from pydub.utils import mediainfo

def get_duration(filename):
    info = mediainfo(filename)
    duration = info['duration']
    return duration

filename = 'yourfile.mp3'
print(get_duration(filename))
精确到秒
from pydub.utils import mediainfo

def get_duration(filename):
    info = mediainfo(filename)
    duration = round(float(info['duration']))
    return duration

filename = 'yourfile.mp3'
print(get_duration(filename))
格式设定

如果你需要将获取的时长转换为 “03:03” 这样的格式, 可以首先将时长转换为整数(秒数), 然后通过除法和取余运算获取分钟和秒, 然后将这些值格式化为字符串。这是一个示例:

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

filename = 'yourfile.mp3'
print(get_duration(filename))

这个函数将返回一个字符串,比如 “03:03”。

mutagen获取音频长度

如果你想使用的是mutagen库,可以这样做:

from mutagen.mp3 import MP3

def get_duration(filename):
    audio = MP3(filename)
    duration = audio.info.length
    return duration

filename = 'yourfile.mp3'
print(get_duration(filename))

同样,如果需要精确到秒级+格式化如上pydub的处理操作即可

调整音量

老王媳妇说这小视频挺好的,就是声音有点大,
安排!

使用pydub直接调整mp3音量

以下是一个可以用于调整mp3音量的函数,使用pydub库:

from pydub import AudioSegment

def adjust_audio_db(input_file, output_file, db):
    song = AudioSegment.from_mp3(input_file)
    adjusted_song = song + db
    adjusted_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 random

def 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_change
    adjusted_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

你可能感兴趣的:(面向Chat编程,10分钟,GET,新技能,工具,音视频,python,pydub,moviepy)