我正在寻找一种方法如何从视频文件中使用python提取视频帧和相应的音频片段。 我对opencv非常了解。但它只允许提取视频帧。没有提供音频。 我需要两个 - 视频帧和音频片段完全相互对应。如何在Linux上使用音频流读取python中的视频文件?
将是任何提示:)
我正在寻找一种方法如何从视频文件中使用python提取视频帧和相应的音频片段。 我对opencv非常了解。但它只允许提取视频帧。没有提供音频。 我需要两个 - 视频帧和音频片段完全相互对应。如何在Linux上使用音频流读取python中的视频文件?
将是任何提示:)
你是正确的,你无法通过的OpenCV来获取音频非常感谢。最好的办法可能是单独提取视频帧和音频,然后从那里操作。一些工具,可以帮助包括:
您可以了解更多关于子处理的ffmpeg对本次关联堆栈溢出答案在这里:https://stackoverflow.com/a/26741357/7604321
从此就可以在加载音频文件和处理以及您的视频帧。
没有更多的信息从你的问题我不能建议更多。
我可以但真的不想直接使用ffmpeg或其命令行包装器(ffmpy)。这个解决方案看起来很复杂,而python通常提供解决任何任务的简单方法。这就是我寻找的原因。 –
作为一个变种,我可以使用opencv来提取帧和额外的模块来分别提取音频。然后使用时间戳处理它们。 但是,一开始,我正在寻找一种即时可用的解决方案(如果存在)。 –
也许PyMedia?我从来没有用过它。 – JCooke
最后,我找到了影片https://pypi.python.org/pypi/moviepy,它实现了ffmpeg的轻包装,并提供了在同一时间位置快速获取视频和音频帧的界面。你会发现下面的例子:除了提取A/V帧moviepy提供了音频/视频剪辑修改范围的功能谱
from moviepy.editor import *
video = VideoFileClip('your video filename')
audio = video.audio
duration = video.duration # == audio.duration, presented in seconds, float
#note video.fps != audio.fps
step = 0.1
for t in range(int(duration/step)): # runs through audio/video frames obtaining them by timestamp with step 100 msec
t = t * step
if t > audio.duration or t > video.duration: break
audio_frame = audio.get_frame(t) #numpy array representing mono/stereo values
video_frame = video.get_frame(t) #numpy array representing RGB/gray frame
。
任务的主要目标是: 1)找到分析视频的时间片段(一个人出现/消失在一帧中); 2)分析找到的感兴趣的片段内的音频(该人说什么)。 我已经实现了人物检测和语音识别。所以,问题只是关于如何从视频文件中提取视频+音频。 –