• 04-06-2022, 18:50:05
    #1
    Üyeliği durduruldu
    İnternette ilgili bilgileri araştırdığım fikirler ve PIL görüntü işleme kitaplığının ImageGrab modülü temel olarak video kaydetmek için kullanılıyor. Bu modül, mevcut ekranın veya panonun içeriğini PIL görüntü belleğine kopyalamak için kullanılabilir.
    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 False
    Ana 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 Videoyu
    kaydettikten 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.
  • 09-06-2022, 02:19:14
    #2
    emeğinize sağlık. Github'dan takip etmek isterim 🕊