连接音频文件并叠加在视频上

Concatenating audio files and superimposing over video

我正在尝试编写一个程序,从一个文件夹中获取一堆视频,编译它们,然后从一个文件夹中获取另一堆音频文件并将它们连接起来,然后将合并后的音频叠加在最终视频(希望有意义)。我能够将视频处理成一个最终输出视频,但我一直 运行 在合并音频时遇到麻烦。下面我提供了两小段与音频合成相关的代码,我正在使用 moviepy 来处理视频并尝试将其用于音频。

songDirectory = './songs/'
songList = []
songs = []
audioclip=''

def makeCompilation():
    for filename in os.listdir(songDirectory):
        f = os.path.join(songDirectory, filename)
        if os.path.isfile(f) and filename.endswith(".mp3"):
            audioclip = moviepy.editor.AudioFileClip(f)
            songList.append(filename)


    for song in os.listdir(songDirectory):
        c = os.path.join(songDirectory, song)
    audio_clips = moviepy.editor.AudioFileClip(c)
    audio_output = moviepy.editor.concatenate_audioclips(audio_clips)
    finalClip = concatenate_videoclips(videos, method="compose")
    final_duration = finalClip.duration    
    final_audio_output = audio_output.set_duration(final_duration)
    final_output= finalClip.set_audio(final_audio_output).fx(afx.audio_fadein, 3.0)


    audio_path = "./songs/tempaudiofile.m4a"

    #print(description)
    # Create compilation
    final_output.write_videofile(outputFile, threads=8, temp_audiofile=audio_path, remove_temp=True, codec="libx264", audio_codec="aac")

    return description

该程序似乎能够找到音频目录,但我需要能够使用 os.path.join(songDirectory, filename) 直接指向每个 mp3 文件,所以我弄乱了它直到我得到上面的代码。当我尝试遍历 songList 时,正如预期的那样,我得到了一个错误,指出 'str' 不可迭代,而其他错误则指出 'str' 没有属性 'duration'。本质上,我需要它做的就是遍历输入文件夹并通过任何方式组合文件。当前代码 returns 输出:

Free Fredobagz x Aflacko x Flint type beat - 'Default_Dance' [prod. kah]-jro0v6ogZ0Y.mp4
225.05
Total Length: 225.05
225.05
Traceback (most recent call last):
  File "/Users/daddyK/Desktop/comp_ bot/make_compilation3.py", line 127, in <module>
makeCompilation(path = "./videos/",
  File "/Users/daddyK/Desktop/comp_ bot/make_compilation3.py", line 110, in makeCompilation
audio_output = moviepy.editor.concatenate_audioclips(audio_clips)
  File "/Users/daddyK/Library/Python/3.10/lib/python/site-packages/moviepy/audio/AudioClip.py", line 315, in concatenate_audioclips
durations = [c.duration for c in clips]
TypeError: 'AudioFileClip' object is not iterable

在这一点上我有点难过,所以如果有人可以提供一些关于我应该如何解决错误的见解 and/or 如果我在代码方面朝着正确的方向前进,我倒是感激不尽! 抱歉,如果代码没有任何意义,如果需要,我会 post 整个 .py 文件

根据@kesh 的评论,您需要更换

songList.append(filename)

songList.append(audioclip)