·
编程学习 ·
164954
1.拆分视频为帧图片
import cv2
def video2frame(videos_path,frames_save_path,time_interval):
vidcap = cv2.VideoCapture(videos_path)
success, image = vidcap.read()
count = 0
while success:
success, image = vidcap.read()
count = count + 1
if count % time_interval == 0:
cv2.imencode('.jpg', image)[1].tofile(frames_save_path + "frame%d.jpg" % count)
print('一共{}张,选取其中{}张'.format(count,int(count/time_interval)))
if __name__ == '__main__':
videos_path = 'C:\\Users\\cjk\\Desktop\\test.mp4' #视频的存放路径
frames_save_path = 'C:\\Users\\cjk\\Desktop\\images\\' #视频切分成帧之后图片的保存路径
time_interval = 5 #每5帧保存一次
video2frame(videos_path, frames_save_path, time_interval)
2.用帧图片合成视频
import cv2
import os
import numpy as np
from PIL import Image
def frame2video(im_dir,video_dir,fps):
im_list = os.listdir(im_dir)
im_list.sort(key=lambda x: int(x.replace("frame","").split('.')[0]))
img = Image.open(os.path.join(im_dir,im_list[0]))
img_size = img.size #获得图片分辨率,im_dir文件夹下的图片分辨率需要一致
fourcc = cv2.VideoWriter_fourcc(*'XVID')
videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)
for i in im_list:
im_name = os.path.join(im_dir+i)
frame = cv2.imdecode(np.fromfile(im_name, dtype=np.uint8), -1)
videoWriter.write(frame)
videoWriter.release()
if __name__ == '__main__':
im_dir = 'C:\\Users\\cjk\\Desktop\\images\\'#帧存放路径
video_dir = 'C:\\Users\\cjk\\Desktop\\ok.avi' #合成视频存放的路径
fps = 30 #帧率
frame2video(im_dir, video_dir, fps)
3.查看视频分辨率
import os,time
import cv2
#获取文件夹中的文件名列表
def get_file_list(file_path):
dir_list = os.listdir(file_path)
if not dir_list:
return
else:
dir_list = sorted(dir_list,key=lambda x: os.path.getmtime(os.path.join(file_path, x)))
return dir_list
file_path = 'H:\视频\\'
dir_list = get_file_list(file_path)
#获取使用cv2获得视频的分辨率width和height。
def get_vedio_height_width(filename):
cap = cv2.VideoCapture(filename)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH )
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
#print(width,height)
return width,height
if __name__ == '__main__':
for dir in dir_list:
width,height = get_vedio_height_width(file_path+dir)
print('文件名:',dir)
print('分辨率:',width,height)
python视频与帧图片的相互转化,以及查看视频分辨率的相关教程结束。
fvcore.compute_flops算不准自定义模型,主因是动态控制流、未注册算子或输入缺shape;需避免Python控制流、确保输入为具体张量且device一致、用model.eval()和torch.no_grad();jit.script模块需临时移除装饰器或内联展开;推荐用comput...
抖音/TikTok的_signature参数由前端JS基于URL、设备指纹、页面加载时间等动态生成,常依赖WebAssembly或混淆代码,逆向成本高;实操应使用Playwright等真实浏览器自动执行JS获取,需严格模拟UA、viewport、语言等环境,且签名5–10分钟失效。 抖音/TikTo...
常见原因是传入了未实例化的模型类或state_dict(),而非已实例化并调用.to(device)的nn.Module对象;input_size需为不含batch维度的tuple,如图像填(3,224,224),多输入或动态结构模型建议改用torchinfo。 torchsummary.summa...
在Python类型注解中,当两个类相互引用(如CartesianCoordinates与PolarCoordinates)时,直接使用未定义类名会导致MyPy报错“Namealreadydefined”。本文介绍两种符合PEP563和类型检查规范的解决方案:字符串字面量前向引用和from__futu...
在Python类相互引用场景中,直接使用未定义的类名作为类型注解会导致MyPy报错(如“Namealreadydefined”)。本文介绍两种标准、兼容且类型安全的解决方案:字符串字面量前向引用和from__future__importannotations。 在python类相互引用场景中,直接使...
直接访问__mro__可查看Python类的方法解析顺序,它是一个只读元组,按C3算法线性化继承链,类创建时即确定;推荐用inspect.getmro()安全获取,支持类或实例输入。 直接访问__mro__查看继承路径 Python类的__mro__(MethodResolutionOrder)是一...
必须先创建并初始化Tk实例(如root=tk.Tk())才能调用winfo_screenwidth()和winfo_screenheight()获取主屏幕分辨率,因这些是Tk实例方法,依赖底层Tcl/Tk解释器上下文;未创建实例或实例已销毁时调用会报TclError。 直接调用winfo_scree...
torchvision.io.read_video最轻量、最PyTorch原生,但仅默认支持MP4(H.264)和AVI(未压缩/MJPEG),需显式设audio_frames="all"才读音频,否则静默返回空音频张量;不支持URL,路径须绝对,依赖系统FFmpeg,且整段解码易爆内存——训练推荐...