Python 如何从帧和向量创建音频和视频视频
我正在尝试在python上创建与音频合并的视频剪辑。 我有一个视频的帧列表和所需的帧速率,音频有一个已知采样率的numpy向量。 我能够使用opencv创建视频文件,但我找不到将其与音频相结合的方法。 所以问题是,有没有办法从表示视频帧的numpy矩阵列表和表示音频的numpy数组创建视频文件 我正在研究使用ffmpeg来实现这一点,但是,使用这种方法,我需要先保存文件,然后合并两个文件,这需要时间来保存和加载 加载音频文件 加载viedo 对视频进行一些操作,并将帧保存到“新列表”(未显示) 新列表包含的框架与框架列表一样 创建一个新的视频Python 如何从帧和向量创建音频和视频视频,python,opencv,audio,video,Python,Opencv,Audio,Video,我正在尝试在python上创建与音频合并的视频剪辑。 我有一个视频的帧列表和所需的帧速率,音频有一个已知采样率的numpy向量。 我能够使用opencv创建视频文件,但我找不到将其与音频相结合的方法。 所以问题是,有没有办法从表示视频帧的numpy矩阵列表和表示音频的numpy数组创建视频文件 我正在研究使用ffmpeg来实现这一点,但是,使用这种方法,我需要先保存文件,然后合并两个文件,这需要时间来保存和加载 加载音频文件 加载viedo 对视频进行一些操作,并将帧保存到“新列表”(未显示)
opencv用于计算机视觉。看看ffmpeg等媒体库。谢谢@Mika,我知道这一点,我想问是否有一个库,我可以用它获取帧列表、音频向量并将它们组合起来。ffmpeg确实允许您合并音频和视频文件,但要使用它,我必须先保存我用opencv创建的视频,然后将视频与音频文件一起加载(我已经加载了,但需要再次加载),然后再将两者合并。libAV是ffmpeg使用的库,您可以从代码中使用它,简而言之,我将不得不制作视频,保存它,然后将其与音频文件一起加载,以合并它们,而不是使用ffmpeg可执行文件?没有办法吗?是否有一个选项,使视频帧和原始音频向量?是否可以从原始音频信号中获取音频的“蒸汽”和从原始视频帧中获取视频的“流”以馈送到ffmpeg?抱歉,您正在使用python。。。可能不可能,但我不是python领域的专家。祝你好运。opencv是用于计算机视觉的。看看ffmpeg等媒体库。谢谢@Mika,我知道这一点,我想问是否有一个库,我可以用它获取帧列表、音频向量并将它们组合起来。ffmpeg确实允许您合并音频和视频文件,但要使用它,我必须先保存我用opencv创建的视频,然后将视频与音频文件一起加载(我已经加载了,但需要再次加载),然后再将两者合并。libAV是ffmpeg使用的库,您可以从代码中使用它,简而言之,我将不得不制作视频,保存它,然后将其与音频文件一起加载,以合并它们,而不是使用ffmpeg可执行文件?没有办法吗?是否有一个选项,使视频帧和原始音频向量?是否可以从原始音频信号中获取音频的“蒸汽”和从原始视频帧中获取视频的“流”以馈送到ffmpeg?抱歉,您正在使用python。。。可能不可能,但我不是python领域的专家。祝你好运
audio_name='Metallica - Master Of Puppets S&M [HQ].mp3'
x, sr = librosa.load(audio_name)
ipd.Audio(x, rate=sr)
import cv2
video_name = 'vid_sample.avi'
new_video_name='new_'+video_name
vidcap = cv2.VideoCapture(video_name)
success,image = vidcap.read()
count = 0
success = True
frame_list=[]
while success:
#cv2.imshow('image',image) #Display the video
frame_list.append(image)
if cv2.waitKey(10) == 27: # exit if Escape is hit
vidcap.release()
cv2.destroyAllWindows()
break
success,image = vidcap.read()
count += 1
# Release all space and windows once done
vidcap.release()
cv2.destroyAllWindows()
height,width,layers=new_list[1].shape
video=cv2.VideoWriter(new_video_name,cv2.VideoWriter_fourcc(*'DIVX'),fps (width,height))
for i in range(len(new_list)):
video.write(new_list[i])
video.release()