Pydub - 将 split_on_silence 与最小长度/文件大小结合起来

2023-11-27

我有两个脚本,其中一个会分割一定长度的音频,另一个会在每次出现无声段落时分割音频。是否可以在静音时分割音频,但只能在经过一定时间后?我需要在静音状态下分割成不少于 5 分钟的视频块。

分割脚本忽略静音:

from pydub import AudioSegment
#from pydub.utils import mediainfo
from pydub.utils import make_chunks
import math

#lac_audio = AudioSegment.from_file("Kalimba.mp3", "mp3")
#flac_audio.export("audio.mp3", format="mp3")
myaudio = AudioSegment.from_file("Kalimba.mp3" , "mp3")
channel_count = myaudio.channels    #Get channels
sample_width = myaudio.sample_width #Get sample width
duration_in_sec = len(myaudio) / 1000#Length of audio in sec
sample_rate = myaudio.frame_rate

print "sample_width=", sample_width 
print "channel_count=", channel_count
print "duration_in_sec=", duration_in_sec 
print "frame_rate=", sample_rate
bit_rate =16  #assumption , you can extract from mediainfo("test.wav") dynamically


wav_file_size = (sample_rate * bit_rate * channel_count * duration_in_sec) / 8
print "wav_file_size = ",wav_file_size


file_split_size = 10000000  # 10Mb OR 10, 000, 000 bytes
total_chunks =  wav_file_size // file_split_size

#Get chunk size by following method #There are more than one ofcourse
#for  duration_in_sec (X) -->  wav_file_size (Y)
#So   whats duration in sec  (K) --> for file size of 10Mb
#  K = X * 10Mb / Y

chunk_length_in_sec = math.ceil((duration_in_sec * 10000000 ) /wav_file_size)   #in sec
chunk_length_ms = chunk_length_in_sec * 1000
chunks = make_chunks(myaudio, chunk_length_ms)

#Export all of the individual chunks as wav files

for i, chunk in enumerate(chunks):
    chunk_name = "chunk{0}.mp3".format(i)
    print "exporting", chunk_name
    chunk.export(chunk_name, format="mp3")

忽略长度的分割脚本:

from pydub import AudioSegment
from pydub.silence import split_on_silence

sound = AudioSegment.from_mp3("my_file.mp3")
chunks = split_on_silence(sound, 
    # must be silent for at least half a second
    min_silence_len=500,

    # consider it silent if quieter than -16 dBFS
    silence_thresh=-16

 )

for i, chunk in enumerate(chunks):
    chunk.export("/path/to/ouput/dir/chunk{0}.wav".format(i), format="wav")

我的建议是使用pydub.silence.split_on_silence()然后根据需要重新组合这些段,以便您获得的文件大小大致符合您的目标大小。

就像是

from pydub import AudioSegment
from pydub.silence import split_on_silence

sound = AudioSegment.from_file("/path/to/file.mp3", format="mp3")
chunks = split_on_silence(
    sound,

    # split on silences longer than 1000ms (1 sec)
    min_silence_len=1000,

    # anything under -16 dBFS is considered silence
    silence_thresh=-16, 

    # keep 200 ms of leading/trailing silence
    keep_silence=200
)

# now recombine the chunks so that the parts are at least 90 sec long
target_length = 90 * 1000
output_chunks = [chunks[0]]
for chunk in chunks[1:]:
    if len(output_chunks[-1]) < target_length:
        output_chunks[-1] += chunk
    else:
        # if the last output chunk is longer than the target length,
        # we can start a new one
        output_chunks.append(chunk)

# now your have chunks that are bigger than 90 seconds (except, possibly the last one)

或者,您可以使用pydub.silence.detect_nonsilent()找到范围并自行决定在何处分割原始音频

