视频关键帧提取

引子:最近在帮老师做项目,涉及到视频和图形图像处理这方面的内容。我觉得作为一个程序猿,不仅仅着眼于小的细节,对自己整体方向的把握也需要一个比较好的规划,我们的目标是:当一个好的程序猿。

项目整体的架构是:ubuntu+python+django+apache+html+mongodb。


当时卡在视频关键帧提取这一块好长时间,也没人指导我自己该怎么做,谁让我们程序猿自学能力要强呢?

网上找了很多资料,折腾了一个多星期,终于把这件事搞定了。

用的是ffmpeg,它是干啥的呢?大白话就是:能够处理音视频的转换,编码,当然最重要一点就是:能够读取视频,并生成图片,这其中当然有对关键帧的提取。


步骤1:在ubuntu下安装和编译ffmpeg

关于这一步,另外一位朋友已经写得很详细了,这里我就不再多说了。地址是这个:http://blog.csdn.net/liuyangriver/article/details/9566769

(http://blog.csdn.net/jk110333/article/details/8978280,这篇文章的方法安装ffmpeg失败)


编译方法1:

1、下载ffmpeg1.1.2

apt-get install subversion   //安装svn,  

svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg     //下载ffmpeg源代码,保存目录/home/parallels/Documents/ffmpeg/test/ffmpeg.  

   //output:Checked out revision 26402.


apt-get install git//安装git

git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg //http://ffmpeg.org/download.html官方下载ffmpeg方法,Receiving objects: 100% (314377/314377), 77.14 MiB | 145//KiB/s, done.. 

//保存目录://home/parallels/Documents/ffmpeg/test/test/ffmpeg


2、配置ffmpeg

 2.1、./configure --enable-shared --prefix=/usr/local/ffmpeg    //执行该命令,报如下的错误:yasm not found, use --disable-yasm for a crippled build

//解决方法:安装yasm

3、安装yasm

3.1、下载yasm 

http://download.csdn.net/detail/reboot2009/4424607   //yasm是汇编编译器,因为ffmpeg中为了提高效率用到了汇编指令,比如MMX和SSE

3.2、配置yasm

./configure

注意:不要使用prefix指定安装路径什么的,否则后患无穷啊!

3.3、编译yasm

make

3.4、安装yasm

make install

4、重新配置ffmpeg

./configure    //OK

5、编译ffmpeg

make

6、安装ffmpeg

make install




【废弃

1、下载源文件,最新的版本1.2.1

http://ffmpeg.org/releases/ffmpeg-1.2.1.tar.bz2

网上有人用svn下载的,可见ffmpeg是用svn维护的,下载个trunk版本,稳定版!

svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

我用的是第一种方法下载的


2、解压

tar xvjf ffmpeg-1.2.1.tar.bz2 


3、运行自动配置

./configure --enable-shared --prefix=/usr/local/ffmpeg

  其中:--enable-shared 是允许其编译产生动态库,在以后的编程中要用到这个几个动态库。--prefix设置的安装目录。

期间可能会出错,说少了yasm,请用--disabled-yasm重新运行,在命令中加入这个参数也能成功,不过最好加上,这个和格式转换有关系的!

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 可以使用 OpenCV 库来完成视频关键帧提取。 下面是一个简单的例子: ``` import cv2 # 打开视频文件 video = cv2.VideoCapture("video.mp4") # 设置帧率 fps = video.get(cv2.CAP_PROP_FPS) # 设置帧数 frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) # 每隔几帧提取一帧关键帧 interval = int(fps * 2) # 储存关键帧 frames = [] # 循环读取每一帧 for i in range(frame_count): ret, frame = video.read() if not ret: break if i % interval == 0: frames.append(frame) # 保存关键帧 for i, frame in enumerate(frames): cv2.imwrite("frame_{}.jpg".format(i), frame) # 释放视频文件 video.release() ``` 在这个例子中,我们使用 OpenCV 读取视频文件,然后从每隔 `interval` 帧提取一帧关键帧。最后,我们把关键帧保存为图像文件。 ### 回答2: 视频关键帧提取是一种常见的视频处理任务,Python可以使用OpenCV库来实现。下面是一个使用Python完成视频关键帧提取的简单步骤: 1. 首先,我们需要导入OpenCV库:`import cv2` 2. 然后,读取视频文件:`video = cv2.VideoCapture('video.mp4')`,其中'video.mp4'是视频文件的路径和文件名。 3. 接下来,我们需要确定关键帧的间隔。关键帧越少,提取速度越快,但可能会错过一些重要的变化。在这里,我们将设置关键帧间隔为10:`interval = 10` 4. 然后,我们需要计算视频的总帧数:`total_frames = video.get(cv2.CAP_PROP_FRAME_COUNT)` 5. 之后,我们可以开始提取关键帧。我们可以遍历视频的每一帧,然后将关键帧保存到一个列表中。下面是一个示例代码: ``` keyframes = [] for frame_num in range(0, int(total_frames), interval): video.set(cv2.CAP_PROP_POS_FRAMES, frame_num) ret, frame = video.read() if ret: keyframes.append(frame) ``` 在上面的代码中,我们首先使用`video.set(cv2.CAP_PROP_POS_FRAMES, frame_num)`将视频的当前帧设置为我们要读取的关键帧。然后,使用`video.read()`读取当前帧,并检查返回值`ret`来确保读取成功。如果读取成功,将当前帧存储到关键帧列表中。 6. 最后,我们可以将关键帧保存到磁盘上,以备后续使用。例如,将关键帧保存到一个名为'keyframes'的文件夹中,文件名格式为'frame_{frame_num}.jpg': ``` for i, frame in enumerate(keyframes): cv2.imwrite(f'keyframes/frame_{i}.jpg', frame) ``` 上述代码中,`cv2.imwrite()`函数用于保存关键帧到磁盘,文件名使用了格式化字符串以嵌入帧号。 这样,我们就完成了使用Python提取视频关键帧的过程。通过调整关键帧的间隔,您可以在提取速度和精度之间进行权衡。请注意,上述过程仅提供了基本的关键帧提取示例,实际应用中可能需要进行参数调整和算法优化以获得更好的结果。 ### 回答3: 视频关键帧提取是指从视频序列中提取出具有重要内容的帧。Python是一种功能强大的编程语言,可以使用其提供的各种库和工具来完成视频关键帧提取任务。 首先,我们需要导入所需的Python库。其中,OpenCV是一个常用的计算机视觉库,提供了处理图像和视频的函数和工具。 接下来,我们需要使用OpenCV读取视频文件,并逐帧处理。通过调用视频的帧率(FPS)信息,可以设置提取关键帧的间隔,例如每秒提取一帧。 然后,我们可以使用OpenCV的函数来进行关键帧提取。一种常用的方法是使用帧间差分法(Frame Difference)来判断帧与帧之间的差异。具体而言,我们可以比较连续两帧之间的像素差异,将差异超过某个阈值的帧标记为关键帧。 在计算每个帧的差异时,可以使用灰度转换等方法将彩色图像转换为灰度图像,以降低计算复杂度和提高效率。 最后,我们可以将提取出的关键帧保存为图像文件,或者在需要的时候进行处理和使用。 综上所述,使用Python可以很方便地完成视频关键帧提取。通过利用OpenCV等库和工具,我们可以从视频流中提取出具有重要内容的关键帧,并进一步进行处理和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值