如何合并多个mp3文件并保持静音?

时间:2020-07-16 02:46:27

标签: python glob pydub

当我尝试使用pydubglob合并一个文件夹中的多个.mp3文件以遍历文件时,出现以下错误。

from pydub import AudioSegment
from os import getcwd
import glob

cwd = (getcwd()).replace(chr(92), '/')
export_path = f'{cwd}/result.mp3'

MP3_FILES = glob.glob(pathname=f'{cwd}/*.mp3', recursive=True)
silence = AudioSegment.silent(duration=15000)
count, lenght = 0, len(MP3_FILES)

for n, mp3_file in enumerate(MP3_FILES):
    mp3_file = mp3_file.replace(chr(92), '/')
    count += 1
    if count == 1:
        print(n, mp3_file)
        audio1 = AudioSegment.from_mp3(mp3_file)
    elif count == 2:
        audio2 = AudioSegment.from_mp3(mp3_file)
    elif count == 3:
        res = audio1 + silence + audio2
        print('Merging')
        count = 0
    if n+1 == lenght:
        res.export(export_path, format='mp3')
        print('\ndone!')

预期的输出:一个音频文件,原始音频之间保持静音。

AUDIO_RESULT: audio1 silence audio2 silence audio3...

跟踪:

[mp3 @ 0000021b440ec740] Failed to read frame size: Could not seek to 1026.
C:\Users\Acer\Documents\1 file.mp3: Invalid argument

1 个答案:

答案 0 :(得分:0)

它说-Invalid argument可能是由文件路径中使用的空间引起的。

如果使用命令行传递文件/文件夹路径,则路径字符串应在引号(“”)

内部传递
"C:\Users\Acer\Documents\Upwork\Shashank Rai\mp3 segmented delay\1 speech.mp3"

但是,在Windows操作系统中,有时C:\会产生问题,因为一个\用于特殊字符。您可以用双\\进行测试吗?

"C:\\Users\\Acer\\..."

编辑1: 你能测试一下吗?

from pathlib import Path 

cwd = Path.cwd()
MP3_FILES = list(cwd.rglob('*.mp3'))
...
...