python提取视频帧并保存_python tools实现视频的每一帧提取并保存
preface
最近在做 video caption 相關,要處理大量視頻。
method 1
方法 1 是最簡單的,用 ffmpeg工具來完成。
具體的網上有很多這方面的資料,本人只是簡單了解了一下如何使用。如下圖,有一個名為 ffmpeg_test.avi的視頻:
在當前目錄打開終端,輸入如下命令:
$ffmpeg -i ffmpeg_test.avi frames_%03d.jpg -hide_banner
以上我沒有指定太多的參數,實際上有很多參數可以指定,如起止的時間,幾秒鐘取一幀等等。
輸入即可獲得每一幀。
method 2
下面就是可以用 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 格式。因為我需要調用之前的 optical flow 論文中的 of 程序,來提取 optical flow image(光流圖)。
保存時,根據 opencv 的 doc:opencv 2.4.9 cv2.imwrite,其參數的指定方式如上。一開始在這里跌了好幾個跟頭,因為不知道如何將參數正確的指定。
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
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持萬仟網。
如您對本文有疑問或者有任何想說的,請點擊進行留言回復,萬千網友為您解惑!
總結
以上是生活随笔為你收集整理的python提取视频帧并保存_python tools实现视频的每一帧提取并保存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 终于过审了!腾讯给了我20万红包封面,我
- 下一篇: 用于创建此对象的程序是package_【