[英]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 行):
然后初始化一个fps值。 我选择了 48100hz,因为这是视频音频的标准。
现在运行你的代码!
这对我有用,我希望你觉得它有用。
但是,这段代码有问题。 使用预设 fps 是对每个音频文件的全面处理,忽略需要更合适 fps 设置的细微差别。 如果您要合成的 fps 音频文件明显更高或更低,请手动将代码中的 fps 编辑为所需的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.