繁体   English   中英

如何在moviepy中组合2个音频mp3?

[英]How to combine 2 audio mp3s in moviepy?

我有一个带有“语音”语音的 mp3 和一个带有背景音乐“back_mus”的 mp3,我想将它们组合成一个 mp3 文件。 我尝试运行下面的代码,但我收到此错误“AttributeError: 'CompositeAudioClip' object has no attribute 'fps'”。 我怎样才能让它工作? 先感谢您。

speech = AudioFileClip(r"{}".format(cwd) + "/SpeechFolder/speech100.mp3")
back_music = AudioFileClip(r"{}".format(cwd) + "/back_mus.mp3")
back_music = back_music.subclip(0, int(speech.duration)) #I don't know if this line works, if it is wrong please tell me how to fix this, but you can pretty much disregard this part, I just tried to do this because the back_mus mp3 is pretty big, and I did not want to work with a 100 mb file every time, so I intended to make it the same length as the voice over mp3

final_clip = CompositeAudioClip([speech, back_music])
final_clip.write_audiofile(r"{}".format(cwd) + "/SpeechFolder/speech1000.mp3")

完整错误:

Traceback (most recent call last):
  File "c:\Users\TheD4\OneDrive\Desktop\New folder\Body.py", line 205, in body
    final_clip.write_audiofile(r"{}".format(cwd) + "/SpeechFolder/speech1000.mp3")
  File "<decorator-gen-45>", line 2, in write_audiofile
  File "C:\Users\TheD4\AppData\Local\Programs\Python\Python39\lib\site-packages\moviepy\decorators.py", line 54, in requires_duration
    return f(clip, *a, **k)
  File "C:\Users\TheD4\AppData\Local\Programs\Python\Python39\lib\site-packages\moviepy\audio\AudioClip.py", line 192, in write_audiofile
    if not self.fps:
AttributeError: 'CompositeAudioClip' object has no attribute 'fps'

看来你发现了一个错误。 如果不同的剪辑具有不同的 FPS,我认为复合剪辑不会自动获得 fps。 您始终可以设置 fps,例如

newclip=clip.set_fps(25)

您还可以修改 AudioClip。 试图追踪问题时的肮脏黑客攻击:在 AudioClip.py 中,更改:

if fps is None:
    fps = self.fps

if fps is None:
    fps = 44100

我面临同样的问题。 答案在 github 上。 这是帮助我的代码。 enter code here import moviepy.editor as mpy

enter code here clip=mpy.VideoFileClip("sample.mp4")

enter code here subclip=mpy.concatenate_videoclips([clip.subclip((1,0), enter code here (2,0)),clip.subclip((3,0),(4,0)),clip.subclip ((5,0),(6,0))])

enter code here aud = subclip.audio.set_fps(44100) enter code here subclip = subclip.without_audio().set_audio(aud) enter code here subclip.preview()

speech = AudioFileClip(r"{}".format(cwd) +"/SpeechFolder/speech100.mp3")
back_music = AudioFileClip(r"{}".format(cwd) + "/back_mus.mp3")
back_music = back_music.subclip(0, int(speech.duration)) 
final_clip = CompositeAudioClip([speech, back_music])
final_clip.write_audiofile(r"{}".format(cwd) +"/SpeechFolder/speech1000.mp3", fps = 16000)

您可以使用fps参数调用write_audiofile

我也遇到了这个错误,我的解决方案很粗糙,但是可以。

CompositeAudioClip class 不初始化 fps 属性。 我有一些想法可以解释这种特殊性,但我不确定。

一个可能的竞争者:如果合成不同 fps 值的音频剪辑,该程序曾经依赖于另一种标准化值的方法。

修复一目了然:我打开moviepy程序文件,找到CompositeAudioClip class,并添加标准fps属性。

方法

在您机器上下载的 moviepy 文件夹中找到“Audioclip.py”文件。 文件路径通常在语法错误中给出。 如果您使用 Pycharm 和 windows,它看起来类似于:

C:\Users\Your_name\PycharmProjects\Your_Project\venv\Lib\site-packages\lib\site-packages\moviepy\audio\AudioClip.py"

打开文件,找到 CompositeAudioClip Class。 (第 265 行):

CompositeAudioClass 及其构造函数

然后初始化一个fps值。 我选择了 48100hz,因为这是视频音频的标准。

在此处输入图像描述

现在运行你的代码!

这对我有用,我希望你觉得它有用。

但是,这段代码有问题。 使用预设 fps 是对每个音频文件的全面处理,忽略需要更合适 fps 设置的细微差别。 如果您要合成的 fps 音频文件明显更高或更低,请手动将代码中的 fps 编辑为所需的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM