Pydub 音频导出在开始时有静音吗?
Pydub audio export has silence at the start?
我写了一个 python 脚本来获取 30 分钟的 mp3 音频,并将其分割成带有 unix 时间戳的秒长文件。源音频文件为 192kbps、441000Hz、stero mp3 文件。
我希望这样的服务可以从广播电台(我工作的地方)存档音频,并可以在给定的开始和结束时间将其传送给用户,直到第二个。我们让服务器关闭一个小时进行维护(我们尽量不这样做,但它确实发生了),我们在这段时间内使用另一台计算机将我们的音频保存为 30 分钟的块来记录它。通常,此存档服务器会毫无问题地自行保存第二长的块。
执行转换的函数,给定一个 30 分钟的输入音频文件、保存输出块的目录以及文件的开始时间作为 unix 时间戳:
def slice_file( infile, workingdir, start ):
#find the duration of the input clip in millliseconds
duration_in_milliseconds = len(infile)
print ("Converting " + working_file + " (", end="", flush=True)
song = infile
#grab each one second slice and save it from the first second to the last whole second in the file
for i in range(0,duration_in_milliseconds,1*one_second):
#get the folder where this second goes:
arr = datefolderfromtimestamp( int(start) + (int(i/1000)))
#print ("Second number: %s \n" % (int(i/1000)) )
offset = (i + one_second)
current_second = song[i:offset]
ensure_dir(working_directory + "/" + arr[0] + "/" + arr[1] + "/" + arr[2] + "/")
filename = os.path.normpath(working_directory + "/" + arr[0] + "/" + arr[1] + "/" + arr[2] + "/" + str(int(start) + (int(i/1000))) + "-second.mp3")
current_second.export(filename, format="mp3")
#indicate some sort of progress is happening by printing a dot every three minutes processed
if( i % (3*60*one_second) == 0 ):
print ('.', end="", flush=True)
print (")")
我的问题是,此脚本转换的所有第二个文件似乎都长于一秒,开始时平均有 70 毫秒的静音。当我从我的存档服务器下载文件时,它给我所有的文件连接在一起,所以这听起来很糟糕而且有问题。
有人可以帮帮我吗?我不确定这个错误是从哪里来的。
如果你好奇的话,我的完整脚本:
更新:找到了它的来源 - LAME 在文件的开头添加了缓冲区。
我写了一个 python 脚本来获取 30 分钟的 mp3 音频,并将其分割成带有 unix 时间戳的秒长文件。源音频文件为 192kbps、441000Hz、stero mp3 文件。
我希望这样的服务可以从广播电台(我工作的地方)存档音频,并可以在给定的开始和结束时间将其传送给用户,直到第二个。我们让服务器关闭一个小时进行维护(我们尽量不这样做,但它确实发生了),我们在这段时间内使用另一台计算机将我们的音频保存为 30 分钟的块来记录它。通常,此存档服务器会毫无问题地自行保存第二长的块。
执行转换的函数,给定一个 30 分钟的输入音频文件、保存输出块的目录以及文件的开始时间作为 unix 时间戳:
def slice_file( infile, workingdir, start ):
#find the duration of the input clip in millliseconds
duration_in_milliseconds = len(infile)
print ("Converting " + working_file + " (", end="", flush=True)
song = infile
#grab each one second slice and save it from the first second to the last whole second in the file
for i in range(0,duration_in_milliseconds,1*one_second):
#get the folder where this second goes:
arr = datefolderfromtimestamp( int(start) + (int(i/1000)))
#print ("Second number: %s \n" % (int(i/1000)) )
offset = (i + one_second)
current_second = song[i:offset]
ensure_dir(working_directory + "/" + arr[0] + "/" + arr[1] + "/" + arr[2] + "/")
filename = os.path.normpath(working_directory + "/" + arr[0] + "/" + arr[1] + "/" + arr[2] + "/" + str(int(start) + (int(i/1000))) + "-second.mp3")
current_second.export(filename, format="mp3")
#indicate some sort of progress is happening by printing a dot every three minutes processed
if( i % (3*60*one_second) == 0 ):
print ('.', end="", flush=True)
print (")")
我的问题是,此脚本转换的所有第二个文件似乎都长于一秒,开始时平均有 70 毫秒的静音。当我从我的存档服务器下载文件时,它给我所有的文件连接在一起,所以这听起来很糟糕而且有问题。
有人可以帮帮我吗?我不确定这个错误是从哪里来的。
如果你好奇的话,我的完整脚本:
更新:找到了它的来源 - LAME 在文件的开头添加了缓冲区。