Python之OpenCV把一个视频切分成多个等长视频
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之OpenCV把一个视频切分成多个等长视频相关的知识,希望对你有一定的参考价值。
使用pychar软件编写求大神操刀
import cv2cap = cv2.VideoCapture('E:/极乐净土.mp4')#导入路径
j=1
i=1
fourcc = cv2.VideoWriter_fourcc(*'XVID')
fps =cap.get(cv2.CAP_PROP_FPS)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
out = cv2.VideoWriter('E:/新建文件夹 (3)/' + str(j) + '.avi', fourcc,fps, size)#输出路径都是可以自己改的
while (True):
ret, frame = cap.read() # 捕获一帧图像
i = i + 1
out.write(frame) # 保存帧
if (i % 200== 0): # 每n帧切割为一个新的视频
j = j + 1
out = cv2.VideoWriter('E:/新建文件夹 (3)/' + str(j) + '.avi', fourcc, fps, size)#路径都是可以自己改的
cv2.imshow('frame', frame) # 显示帧
# 判断按键,如果按键为q,退出循环
if cv2.waitKey(25) & 0xFF == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows() 参考技术A import cv2
import time
# .time()方法用来记录当前时间
start_time = time.time()
# 导入一个本地视频赋给cap
cap = cv2.VideoCapture("D:/UserData/Desktop/ad.mp4")
# 获取视频的帧速率fps
fps = int(cap.get(cv2.CAP_PROP_FPS))
# 获取视频的宽高
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
# 设置视频的解码器
fourcc = cv2.VideoWriter_fourcc('D','I','V','X')
# 获取视频的总帧数
frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
# 10秒的总帧率
framss = 10*fps
print('视频详细信息:\n\tfps:',fps,'\n\t宽、高:',size,'\n\t总帧数:',frames,'\n\t解码器:',fourcc)
# i用来计数每一帧视频,n用来计数视频个数
i = 0
n = 1
print('写入第%d个视频中...'%n)
# 创建一个视频对象,并依次设置输出路径下的名称、解码器、每秒帧率、视频宽高
out = cv2.VideoWriter('D:/UserData/Desktop/sp_'+str(n)+'.avi',fourcc,fps,size)
while True:
# .read()方法将会返回一个布尔值和一组矩阵
ret,frame = cap.read()
if ret:
i = i + 1
if(i%framss == 0):
n = n + 1
print('写入第%d个视频中...'%n)
out.release()
out = cv2.VideoWriter('D:/UserData/Desktop/sp_' + str(n) + '.avi', fourcc, fps, size)
out.write(frame)
else:
time = time.time() - start_time
print('...结束,本次处理输出共',n,'个视频,耗时约%0.2fs'%time)
break
# 释放内存资源
cap.release()
out.release()
cv2.destroyAllWindows() 参考技术B import cv2
import os
# 先导入openCV
# 将一个长的视频缩短,按照比例缩短,只保存其中的一部分
# 如下面代码就是将一个长视频每20秒取5秒,合并成一个短视频
cap = cv2.VideoCapture('myvideo.avi')
if not cap.isOpened():
print('video is not opened')
else:
# 每秒25帧
num = 0
# 取5秒
needTime = 125
# 每20秒
timeSpace = 500
# 获取视频帧率
fps = cap.get(cv2.CAP_PROP_FPS)
# AVI格式编码输出XVID
videoWriter = cv2.VideoWriter('result//resultVideo_2.avi',cv2.VideoWriter_fourcc('X','V','I','D'),fps,frameSize=(320,288))
while(1):
success,frame = cap.read()
if (num%timeSpace <= needTime):
videoWriter.write(frame)
print('write'+ str(num))
num = num + 1
if not success:
print('finished')
break
if cv2.waitKey(100) & 0xFF == ord('q'):
break
cap.release()追问
是不是借鉴的这里啊,大兄弟,你语文是体育老师教的吗,理解能力这么差,没看懂我发的是什么问题,你要借鉴的话找个像样的啊标题你都看不清???你咋不找这个啊:
请把舌头屡直了在说话,谢谢
OpenCV之图像的遮挡与切分合并(笔记06)
图像遮挡:
例子1:
import numpy as np
import matplotlib.pyplot as plt
import cv2
#图像遮挡
def show(image):
plt.imshow(image)
plt.axis('off')
plt.show()
def imread(image):
image=cv2.imread(image)
#把图像的BGR转换成RGB
image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
return image
image=imread('1.png')
#创建遮挡
mask=np.zeros(image.shape,dtype='uint8')
white=(255,255,255)
cv2.rectangle(mask,(50,50),(250,250),white,-1)
show(mask)
#对图像进行遮挡
masked=cv2.bitwise_and(image,mask)
show(masked)
例子2:
import numpy as np
import matplotlib.pyplot as plt
import cv2
#图像遮挡
def show(image):
plt.imshow(image)
plt.axis('off')
plt.show()
def imread(image):
image=cv2.imread(image)
#把图像的BGR转换成RGB
image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
return image
image=imread('1.png')
#创建遮挡
mask=np.zeros(image.shape,dtype='uint8')
white=(255,255,255)
cv2.circle(mask,(150,100),80,white,-1)
show(mask)
#对图像进行遮挡
masked=cv2.bitwise_and(image,mask)
show(masked)
图像通道的切分与合并:
import numpy as np
import matplotlib.pyplot as plt
import cv2
#图像通道切分
def show(image):
plt.imshow(image)
plt.axis('off')
plt.show()
def imread(image):
image=cv2.imread(image)
#把图像的BGR转换成RGB
image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
return image
image=imread('1.png')
#图像的切分
(R,G,B)=cv2.split(image)
#图像的合并
merged=cv2.merge([R,G,B])
show(merged)
opencv的显示图像窗口:
import numpy as np
import matplotlib.pyplot as plt
import cv2
#图像通道切分
def show(image):
plt.imshow(image)
plt.axis('off')
plt.show()
def imread(image):
image=cv2.imread(image)
#把图像的BGR转换成RGB
image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
return image
image=imread('1.png')
#图像的切分
(R,G,B)=cv2.split(image)
#图像的合并
merged=cv2.merge([R,G,B])
show(merged)
#opencv自带的图像显示器
cv2.imshow('R',R)
cv2.imshow('G',G)
cv2.imshow('B',B)
cv2.waitKey(0)
cv2.destroyAllWindows()
因为都是单通道,显示器默认都是黑白照片哦!
以上是关于Python之OpenCV把一个视频切分成多个等长视频的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV | 图片与视频的相互转换(C++&Python)
JavaCV开发详解之27补充篇1:使用javacv把音视频切割成多个音频分片文件,以mp3为例,把视频切割成MP3分片文件
JavaCV开发详解之27补充篇1:使用javacv把音视频切割成多个音频分片文件,以mp3为例,把视频切割成MP3分片文件