前言
正好有人问我怎么把视频某几帧去掉,正好有时间,正好写了,正好发出来。
大家想用的话可以拿去参考。
代码
下面是我使用opencv对视频中间几帧抽取的方法。
主要的思路是在读取frame的时候,顺便把帧写下来。
同时如果不是需要抽取剔除的帧,直接continue到下个循环。
样例代码如下,主要按照MP4格式进行处理。
#!/user/bin/env python
# coding=utf-8
"""
@project : csdn-pro
@author : 剑客阿良_ALiang
@file : test.py
@ide : PyCharm
@time : 2022-06-30 17:55:48
"""
import cv2
# 视频抽帧
def extract_frame(video_path: str, result_path: str, fps, weight, height, start, end):
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
videoWriter = cv2.VideoWriter(result_path, fourcc, fps, (weight, height))
vc = cv2.VideoCapture(video_path)
if vc.isOpened():
ret, frame = vc.read()
else:
ret = False
count = 0 # count the number of pictures
while ret:
ret, frame = vc.read()
if start <= count <= end:
count += 1
continue
else:
videoWriter.write(frame)
count += 1
print(count)
videoWriter.release()
vc.release()
if __name__ == '__main__':
extract_frame('C:\\Users\\xxx\\Desktop\\123.mp4', 'C:\\Users\\xxx\\Desktop\\114.mp4', 25, 640, 368, 119, 125)
注意
1、extract_frame方法的入参分别为:输入视频地址、输出视频地址、视频fps、视频分辨率宽、视频分辨率高、视频需要抽掉的起始帧、视频需要抽掉的结束帧。
小结
就不验证效果了,大家可以自己试试看。
注意地址要写错了,导致输出为空。
最近我的心态有些变化,以前我总是觉着所处在的地方,规则是如此混乱不堪,人的惰性和逃避在事情面前那样肉眼可见。我讨厌它,甚至有些排斥和想要破坏它。但突然我站在镜子面前,发现我也成为了它的一部分,一种恶心感柔然二生。学会和自己先和解,在试着改变能改变的,我想这是我要做的。