利用pydub和baidu语音api实现自动添加字幕

本文介绍了如何利用python的pydub库和百度语音API实现自动添加字幕,详细讲解了从音频提取、预处理、切割到调用API的全过程,并提供了完整的程序代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

原来想翻译一段视频,下了某字幕工具,发现有ai听译的功能,但是未认证用户只能体验1分钟(申请了认证却不通过),想想原理也挺简单,就自己写了。
另外字幕精准程度根据视频源音频清晰以及口音问题有所增减,个人认为这个工具的主要功能是方便打时间轴,听译还是自己上吧。
github地址: audio2srt

程序介绍

基本工具

  • 语言:python3.6
  • 需要模块:pydub api
  • 其他工具:狸窝或视频转音频工具,Adobe Audition或其他音频处理工具

提取音频

根据音频转换器的可输出格式,这里直接提取了wav格式的音频。百度语音识别API可以接受

pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式)

但是pydub自带的AudioSegment可以直接输出wav而不需要调用到ffmpeg,故wav在此处比较合适。
(可选)可以根据需要用Adobe Audition去噪,并且观察下大概底噪的的范围,后面用作silence_thresh的变量值。

修改pydub的silence.py

主要是把截取视频的时间戳返回来,以便字幕定位,这一步可以直接改或者另存为。
另:若是用pip安装模块,寻找silence.py可以通过pip show来实现。

def split_on_silence(audio_segment, min_silence_len=1000, silence_thresh=-16, keep_silence=100,
                     seek_step=1):
    not_silence_ranges = detect_nonsilent(audio_segment, min_silence_len, silence_thresh, seek_step)

    chunks = []
    starttime=[]
    endtime=[]
    for start_i, end_i in not_silence_ranges:
        start_i = max(0, start_i - keep_silence)
        end_i += keep_silence

        chunks.append(audio_segment[start_i:end_i])
        starttime.append(start_i)
        endtime.append(end_i)

    return chunks,starttime,endtime

读取音频和预处理

预处理的目的是直接改成百度要求的:

录音参数必须符合 8k/16k 采样率、16bit 位深、单声道

且这样的音频体积较小后面处理起来比较快。

#读取音频 预处理
sound=AudioSegment.from_wav('.yinping/origin.wav')
sound=sound.set_frame_rate(16000)
sound=sound.set_channels(1)

切割音频转换成所需的WAV

split_on_silence的几个参数,大家按需改就好。注意silence_thresh变量可以用音频软件观察。

audio_segment :原始pydub.AudioSegment()对象
min_silence_len : (ms)用于切割一个沉默片段的最小长度 。默认值:1000毫秒
silence_thresh : (dBFS) 任何比这安静的值将被视为沉默。默认值:-16 dbfs
keep_silence :(ms) 在开始一端的块加入沉默值。使声音听起来不会像是突然切断。(默认值:100毫秒)

注意:
运行后会在指定文件夹生成切割后的片段,命名以0~N.wav,注意原始文件或其他重要音频不要被覆盖了。

#切割音频
min_silence_len=700
silence_thresh=-32
pieces,start_t,end_t=split_on_silence(sound,min_silence_len,silence_thresh)
silent = AudioSegment.silent(duration=1000)
#将音频转换为wav
def gotwave
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值