如何将mp3音频文件截断30%?

时间:2017-10-09 07:29:44

标签: python audio mp3

我试图将音频文件截断30%,如果音频文件长4分钟,截断后应该大约72秒。我已经编写了下面的代码来做它但它只返回一个0字节的文件大小。请告诉我哪里出错了?

def loadFile():
    with open('music.mp3', 'rb') as in_file:
        data = len(in_file.read())
        with open('output.mp3', 'wb') as out_file:
            ndata = newBytes(data)
            out_file.write(in_file.read()[:ndata])

def newBytes(bytes):
    newLength = (bytes/100) * 30
    return int(newLength)

loadFile()

2 个答案:

答案 0 :(得分:2)

您试图再次读取您的文件,这将导致无数据,例如len(in_file.read()。而是将整个文件读入变量,然后计算其长度。然后可以再次使用该变量。

def newBytes(bytes):
    return (bytes * 70) / 100

def loadFile():
    with open('music.mp3', 'rb') as in_file:
        data = in_file.read()

    with open('output.mp3', 'wb') as out_file:
        ndata = newBytes(len(data))
        out_file.write(data[:ndata])

最好先乘以然后除以避免必须使用浮点数。

答案 1 :(得分:0)

您无法按字节大小可靠地截断MP3文件,并且希望它在音频时间长度内等效截断。

MP3帧可以改变比特率。虽然你的方法会起作用,但它并不是那么准确。此外,您毫无疑问会破坏帧,在文件末尾留下毛刺。您还将丢失ID3v1标签(如果您仍然使用它们......最好还是使用ID3v2)。

考虑使用-acodec copy执行FFmpeg。这将简单地复制字节,同时保持文件的完整性,并确保在您希望的地方进行良好的清理。