Bagibu Blog

Python İle Ekran Kaydedici Yapmak

15 Haziran 2021
python ekran kaydetme uygulaması
Bu yazım içerisinde python ile ekran kaydetme uygulaması, python screen recorder gibi aramalarınıza yanıt bulabilecekseniz.

Eğer python ile ekran kaydetme uygulaması yapmaya karar verdiyseniz bilgisayarınız üzerinde zaten python indirilmiş ve kurulmuştur diye düşünüyorum. Dolayısı ile python kodlayabilmek için bilgisayarınızda gerekli ortamın hazırlanması ile ilgili açıklamalarda bulunmadan direkt kod yazma aşamasına geçeceğim. Eğer python için gerekli bir ortam hazırlamadıysanız internet üzerinde birçok kaynak mevcut. Kısa bir araştırmanın ardından kolayca gerekli ortamı hazırlayabilirsiniz.

Konuya girmeden önce videonun ne olduğunu anlamak gerekir. Temel olarak bir video, belirli bir frekansta görüntülenen bir dizi görüntüden ibarettir.

Python ekran kaydetme

İlk olarak uygulamayı gerçekleyebilmemiz için gerekli olan kütüphanelerin kurulumunu gerçekleştirmemiz gerekiyor. Aşağıda verdiğim kodları sırasıyla terminale yazarak kütüphaneleri indirin. Başarı ile kütüphanelerin indiğinden ve kurulduğundan emin olun.

pip install PyAutoGUI
pip install opencv-python
pip install numpy

Kütüphanelerin kurulumunu gerçekleştirdik ve projemize dahil ettik. Kodların en son bütün halini yazının en aşağısında paylaşıyor olacağım.

Python screen recorder

Burada bazı ayarlamalar yapmamız gerekiyor.

res = pyautogui.size() 
codec = cv2.VideoWriter_fourcc(*'MP4V') 
filename = "video.mp4"
  
fps = 10.0
  
result = cv2.VideoWriter(filename, codec, fps, res) 

Bu kodlarda yer alan değerleri tanımlamak gerekirse:
  • res: Çözünürlük. Burada elinizle (1920, 1080) tarzında değerler girebileceğiniz gibi benim yaptığım tarzda otomatik olarak ekran çözünürlük değerimizi almasını da sağlayabilirsiniz.
  • codec: Videomuzun hangi formatta çıktılanacağını burada belirliyoruz. Ben burada mp4 seçtim. Bu seçimi isteğinize ve ihtiyacınıza göre değiştirebilirsiniz.
  • filename: Çıktı aldığımız videonun adı. 
  • fps: Burada 10 olarak tercih ettim. İsteğinize göre arttırabilir ya da azaltabilirsiniz.
  • result: Her bir kareyi alırken kaydedeceğimiz sonuç değişkenimiz.

Sıra kodumuzun sürekli olarak çalışmasını sağlamak için döngü oluşturmaya geldi. Ancak bunu yapmadan önce kaydımızın başladığını ve nelerin olup bittiğini görebilmek adına bir önizleme penceresi oluşturalım.

cv2.namedWindow("Recording", cv2.WINDOW_NORMAL) 
cv2.resizeWindow("Recording", 350, 200) 

Yukarıdaki kodlar yardımı ile önizleme penceresinin gerçekledik. Tüm ekranı kaplamaması için istediğimiz boyutta küçülttük. Şimdi döngümüzü oluşturalım. 

while True:  
    img = pyautogui.screenshot() 
    frame = np.array(img) 
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) 

Döngümüz içerisinde ilk olarak ekran görüntüsü alıyoruz ve bunu img değişkeni içerisine atıyoruz. Sonrasında aldığımız bu ekran görüntüsünü nump arrayına dönüştürüyoruz. Son olarak aldığımız ekran görüntüsünün renklerinin ters görünmemesi için yakaladığımız görüntüyü rgb'ye dönüştürüyoruz. Döngümüz tamam. Şimdi bu görüntüleri videomuza kaydedeceğiz.

    result.write(frame) 
      
    cv2.imshow('Recording', frame) 
    
    if cv2.waitKey(1) == ord('q'): 
        break

Bu kodları da yazarak yakaladığımız ekran görüntülerini videomuza kaydetmiş olduk. Kullanıcı istediği zaman 'q' tuşuna basarak uygulamadan çıkabilir. Kullanıcı çıkmak için tuşa bastığında döngüden çıkıyoruz ve aşağıdaki kodlar yardımıyla videomuzu release yapıp kaydediyoruz, tüm pencereleri kapatıyoruz.

result.release() 
  
cv2.destroyAllWindows()

Python ile ekran kaydedici, python ile ekran kaydetme uygulaması yapmak işte bu kadar basit. Kodun bütün halini aşağıda bulabilirsiniz. Elimden geldiğince anlatmaya çalıştım. Takıldığınız yerler veya sormak istediğiniz sorular için yorumlar kısmını kullanabilirsiniz.

import pyautogui 
import cv2 
import numpy as np 
  

res = pyautogui.size() 
codec = cv2.VideoWriter_fourcc(*'MP4V') 
filename = "video.mp4"
  
fps = 10.0
  
result = cv2.VideoWriter(filename, codec, fps, res) 
  

cv2.namedWindow("Recording", cv2.WINDOW_NORMAL) 
cv2.resizeWindow("Recording", 350, 200) 

 

while True:  
    img = pyautogui.screenshot() 
    frame = np.array(img) 
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) 

    result.write(frame) 
      
    cv2.imshow('Recording', frame) 
    
    if cv2.waitKey(1) == ord('q'): 
        break

result.release() 
  
cv2.destroyAllWindows()

Umarım işinize yaramıştır. Başka bir yazıda görüşebilmek üzere.

2 yorum:

srhtygn dedi ki...

Merhaba sizin paylaşmış olduğunuz ekran kaydedici kodlarını kullandım fakat sonuna geldiğimde no module named hatası alıyorum sizinde dediğiniz gibi hem cmd'den hem terminalden gerekli kodları tekrar yazıp yükledim fakat yine no module named hatası aldım bunu nasıl bir çözüme ulaştırabiliriz.

Batuhan KENGER dedi ki...

Merhaba Serhat, öncelikle değerli yorumun için teşekkür ederim. "No Module Named" hatası, projende kullandığın paketler yüklü olmadığında oluşan bir hatadır. Aslında bu yazı içerisinde paketlerin yüklenmesini anlatan bir bölüm var ama sanırım gözünden kaçırmışsın.

pip install PyAutoGUI
pip install opencv-python
pip install numpy

Bu kodları sırası ile terminalde çalıştırarak bu proje için bu sorunu giderebilirsin. Daha önce bu konu ile alakalı bir konu da paylaşmıştım aşağıya bıraktığım bağlantıya giderek ilgili konuya da ulaşabilirsin.

https://bagibublog.blogspot.com/2021/06/python-no-module-named-hatas.html

İyi çalışmalar.

Yorum Gönder