簡體   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