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

2023-11-04  本文已影响0人  硅谷干货

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

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

上一篇下一篇

猜你喜欢

热点阅读