网页视频抓取脚本( 就是flow示例代码介绍:Highaccuracyopticalflowbasedonaforwarping)
优采云 发布时间: 2021-11-13 12:13网页视频抓取脚本(
就是flow示例代码介绍:Highaccuracyopticalflowbasedonaforwarping)
Python 工具提取并保存视频的每一帧
更新时间:2020年3月20日17:23:22 作者:chenxp2311
本文文章主要详细介绍了提取和保存视频每一帧的python工具。文章中的示例代码很详细,有一定的参考价值。有兴趣的朋友可以参考一下。
前言
最近在做视频字幕相关的工作,要处理大量的视频。
今天遇到一个问题,就是在YoutubeClips数据集中提取avi格式视频的每一帧。然后使用基于翘曲理论的高精度光流估计提出的光流来提取运动的光流特征。
方法一
方法一最简单,使用FFmpeg工具完成。
具体网上有很多这方面的资料,我只是简单的了解一下如何使用。如下图,有一个名为ffmpeg_test.avi的视频:
在当前目录打开终端,输入以下命令:
$ffmpeg -i ffmpeg_test.avi frames_d.jpg -hide_banner
我上面没有指定太多参数。其实可以指定的参数有很多,比如开始和结束时间,几秒拍一帧等等。
输入以获取每一帧。
方法二
下面可以用 cv2 模块中的 VideoCapture 和 VideoWriter 提取。具体代码如下:
#! encoding: UTF-8
import os
import cv2
import cv
videos_src_path = '/home/ou-lc/chenxp/Downloads/Youtube/youtube_select'
videos_save_path = '/home/ou-lc/chenxp/Downloads/Youtube/youtube_frames'
videos = os.listdir(videos_src_path)
videos = filter(lambda x: x.endswith('avi'), videos)
for each_video in videos:
print each_video
# get the name of each video, and make the directory to save frames
each_video_name, _ = each_video.split('.')
os.mkdir(videos_save_path + '/' + each_video_name)
each_video_save_full_path = os.path.join(videos_save_path, each_video_name) + '/'
# get the full path of each video, which will open the video tp extract frames
each_video_full_path = os.path.join(videos_src_path, each_video)
cap = cv2.VideoCapture(each_video_full_path)
frame_count = 1
success = True
while(success):
success, frame = cap.read()
print 'Read a new frame: ', success
params = []
params.append(cv.CV_IMWRITE_PXM_BINARY)
params.append(1)
cv2.imwrite(each_video_save_full_path + each_video_name + "_%d.ppm" % frame_count, frame, params)
frame_count = frame_count + 1
cap.release()
最后,我以 PPM 格式保存每一帧。因为我需要调用之前光流论文中的of程序来提取光流图像。
保存时,根据opencv的Doc:,参数如上指定。一开始,我在这里丢了几个跟头,因为我不知道如何正确指定参数。
参考
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。