目录
[截取视频 按帧截取mp4](#截取视频 按帧截取mp4)
视频缩放保存
python
import glob
import os
import random
import cv2
import imageio
import numpy as np
def video_small(video_path, output_dir):
video_name = os.path.basename(video_path)
out_path =output_dir+'/'+video_name
cap = cv2.VideoCapture(video_path)
# 获取帧率和分辨率
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 创建 imageio 的写入器
writer = imageio.get_writer(out_path, fps=fps)
frame_id = 0
while True:
ret, image = cap.read()
if not ret:
break
if np.prod(image.shape[:2]) > 1000 * 1500:
x_scale = np.sqrt(1000 * 1500 / np.prod(image.shape[:2]))
image = cv2.resize(image, None, fx=x_scale, fy=x_scale, interpolation=cv2.INTER_AREA)
# OpenCV 是 BGR,imageio 需要 RGB
frame_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
writer.append_data(frame_rgb)
frame_id += 1
cap.release()
writer.close()
if __name__ == '__main__':
base_dir=r"C:\Users\Administrator\Videos\yundong"
to_dir = r"C:\Users\Administrator\Videos\yundong_s"
os.makedirs(to_dir, exist_ok=True)
file_list=glob.glob(os.path.join(base_dir,"*.mp4"))
for video_path in file_list:
print('start',video_path)
video_small(video_path, to_dir)
ffmpeg按帧截取视频,画质会降低:
ffmpeg -i 5s.mp4 -vf "select='gte(n,18)',setpts=N/FRAME_RATE/TB" -c:v libx264 -crf 18 -preset veryslow -c:a copy output.mp4
截取视频 按帧截取mp4
python
import random
import cv2
import imageio
# 打开原始视频
video_path = r"E:\data\tiaosheng\0706\5s.mp4"
out_path=r"E:\data\tiaosheng\0706\output.mp4"
cap = cv2.VideoCapture(video_path)
# 获取帧率和分辨率
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
# 创建 imageio 的写入器
writer = imageio.get_writer(out_path, fps=fps)
frame_id = 0
while True:
ret, frame = cap.read()
if not ret:
break
if frame_id >= 18:
# OpenCV 是 BGR,imageio 需要 RGB
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
writer.append_data(frame_rgb)
frame_id += 1
cap.release()
writer.close()