在 python 中结合 mp4 和 wav
Combining mp4 with wav in python
我正在尝试将 .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.video
和 object.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')
获取图片
我正在尝试将 .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.video
和 object.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')
获取图片