# Multi-Video-Process_1 **Repository Path**: zhuofalin/Multi-Video-Process_1 ## Basic Information - **Project Name**: Multi-Video-Process_1 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-08-02 - **Last Updated**: 2024-08-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ##### CPU: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz (12 CPUs), ~2.6GHz ##### GPU: NVIDIA GeForce GTX 1660 Ti with Max-Q Design ##### Memory: 16384MB RAM ##### 不跳帧 ##### 1K视频 1080p播放 稳定 30fps ##### 1K视频 540p播放 稳定 60fps ##### 降低输入输出视频分辨率 不超过72fps *** ##### GIL:又叫全局解释器锁,每个线程在执行的过程中都需要先获取GIL,保证同一时刻只有一个线程在运行,目的是解决多线程同时竞争程序中的全局变量而出现的线程安全问题。 *** ##### 即使在多核CPU中,多线程同一时刻也只有一个线程在运行,这样不仅不能利用多核CPU的优势,反而由于每个线程在多个CPU上是交替执行的,导致在不同CPU上切换时造成资源的浪费,反而会更慢。即原因是一个进程只存在一把gil锁,当在执行多个线程时,内部会争抢gil锁,这会造成当某一个线程没有抢到锁的时候会让cpu等待,进而不能合理利用多核cpu资源。 *** ##### 解决GIL问题的方案: ##### 1.使用其它语言,例如C,Java ##### 2.使用其它解释器,如java的解释器jython ##### 3.使用多进程(×) *** ##### 计算密集型和IO密集型 ##### 计算密集型:要进行大量的数值计算,例如进行上亿的数字计算、计算圆周率、对视频进行高清解码等等。这种计算密集型任务虽然也可以用多任务完成,但是花费的主要时间在任务切换的时间,此时CPU执行任务的效率比较低。 ##### IO密集型:涉及到网络请求(time.sleep())、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU和内存的速度)。对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。 *** ##### time.sleep(0.0015) ##### 本电脑最小睡眠精度 *** ##### yolov5-6.0 处理1K大小图片用时50ms ##### 影响不大 ##### 本电脑 10进程并行处理1K视频 540p播放 yolov5单张处理时间不超过300ms的情况下 稳定30fps *** ##### capture=cv2.VideoCapture("./video.mp4") ##### TypeError: can't pickle cv2.VideoCapture objects ##### 只能放在一个新的线程里,不能用新的进程 *** ##### 多进程 Qpixmap ##### Python multiprocess can't pickle opencv videocapture object ##### Qpixmap 不能通过进程队列传递 ##### Qpixmap 不能在新的进程中实例化 ##### 帧数的限制在 opencv 的图片转 Qpixmap 10ms-20ms ##### 计算密集型,多线程无法提升速度 *** ##### 跳帧大法 ##### 30fps的输入视频,frame%2==0的跳帧,15fps播放,看起来的差距不是很明显 ##### 用跳帧大法甚至可以把视频播放到144fps *** ##### python 多线程无法提升速度,只能支持处理并发任务 ##### python 多进程可以提升速度,但是限制很多 ##### 输入视频对帧数影响不大 ##### 输出视频分辨率影响 opencv 的图片转 Qpixmap的时间,对帧数影响很大 ##### yolov5处理单张图片的时间影响不大(10ms-300ms),因为可以放到多进程中并行处理 ##### 队列等待和信号发送,平均占用略小于10ms ##### 输出视频分辨率低(360p及以下),转换时间略小于10ms,理论帧率1000ms/(10ms+10ms)=50fps,实际可以到达72fps ##### 输出视频分辨率高(1080p),转换时间略大于20ms,理论帧率1000ms/(10ms+20ms)=33fps,实际可以到达30fps ***