注意:我也将其发布在类似/重复的 github 问题

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pydub - 将 split_on_silence 与最小长度/文件大小结合起来 的相关文章

  • 只使用 Django 的某些部分?

    我喜欢 Django 但对于一个特定的应用程序 我只想使用它的一部分 但我对 Django 的内部工作原理还不够熟悉 所以也许有人可以指出我必须做什么的正确方向查看 具体来说 我想使用 模型和数据库抽象 The 缓存API http doc
  • 重新索引错误没有意义

    I have DataFrames大小在 100k 到 2m 之间 我正在处理这个问题的框架是如此之大 但请注意 我必须对其他框架执行相同的操作 gt gt gt len data 357451 现在这个文件是通过编译许多文件创建的 所以它
  • pip 安装失败,SSL 证书验证失败 (_ssl.c:833)

    我无法通过 pip install 安装任何外部 python 模块 我已经正确安装了 python 但如果我使用 pip install 它会显示此错误 这是我运行后的代码pip install pytesseract C Users 1
  • Spyder 导入模块出错

    我正在尝试在 Spyder 中使用 sklearn 一开始 当我尝试导入它时 我收到 ImportError No module named sklearn 然后我用 PYTHONPATH 管理器设置 PATH 然后使用工具菜单中的 更新模
  • turtle.Screen().screensize() 未输出正确的屏幕尺寸[重复]

    这个问题在这里已经有答案了 我编写了一些代码来在屏幕周围随机放置点 但是 它并没有覆盖整个屏幕 import turtle import random t turtle Turtle color red green blue pink ye
  • Seaborn 热图中的自定义调色板间隔

    我正在尝试绘制一个heatmap https seaborn pydata org generated seaborn heatmap html使用seaborn库 绘图函数如下所示 def plot confusion matrix da
  • 了解 asyncio 已经运行的永久循环和挂起的任务

    我在理解如何将新任务挂起到已经运行的事件循环中时遇到问题 这段代码 import asyncio import logging asyncio coroutine def blocking cmd while True logging in
  • 如何使用 xlrd 将新列和行添加到 .xls 文件

    如何向 xlrd 中的工作表添加新列和 或行 我有一个使用 open workbook 读取的 xls 文件 我需要在第一张表中添加一个新列 bouncebacks 然后在该表中添加新行 但我在 xlrd 文档中找不到任何显示如何添加新行和
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • python:是否有用于对输入流进行分块的库函数?

    我想对输入流进行分块以进行批处理 给定一个输入列表或生成器 x in 1 2 3 4 5 6 我想要一个能够返回该输入块的函数 说 如果chunk size 4 then x chunked 1 2 3 4 5 6 这是我一遍又一遍地做的事
  • PyCharm 无法识别字典值类型

    我有一个简单的代码片段 其中我将字典值设置为空列表 new dict for i in range 1 13 new dict i 现在 如果在下一行的循环内我会输入new dict i 并添加一个点 我希望 PyCharm 向我显示可用于
  • 根据给定列表中的值替换列中的值[重复]

    这个问题在这里已经有答案了 我在数据框中有一列 仅允许定义列表中存在的值 例如 给定列表 l1 1 2 5 6 如果列表中不存在列中的值 我需要将每个值替换为 0 column Expected column 1 1 5 5 2 2 3 0
  • 如何绘制多类分类器的精度和召回率?

    我正在使用 scikit learn 我想绘制精度和召回曲线 我正在使用的分类器是RandomForestClassifier scikit learn 文档中的所有资源都使用二元分类 另外 我可以绘制多类的 ROC 曲线吗 另外 我只找到
  • 如何在数据框中绘制包含三列的无向图,形成 3 种不同类型的节点(三方)?

    我正在尝试使用三个不同的列表绘制网络的可视化 这三个列表形成 3 种类型的节点 下面的代码正在运行 如图所示 需要两个列表 用户 ID 评分 但是 我希望我的图表是三部分的 即 user userId review ratings prod
  • PyCharm - 如何挂起所有线程

    我们使用 PyCharm 5 0 1 进行多线程调试 当它在断点处停止时 只有特定线程停止 而所有其他线程继续 这使得 冻结时刻 和检查参数值以及其他线程的当前状态变得困难 当其中一个线程在断点处停止时 是否可以挂起所有线程 这在最新的 P
  • 如何在 Sublime 2 REPL Mac 中运行 Python 3

    我的问题如下 我安装了 sublime 2 和 sublime repl 插件 一切正常 我唯一需要的是更改在控制台内置的 sublimerepl 上运行的 python 版本 我的意思是 我有 python 2 7 5 预先安装了 mav
  • 在python中安装scipy模块时出错

    我正在尝试使用 pip 在 python 中安装 scipy 模块 它显示以下错误 Command c users sony appdata local programs python python35 32 python exe u c
  • Python 中的十进制到二进制半精度 IEEE 754

    我只能使用以下命令将十进制转换为二进制单精度 IEEE754struct pack模块 或者使用相反的方法 float16 或 float32 numpy frombuffer 是否可以使用 Numpy 将十进制转换为二进制半精度浮点数 我
  • Matplotlib 中的 TwoSlopeNorm 未按预期工作

    我正在尝试创建一个具有发散颜色图的绘图 该颜色图在零附近不对称 In this https stackoverflow com a 20146989 6288682例如 DivergingNorm函数被使用并产生我想要的 然而 我使用的是更
  • 部署 Flask 应用程序时如何检测额外文件的更改并重新加载应用程序? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在 Flask 中构建了一个小型 Web 应用程序 并尝试将其部署在 Pythonanywhere 上 在开发过程中

