Matlab保存视频指定时间段的截图

在测试和开发中,我经常遇到客户要求截取视频指定时间段的截图的需求,如果数据量大,就有点费手了,所有想到了使用自动化脚本来实现比较合适。下面我们以截取视频中第1秒到第8秒的视频截图来举例,看看如何来实现。

Python 中的实现

import cv2

# 打开视频文件,并获取帧率
cap = cv2.VideoCapture('./video/video.mp4')
# fps = cap.get(cv2.CAP_PROP_FPS) # 30

for count in range(1, 9):
    cap.set(cv2.CAP_PROP_POS_MSEC, 1.0 * 1000 * count)
    ret, frame = cap.read()
    if ret:
        cv2.imwrite(f'./video/{count}s.jpg', frame)  # 根据实际帧率可以调整

Python批量改变截图尺寸

from PIL import Image  
import os  
  
# 设定源文件夹路径  
src_dir = '/path/to/your/source/folder'  
  
# 设定目标文件夹路径  
dst_dir = '/path/to/your/destination/folder'  
  
# 设定新的图片尺寸,例如:宽度为800,高度为600  
new_size = (800, 600)  
  
# 遍历源文件夹中的所有文件  
for filename in os.listdir(src_dir):  
    # 判断文件是否为图片文件(以.jpg或.png结尾)  
    if filename.endswith('.jpg') or filename.endswith('.png'):  
        # 获取图片的文件名和路径  
        filepath = os.path.join(src_dir, filename)  
        # 读取图片  
        img = Image.open(filepath)  
        # 修改图片大小尺寸  
        resized_img = img.resize(new_size, Image.ANTIALIAS)  
        # 设定新的图片文件名和路径  
        new_filepath = os.path.join(dst_dir, filename)  
        # 将修改后的图片保存到目标文件夹中  
        resized_img.save(new_filepath)

Matlab 中的实现

function captureAvis(startTime, endTime, avifilename, avipath, aviDirName)
  avifullpath = fullfile(avipath, avifilename);
  [~, aviname, ~] = fileparts(avifilename);
  videoReader = VideoReader(avifullpath);
  videoFPS = videoReader.FrameRate;
  for t = startTime: endTime
    if hasFrame(videoReader)
      videoReader.CurrentTime = t;
      imgName = sprintf('%s_%.1f.jpg', aviname(1:15), t);
      imwrite(frame, fullfile(aviDirName, imgName));
      disp(videoReader.CurrentTime);
      pause(1/videoFPS);
    end

    % if hasFrame(videoReader)
    %   videoFrame = read(VideoReader, t * round(videoFPS));
    %   imwrite(videoFrame, fullfile('saveas', strcat(t, '.jpg')));
    %   disp(t * videoFPS);
    % end
  end
end

Matlab批量修改截图尺寸

function resizeImg(targetpath)
  if exist('targetpath')
    imgsDir = dir(targetpath);
  else
    imgsDir = dir(uigetdir(pwd, 'please select imgs dir'));
  end
  newSize = [1080, 1920];
  for i = 3: length(imgsDir)
    imgpath = fullfile(imgsDir(i).folder, imgsDir(i).name);
    originImg = imread(imgpath);
    resizedImg = imresize(originImg, newSize);
    imwrite(resizedImg, imgpath);
  end
end

不好意思,图片上传失败,吐槽一下,简书体验是真的垃圾~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 以前的项目中有一个类似微信短视频的功能,在视频播放前,会先显示视频对应的截图(一般为视频第一帧的画面),以下代码可...
    AnthonyChen阅读 8,814评论 5 3
  • 经过一段时间技术积累,今天将摄像头抓图存图全过程串通。大致流程是:用户通过请求触发指定摄像头从视频流中截图,将该截...
    questionuncle阅读 6,192评论 0 6
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,196评论 4 61
  • UIKit 1.UIView 和 CALayer 是什么关系? UIView 继承 UIResponder,而 U...
    Angel_梅丹佐阅读 9,637评论 0 2
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,469评论 2 59