python tools實(shí)現(xiàn)視頻的每一幀提取并保存
Preface
最近在做 video caption 相關(guān),要處理大量視頻。
今天碰到一個(gè)問(wèn)題,就是要將 YoutubeClips 數(shù)據(jù)集 中的 avi 格式的視頻,將其視頻中的每一幀提取出來(lái)。之后用 High accuracy optical flow estimation based on a theory for warping 提出的 Optical Flow(光流),提取運(yùn)動(dòng)的光流特征。
Method 1
方法 1 是最簡(jiǎn)單的,用 FFmpeg 工具來(lái)完成。
具體的網(wǎng)上有很多這方面的資料,本人只是簡(jiǎn)單了解了一下如何使用。如下圖,有一個(gè)名為 ffmpeg_test.avi 的視頻:
在當(dāng)前目錄打開終端,輸入如下命令:
$ffmpeg -i ffmpeg_test.avi frames_%03d.jpg -hide_banner
以上我沒(méi)有指定太多的參數(shù),實(shí)際上有很多參數(shù)可以指定,如起止的時(shí)間,幾秒鐘取一幀等等。
輸入即可獲得每一幀。
Method 2
下面就是可以用 cv2 模塊中的 VideoCapture、VideoWriter 來(lái)提取了,具體代碼如下:
#! 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 格式。因?yàn)槲倚枰{(diào)用之前的 optical flow 論文中的 of 程序,來(lái)提取 optical flow image(光流圖)。
保存時(shí),根據(jù) opencv 的 Doc:OpenCV 2.4.9 cv2.imwrite,其參數(shù)的指定方式如上。一開始在這里跌了好幾個(gè)跟頭,因?yàn)椴恢廊绾螌?shù)正確的指定。
Reference
http://stackoverflow.com/questions/33311153/python-extracting-and-saving-video-frames
http://stackoverflow.com/questions/12216333/opencv-imread-imwrite-increases-the-size-of-png
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Python中命令行參數(shù)argparse的常用命令
這篇文章主要為大家詳細(xì)介紹了Python中命令行參數(shù)argparse的一些常用命令,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以了解一下2023-01-01Python使用Selenium進(jìn)行Web自動(dòng)化測(cè)試
Selenium 是一個(gè)用于 Web 應(yīng)用自動(dòng)化測(cè)試的強(qiáng)大工具,可以用來(lái)模擬用戶操作瀏覽器,從而測(cè)試 Web 應(yīng)用的功能,它支持多種瀏覽器和編程語(yǔ)言,包括 Python,下面我們將介紹如何使用 Selenium 進(jìn)行 Web 自動(dòng)化測(cè)試,需要的朋友可以參考下2024-08-08Python word文本自動(dòng)化操作實(shí)現(xiàn)方法解析
這篇文章主要介紹了Python word文本自動(dòng)化操作實(shí)現(xiàn)方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Pytorch用Tensorboard來(lái)觀察數(shù)據(jù)
這篇文章主要介紹了Pytorch用Tensorboard來(lái)觀察數(shù)據(jù),上一篇文章我們講解了關(guān)于Pytorch?Dataset的數(shù)據(jù)處理,這篇我們就來(lái)講解觀察數(shù)據(jù),下面具體相關(guān)資料,需要的朋友可以參考一下,希望對(duì)你有所幫助2021-12-12【python】matplotlib動(dòng)態(tài)顯示詳解
這篇文章主要介紹了matplotlib動(dòng)態(tài)顯示,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Python畫圖實(shí)現(xiàn)同一結(jié)點(diǎn)多個(gè)柱狀圖的示例
今天小編就為大家分享一篇Python畫圖實(shí)現(xiàn)同一結(jié)點(diǎn)多個(gè)柱狀圖的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07