随机推荐

  • 检查 Django 模板中列表变量的项目中是否存在某些内容

    我有一个传递给 Django 模板的部分列表 这些部分有不同的类型 我想说 如果有这种类型的部分 请在我的模板中显示此行 但有问题 我基本上想做的是这个 if s name Social for s in sections Hello So
  • 如何使用 postgres_fdw 连接到本地主机?

    我的想法是我有一个名为的本地数据库northwind 与postgres fdw我想连接另一个名为test在本地主机上 远程连接模拟 对于诸如更新数据库中的表之类的情况 在其他数据库中执行某些操作 例如保存到历史记录等 所以我打开 psql
  • Laravel Sanctum 未使用邮递员进行身份验证

    我是按照Laravel官方文档一步一步来的 当我发送请求至 host api login 我可以收到包含令牌的响应 一切都是正确的 但是当我尝试向 host api user 它始终未经验证 我检查了我的代码好几次 我无法修复它 在我的 e
  • snmpget 返回“此代理在此 OID 处没有可用的此类对象”

    我正在尝试按照以下链接配置 SNMP 代理 http www net snmp org tutorial tutorial 5 toolkit mib module 我已将 c 和 h 文件放入 agent mibgroup 文件夹中 co
  • 对于 IE 中的 SVG 元素,outerHtml 返回未定义

    这是我的代码
  • 运行 VS2008 64 位调试构建时出现“应用程序配置不正确”和“并行配置不正确”

    我正在使用 64 位操作系统 Windows 7 Ultimate 机器 VS2008 和 64 位插件进行工作 我已经在 32 位和 64 位 调试和发布配置中成功构建了我的项目 64 位调试未启动 它给出了错误 无法启动程序 xxx 由
  • 尝试在 Linux 上进行紧密睡眠

    我需要调查 测试 Linux 上某些代码在以下条件下的行为close可能会被信号处理程序中断 无论有或没有SA RESTART 最方便的设置是什么close系统调用睡眠一段可测量的时间窗口 在此期间我可以尝试用信号击中进程 一些想法 故意缓
  • Javascript - 计算具有值的数组对象

    我收到一个返回给我的数组 我需要计算其中有值的行 我尝试调用 arr length 但这给了我数组的总长度 var arr id 1 id 2 id 3 id 4 id id id 结果应该是 4 使用过滤器仅捕获具有值的键 并返回结果数组
  • Linux Clock_gettime(CLOCK_MONOTONIC)奇怪的非单调行为

    伙计们 在我的应用程序中我正在使用clock gettime CLOCK MONOTONIC 为了测量帧之间的增量时间 游戏开发中的典型方法 我时不时地面临一种奇怪的行为clock gettime 返回的值有时不是单调的 即前一个时间更大比
  • 如何从崩溃的应用程序中释放大页面

    我有一个使用大页面的应用程序 并且该应用程序由于某些错误而突然崩溃 崩溃后 由于应用程序没有正确释放hugepage 因此sys文件系统中的空闲hugepage数量没有增加 sudo cat sys kernel mm hugepages
  • GROUP BY 不带聚合函数

    我试图理解 GROUP BY Oracle 数据库管理系统新手 没有聚合函数 它是如何运作的 这是我尝试过的 EMP table on which i will run my SQL SELECT ename sal FROM emp GR
  • 如何在PDO中加载sqlite扩展?

    首先我想向大家通报一下有关情况 以免引起误会 通过sqlite扩展 我提到的是Sqlite的扩展如FTS 而不是PHP的sqlite扩展 我一直在我的应用程序中使用 PDO Sqlite 它无法更改 正如我所见here Sqlite 扩展可
  • Antlr4 Javascript 访问者

    我目前正在尝试在 Antlr4 Visitor 的帮助下开发 JavaScript 编译器 我已经用 Java 实现了这一点 但不知道如何在 JavaScript 中实现这一点 也许有人可以回答我几个问题 1 Java中有一个Visitor
  • 如何使用准备好的语句一次在 mysql 数据库中插入多行?

    我正在尝试使用 staticsan 的答案这个问题对于准备好的陈述 让我们看这个例子 stmt mysqli gt prepare INSERT INTO something userid time title VALUES stmt gt
  • 使用 ActiveJob AsyncAdapter 列出排队任务

    有没有办法让我看到队列中剩余多少个作业 甚至可以检查每个作业 经过一番深入研究后源代码这是我发现的 ActiveJob QueueAdapters AsyncAdapter uses a 并发红宝石线程池来调度和执行作业 当您在配置中初始化
  • 如何使用 PHP 动态创建价格范围

    如何从价格数组创建价格范围 假设我有一个保存价格的数组 Array 0 gt 500 1 gt 500 2 gt 520 3 gt 540 4 gt 551 5 gt 599 6 gt 601 7 gt 601 8 gt 650 9 gt
  • 是否可以从非通用应用程序使用 Wi-Fi Direct?

    我一直在尝试编写一个简单的代码基于命令行的应用程序 使用 Visual Studio 2015 和 Windows 10 中的 C 和 NET 启动 Wi Fi Direct 广告商 如下所示Microsoft 的通用示例 而是手动添加对必
  • 卸载 DLL 期间删除静态对象时退出线程会导致死锁吗?

    我的延迟加载 DLL 中有一个 ClassA 实例 全局 静态对象 该对象内部有一个 观察者 线程 需要执行正常关闭 当我调用 FreeLibrary 时 我注意到在删除这个静态对象期间 我的线程请求关闭 但挂在 endthreadex 上
  • 如何在子目录中移动模块?

    我需要写很多trivial模块 我不想隐藏它们之间的主要模块 由于这个原因 我想要一个像这样的目录树 Project module1 module2 directory module3 module4 module5 问题 如果我将模块移动
  • Pydub - 将 split_on_silence 与最小长度/文件大小结合起来

    我有两个脚本 其中一个会分割一定长度的音频 另一个会在每次出现无声段落时分割音频 是否可以在静音时分割音频 但只能在经过一定时间后 我需要在静音状态下分割成不少于 5 分钟的视频块 分割脚本忽略静音 from pydub import Au