Bu modül içeriği mevcut ekranda alabildiği için kesintisiz alıyorum ve ardından alınan içeriği bir araya getiriyorum, video değil mi?
Kaydı gerçekleştirmenin
genel fikri , PIL modülündeki ImageGrab'ın mevcut ekranı almaya devam etmesi ve video akışını yazmak için opencv kullanmasıdır.
def video_record(sttime):
global name
# geçerli saat (dosya adı olarak)
name = datetime.now().strftime('%Y-%m-%d %H-%M-%S')
# geçerli ekranı al
screen = ImageGrab.grab()
# Mevcut ekranın boyutunu al
width, high = screen.size
# MPEG-4 kodlama, dosya soneki .avi .asf .mov vb olabilir.
fourcc = VideoWriter_fourcc('X', 'V', 'I', 'D')
# (dosya adı, kodlayıcı, kare hızı, video genişliği ve yüksekliği)
video = VideoWriter('%s.avi' % name, fourcc, 15, (width, high))
print(str(sttime) + 'Saniyeler içinde kaydetmeye başlayın----')
time.sleep(int(sttime))
print('kayda başla!')
global start_time
start_time = time.time()
while True:
if flag:
print("Kayıt bitti!")
global final_time
final_time = time.time()
# serbest bırakıldı
video.release()
break
# Resim RGB modunda
im = ImageGrab.grab()
# opencv'nin BGR moduna dönüştürün
imm = cvtColor(np.array(im), COLOR_RGB2BGR)
#Kayıt
video.write(imm)Video kaydetmenin ana kodu sadece birkaç satırdır, ancak kaydı başlatma, kaydı bitirme vb. kayıt işlemlerini kontrol etmemiz gerekir. Ekran içeriği elde edildikten sonra içeriğin kod çevrimi yapılması ve ardından video akışına yazılması gerekir.Klavye olaylarını tespit etme
Video kaydetmek için ekran bilgilerini almak için bir süre döngüsü kullanıyoruz ve başladıktan sonra devam edecek. Ancak bu döngüyü sonlandırmak ve böylece video kaydını durdurmak için klavye olaylarını dinlememiz gerekiyor. Bu izleme olayı çok önemlidir.Klavye ve fare olaylarını küresel olarak izleyebilen güçlü üç taraf kitaplık pynput burada kullanılır.
Ayarladığımız şey, kullanıcı klavyenin ESC tuşuna bastıktan sonra while döngüsü sonlandırılarak video kaydı sonlandırılıyor.
# Tuş vuruşlarını izleyin
def on_press(key):
global flag
if key == keyboard.Key.esc:
flag = True
# Yanlış Döndür, klavye izleme bitti!
return FalseAna gövde kontrolüEkran içeriğini sürekli olarak almamız gerektiğinden, bunu yapmak için bir konu başlatsak iyi olur.
th = threading.Thread(target=video_record, args=sstime)
th.start()
with keyboard.Listener(on_press=on_press) as listener:
listener.join()Video Bilgileri Videoyukaydettikten sonra, süre, kare hızı, çözünürlük vb. gibi videoyla ilgili bazı bilgileri de alabiliriz.
# video bilgisi
def video_info():
# Dosya adı ve formatının yanlış olmadığını unutmayın!
video = VideoCapture('%s.avi' % name)
fps = video.get(CAP_PROP_FPS)
count = video.get(CAP_PROP_FRAME_COUNT)
size = (int(video.get(CAP_PROP_FRAME_WIDTH)), int(video.get(CAP_PROP_FRAME_HEIGHT)))
print('kare hızı=%.1f' % fps)
print('çerçeve numarası=%.1f' % count)
print('Çözünürlük', size)
print('Video süresi = %.3f saniye' % (int(count) / fps))
print('kayıt süresi = %.3f saniye' % (final_time - start_time))
print('Önerilen kare hızı =%.2f' % (fps * ((int(count) / fps) / (final_time - start_time))))Daha fazla python bilgisi öğrenmek istiyorsanız, lütfen beğenmeyi ve yorum atmayı unutmayınız.