Pydub音频导出一开始就是沉默吗?

时间:2016-06-14 03:40:23

标签: python-3.x audio pydub

我编写了一个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毫秒。当我从我的归档服务器下载文件时,它会将所有文件连接在一起,因此听起来很糟糕且很糟糕。

有人可以帮帮我吗?我不确定这个错误来自哪里。

如果您有点好奇我的完整脚本:

http://pastebin.com/fy8EkVSz

1 个答案:

答案 0 :(得分:0)

更新:找到了这个的来源 - LAME将缓冲区添加到文件的开头。

请参阅:http://lame.sourceforge.net/tech-FAQ.txt