关于GeForce Experience录制的游戏视频出现屏闪的现象怎么解决
2023-08-08
操作流程已经在哔站上传视频,博客若看不懂,可以查阅视频喔
先说一下问题是怎么产生的
很多人或许会像我一样打游戏的时候会把N卡自带的显示帧率功能打开并且放在屏幕左上角,但是这个就是万恶之源,把所有能展示的都关闭了就不会再出现任何问题了
然后在D盘新建两个文件夹,第一个叫001 第二个叫yuervideo
用pr的方式把视频导出为一帧一帧的图片。具体方法为:先导入视频,选中,点文件,选中导出(导出到 D://001 ),选择格式为png即可
再全选D://001下的所有图片把文件名字重命名为任意名字即可
所有源码均为python文件哈,如果不会运行python的话可以在网上百度教程,当然视频里面介绍的也比较详细!
去除黑帧源码:
#去除黑帧 import cv2 import os #切记路径不能含中文 文件名字也不能含中文 path = "D://001" for file in os.listdir(path): filename = path + "/"+file img = cv2.imread(filename) colors = cv2.mean(img) point = (colors[0] + colors[1] + colors[2] ) / 3 if(point < 1): os.remove(filename) print(filename+"-已删除") print("黑帧清除完毕")
帧合并为视频(补帧):
#帧合并为视频(补帧) import cv2 import os def images_to_video(): path = "D://001" # 帧图片所在文件夹 fps = 60 # 帧率(1秒钟多少张图片) num = len(os.listdir(path)) newfile = "D://yuervideo/result.avi" # 生成的视频的路径(必须.avi) onename = "D://001/xyy (yuer).png" # 单张图片的路径 数字用yuer替换 img_array = [] img_width = 1920 # 每帧宽度 img_height = 1080 # 每帧高度 buff = 800 # 一次处理多少张图片(防止内存太多导致卡死) ret = 0 time = int(num / buff + 1) print("处理次数:",time) for i in range(time): #计算每一次开始图片序列号 ret = i * buff #清零图片数组 img_array = [] for a in range(buff): if((a + ret)>num): break else: #filename = "D://001/demo ("+str(a + ret)+").png" filename = onename.replace("yuer",str(a + ret)) img = cv2.imread(filename) if img is None: print(filename + "不存在") print("开始寻找前一真帧") for dx in range(buff): #filename = "D://001/demo ("+str(a + ret-dx)+").png" filename = onename.replace("yuer",str(a + ret-dx)) if(a + ret-dx < 0): break else: img = cv2.imread(filename) if img is None: print("前"+ str(dx)+ "帧仍为虚帧") continue else: img_array.append(img) print("前"+ str(dx)+ "为真帧且已载入") break else: print(filename + "已载入") img_array.append(img) out = cv2.VideoWriter(newfile[0:-4]+str(i)+".avi", cv2.VideoWriter_fourcc(*'DIVX'), fps,(img_width,img_height)) for i in range(len(img_array)): out.write(img_array[i]) print(onename.replace("yuer",str(ret+i)),"已写入") out.release() def main(): images_to_video() print("完成") if __name__ == "__main__": main()
帧合并为视频(不补帧):
#帧合并为视频(不补帧) import cv2 import os def images_to_video(): path = "D://001" # 帧图片所在文件夹 fps = 30 # 帧率(1秒钟多少张图片) num = len(os.listdir(path)) newfile = "D://yuervideo/result.avi" # 生成的视频的路径(必须.avi) onename = "D://001/ret (yuer).png" # 单张图片的路径 数字用yuer替换 img_array = [] img_width = 1920 # 每帧宽度 img_height = 1080 # 每帧高度 buff = 2000 # 一次处理多少张图片(防止内存太多导致卡死) ret = 0 time = int(num / buff + 1) print("处理次数:",time) for i in range(time): #计算每一次开始图片序列号 ret = i * buff #清零图片数组 img_array = [] for a in range(buff): if((a + ret)>num): break else: filename = onename.replace("yuer",str(a + ret)) img = cv2.imread(filename) if img is None: print(filename + "不存在") continue else: print(filename + "已载入") img_array.append(img) out = cv2.VideoWriter(newfile[0:-4]+str(i)+".avi", cv2.VideoWriter_fourcc(*'DIVX'), fps,(img_width,img_height)) for i in range(len(img_array)): out.write(img_array[i]) print(onename.replace("yuer",str(ret+i)),"已写入") out.release() def main(): images_to_video() print("完成") if __name__ == "__main__": main()
视频合并:
#视频合并 import cv2 import os def concat_videos(video_paths, output_path): # 读取第一个视频 cap1 = cv2.VideoCapture(video_paths[0]) frame_width = int(cap1.get(3)) frame_height = int(cap1.get(4)) fps = int(cap1.get(5)) # 创建VideoWriter对象来保存合并后的视频 fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter(output_path, fourcc, fps, (frame_width, frame_height)) # 逐帧读取并写入第一个视频 while cap1.isOpened(): ret, frame = cap1.read() if not ret: break out.write(frame) # 释放第一个视频 cap1.release() # 逐帧读取并写入第二个视频 for video_path in video_paths[1:]: cap2 = cv2.VideoCapture(video_path) while cap2.isOpened(): ret, frame = cap2.read() if not ret: break out.write(frame) cap2.release() # 释放输出视频 out.release() def main(): time = 17 for i in range(time-1): file1 = 'result' + str(i) + ".avi" file2 = 'result' + str(i+1) + ".avi" newfile = 'newavi.avi' print(file1,file2) video_paths = [file1, file2] # 要拼接的视频路径列表 output_path = newfile concat_videos(video_paths, output_path) os.remove(file2) os.rename(newfile,file2) os.remove(file1) print("视频拼接完成!") if __name__ == "__main__": main()
发表评论: