اذهب إلى المحتوى
  • 0

كيف يمكننا معرفة عدد الإطارات في الفيديو في OpenCV | بايثون

Ali Ismael

السؤال

Recommended Posts

  • 1

يمكنك الحصول على هذه المعلومات من خلال استخدام الدالة get مع خصائص محددة لكل معلومة تريدها كالتالي:

import numpy as np
import cv2
# نحدد مسار الفيديو   
cap = cv2.VideoCapture(r'C:\Users\Windows.10\Downloads\Video\videoplayback_6.mp4')
length = cap.get(cv2.CAP_PROP_FRAME_COUNT) # عدد الإطارات في الفيديو
width  = cap.get(cv2.CAP_PROP_FRAME_WIDTH) # عرض الإطار
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) # ارتفاعه
fps    = cap.get(cv2.CAP_PROP_FPS) # Frame rate. 

print("This video contains: ",length,"frames")
print("Width: ", width )
print("Height: ", height )
print("Frame rate. : ", fps )
# والخرج سيكون كالتالي
"""
This video contains:  33392.0 frames
Width:  640.0
Height:  360.0
Frame rate. :  30.0
"""
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

يمكنك استخدام اما الطريقة اليدوية واما طريقة سريعة باستخدام opencv لايجاد عدد الاطارات داخل فيديو، الكود التالي يوضح الطريقيتين والفرق في السرعة بينهما:

def frame_count(video_path, manual=False):
    def manual_count(handler):
        frames = 0
        while True:
            status, frame = handler.read()
            if not status:
                break
            frames += 1
        return frames 

    cap = cv2.VideoCapture(video_path)
    # بطيئة لكنها دقيقة 100% 
    if manual:
        frames = manual_count(cap)
    #سريعة لكن ليس بدقة الأولي
    else:
        try:
            frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
        except:
            frames = manual_count(cap)
    cap.release()
    return frames

اذا قمنا بتشغيل الكود وطباعة الوقت الذي تستغرقه كل طريقه منهما بجانب عدد الاطارات تكون كالتالي:

#الطريقة الأولى
frames: 3671
0.018054921 (s)

#الطريقة الثانية
frames: 3521
9.447095287 (s)

لاحظ الاختلاف في الوقت المستغرق من كل منها وكذلك عدد الإطارات، الطريقة الأولى أبطأ لكنها دقيقة 100% أما الثانية فهي سريعة للغاية لكن بطيئة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...