簡體   English   中英

在 python 中結合 mp4 和 wav

[英]Combining mp4 with wav in python

我正在嘗試將 a.mp4 文件與 a.wav 文件結合起來。 我正在用 cv2 videowriter 渲染我的 mp4,但我認為它無論如何都沒有與它合並音頻。 我試過moviepy.editor和ffmpeg。 moviepy.editor 不斷弄亂視頻文件,ffmpeg 不斷給我一個錯誤,它無法就地編輯現有文件。 將 .mp4 與另一種音頻文件類型結合也很好,但如果是這樣,最好也回答如何將 midi 文件轉換為您回答的文件類型。 謝謝您的幫助!

moviepy.editor 工作流程:

video = mpe.VideoFileClip(mp4_path)
os.system(f"timidity {midi_path} -Ow -o {wav_path)}")  # Convert .mid to .wav
video = video.set_audio(mpe.AudioFileClip(wav_path))
video.write_videofile(mp4_path, fps=fps)

ffmpeg 工作流程:

video = ffmpeg.input(mp4_path)
os.system(f"timidity {midi_path} -Ow -o {wav_path)}")  # Convert .mid to .wav
audio = ffmpeg.input(wav_path)
video = ffmpeg.output(video, audio, path, vcodec='copy', acodec='aac', strict='experimental')
ffmpeg.run(video)

我測試了兩個模塊,對於moviepy ,即使我使用與output 相同的名稱,我也會得到正確的output 視頻和音頻。 所以我不知道output有什么問題。

對於ffmpeg我不得不為 output 文件使用不同的名稱來解決couldn't edit existing files in-place問題

我還必須使用object.videoobject.audio來替換 output 文件中的音頻。

video  = ffmpeg.input(video_path).video  # get only video channel
audio  = ffmpeg.input(audio_path).audio  # get only audio channel

我的測試代碼

def test_moviepy(video_path, audio_path, output_path='output-moviepy.mp4', fps=24):
    import moviepy.editor as mpe
    
    print('--- moviepy ---')

    video = mpe.VideoFileClip(video_path)
    video = video.set_audio(mpe.AudioFileClip(audio_path))
    video.write_videofile(output_path, fps=fps)


def test_ffmpeg(video_path, audio_path, output_path='output-ffmpeg.mp4', fps=24):
    import ffmpeg

    print('--- ffmpeg ---')

    video  = ffmpeg.input(video_path).video # get only video channel
    audio  = ffmpeg.input(audio_path).audio # get only audio channel
    output = ffmpeg.output(video, audio, output_path, vcodec='copy', acodec='aac', strict='experimental')
    ffmpeg.run(output)

# --- main ---

video_path  = 'movie.mp4'
audio_path  = 'sound.wav'
output_path = 'output.mp4'

test_moviepy(video_path, audio_path)#, output_path)
test_ffmpeg(video_path, audio_path)#, output_path)

編輯:

安裝 python 模塊graphviz和程序graphviz后,我可以運行

ffmpeg.view(output, filename='output-ffmpeg.png')

獲取圖像

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM