python - 在python中结合mp4和wav

标签 python video ffmpeg mp4 wav

我正在尝试将 .mp4 文件与 .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,我得到了正确的输出视频和音频,即使我使用与输出相同的名称。所以我不知道什么会扰乱输出。

对于 ffmpeg,我不得不为输出文件使用不同的名称来解决 couldn't edit existing files in-place

的问题

我还必须使用 object.videoobject.audio 来替换输出文件中的音频。

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')

获取图片

enter image description here

关于python - 在python中结合mp4和wav,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65545860/

相关文章:

python - 从文本文件 python 中读取字符串

video - ffmpeg 从视频中删除多个片段 旋转和裁剪视频

java - android-无法加载多个YouTube视频

ffmpeg - 使用ffmpeg创建MP4文件时如何编写exif标签

ffmpeg - 使用 avs2yuv 将 avs 管道传输到 ffmpeg

python - Pandas Get_dummies 用于嵌套表

python - 与未排序数据相交的 matplotlib 图

python - 从 docx 文件中提取 python 代码块并在沙箱中运行它们的安全方法是什么?

html - 使用更少的 css 根据屏幕大小调整视频大小

video - 如何准确延长小视频的时长?