关于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()
发表评论: