from PIL import ImageGrabimport numpy as npimport cv2from pynput import keyboardimport threadingimport datetimeimport osflag = Falsedef video_record(): p = ImageGrab.grab() a, b = p.size fourcc = cv2.VideoWriter_fourcc(*'XVID') desktop_path = os.path.join(os.path.expanduser('~'), 'Desktop') filename = os.path.join(desktop_path, '视频_{}.avi'.format(datetime.datetime.now().strftime('%Y%m%d_%H%M%S'))) video = cv2.VideoWriter(filename, fourcc, 28, (a, b)) while True: im = ImageGrab.grab() inn = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR) video.write(inn) if flag: print('录制结束!') break video.release()def on_press(key): global flag if key == keyboard.Key.esc: flag = True return Falseif __name__ == '__main__': print('开始录制!') th = threading.Thread(target=video_record) th.start() with keyboard.Listener(on_press=on_press) as listener: listener.join()在这段代码上把要保存的文件名修改为自定义格式
时间: 2024-03-03 22:48:08 浏览: 61
你可以把这段代码中的文件名修改为你想要的格式,例如将以下代码中的"视频_{}.avi"修改为"my_video_{}.mp4":
```python
filename = os.path.join(desktop_path, 'my_video_{}.mp4'.format(datetime.datetime.now().strftime('%Y%m%d_%H%M%S')))
```
这样录制的视频将以"my_video_日期_时间.mp4"的格式保存在桌面上。
相关问题
from PIL import ImageGrab import numpy as np import cv2 from pynput import keyboard import threading flag= False def video_record(): p=ImageGrab.grab() a,b=p.size fourcc =cv2.VideoWriter_fourcc(*'XVID') video=cv2.VideoWriter('视频.avi',fourcc,28,(a,b)) while True: im = ImageGrab.grab() inn = cv2.cvtColor(np.array(im),cv2.COLOR_RGB2BGR) video.write(inn) if flag: print('录制结束!') break video.release() def on_press(key): global flag if key == keyboard.Key.esc: flag = True return False if __name__=='__main__': print('开始录制!') th=threading.Thread(target=video_record) th.start() with keyboard.Listener(on_press=on_press)as listener: listener.join()这个代码只能实现最新一次的录屏吗
是的,这个代码只能实现最新一次的录屏。因为它仅仅保存一个名为"视频.avi"的视频文件,每次启动程序后都会覆盖掉上一次保存的视频文件,无法保存多个视频。如果你想保存多个视频,可以考虑在文件名中添加时间戳或其他唯一标识符。例如,在文件名中添加当前日期和时间:
```python
import datetime
filename = '视频_{}.avi'.format(datetime.datetime.now().strftime('%Y%m%d_%H%M%S'))
video = cv2.VideoWriter(filename, fourcc, 28, (a, b))
```
这样每次录制的视频文件名都将不同,不会覆盖之前的视频文件。
可以发一下把这段代码加进去的完整代码不import datetimefilename = '视频_{}.avi'.format(datetime.datetime.now().strftime('%Y%m%d_%H%M%S'))video = cv2.VideoWriter(filename, fourcc, 28, (a, b))
完整代码如下:
```python
from PIL import ImageGrab
import numpy as np
import cv2
from pynput import keyboard
import threading
import datetime
flag = False
def video_record():
p = ImageGrab.grab()
a, b = p.size
fourcc = cv2.VideoWriter_fourcc(*'XVID')
filename = '视频_{}.avi'.format(datetime.datetime.now().strftime('%Y%m%d_%H%M%S'))
video = cv2.VideoWriter(filename, fourcc, 28, (a, b))
while True:
im = ImageGrab.grab()
inn = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)
video.write(inn)
if flag:
print('录制结束!')
break
video.release()
def on_press(key):
global flag
if key == keyboard.Key.esc:
flag = True
return False
if __name__ == '__main__':
print('开始录制!')
th = threading.Thread(target=video_record)
th.start()
with keyboard.Listener(on_press=on_press) as listener:
listener.join()
```
在原有代码的基础上,我们添加了以下几行代码:
```python
import datetime
flag = False
def video_record():
p = ImageGrab.grab()
a, b = p.size
fourcc = cv2.VideoWriter_fourcc(*'XVID')
filename = '视频_{}.avi'.format(datetime.datetime.now().strftime('%Y%m%d_%H%M%S'))
video = cv2.VideoWriter(filename, fourcc, 28, (a, b))
while True:
im = ImageGrab.grab()
inn = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)
video.write(inn)
if flag:
print('录制结束!')
break
video.release()
```
其中,我们导入了datetime模块,用于获取当前的日期和时间,然后将其添加到视频文件名中。在video_record函数中,我们使用strftime方法将当前的日期和时间转换为字符串,然后将其添加到视频文件名中。因此,每次录制的视频文件名都将不同,不会覆盖之前的视频文件。
阅读全文