我有两个脚本,其中一个脚本拆分一定长度的音频,另一个脚本在每次无声段落时都拆分音频。仅在经过一定时间后,才可以在静音时分割音频吗?我需要在不少于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问题上发布了此内容
有时候希望指定两个节点之间的最小长度,可以使用minlen这个属性实现,如果必要的话,还可以使用invisible属性让这个节点隐藏。 [ Aachen ] --> [ Bonn ] --> [ Coburg ] [ Aue ] --> { minlen: 3; } [ Cuxhaven ] +--------+ +------+ +----------+ | Aachen |
我有一个Api,它要求我在发送实际文件之前发送文件的字节大小。当我在第一个Api调用中对要发送的文件调用时,它将返回。 null 结果证明的是正确的。因此,在调用时,必须修改或增加。
我正在使用PyCharm社区版2016,我注意到我无法打开大型数据输入文件或日志(20MB)。编辑简单地说“文件XXX太大(大小)”。 不仅如此,似乎没有办法改变限制。官方文档提到了一种增加使用intellisense的最大大小的方法,但根本没有增加可以打开的文件的最大大小。这是真的吗?这真的是一个完全无法打开大型日志的IDE吗?
控制器文件只是调用服务方法。 服务类别: 我想密码是在行中散列后验证的: 如何在散列和保存之前验证此密码? 如有任何帮助,不胜感激。提前谢了。
我不确定这是否可以使用正则表达式。我会尝试使用正则表达式,但如果不可能,我会切换到双重验证。 我的数据库(postgresql)接受为15,6(最多15位,最多6位小数),因此如果我有10位整数,我可以有5位小数。小数分隔符被忽略。 我目前有一个正则表达式(逗号是小数分隔符): 它不验证总长度,只验证左侧的数字。但由于用户也可以键入点(千位分隔符),我有一个怪物:
问题内容: 我有这个设置: HTML : CSS : 通过此设置,它可以在iPhone上运行,但不能在浏览器中运行。 是因为我已经在meta中,也许已经在? 问题答案: 我发现最好的方法是为较旧的浏览器编写默认CSS,因为较旧的浏览器包括5.5、6、7和8。无法读取@media。当我使用@media时,我会这样使用: 但是,您可以使用@media进行任何操作,这只是为所有浏览器构建样式时最适合我的
我在Windows 10,我有anaconda安装,但我想创建一个独立的可执行文件在一个新的,干净的最小环境使用python 3.5.所以我做了一些测试: 我创建了一个python脚本test1.py在文件夹testenv只有: 然后我创建了环境,安装了pyinstaller并创建了可执行文件 它创造了我大约6Mb的test1.exe 测试2:我修改了测试1。具体如下: 我在环境中安装了panda
使用resteasy处理多部分/表单数据请求时,如何控制最大文件大小和/或最大请求大小? 我的代码如下所示: 通过Servlet,我可以使用MultipartConfig注释控制内容。 所以我在考虑绕过resteish并使用注入并在web.xml中配置我的servlet,但我不确定副作用。