# Opencv python recording from webcam in 720p is 5 seconds less of file video

**URL:** <https://forum.opencv.org/t/opencv-python-recording-from-webcam-in-720p-is-5-seconds-less-of-file-video/9170>\
**Category:** Python\
**Created:** [June 14, 2022, 9:33am UTC](https://forum.opencv.org/t/opencv-python-recording-from-webcam-in-720p-is-5-seconds-less-of-file-video/9170 "2022-06-14T09:33:29Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![ijimenez](https://avatars.discourse-cdn.com/v4/letter/i/8edcca/32.png) [@ijimenez](https://forum.opencv.org/u/ijimenez)\
**Post date:** [June 14, 2022, 9:33am UTC](https://forum.opencv.org/t/opencv-python-recording-from-webcam-in-720p-is-5-seconds-less-of-file-video/9170/1 "2022-06-14T09:33:29Z")

</div>

Hi,

I am using opencv python module to record videos from webcam to 30fps in 720p(1280x720) to a file avi. But I have some issue with that, beacuse when video is recorded from webcam I start th stopwatch and when video stops (stopwatcht in the same time). Then, the file has 20seconds, but in the stopwatcher is around 5 seconds more.

I 'm trying to change fps and resolution without success. When I use another webcam, in 640x480 25fps, but when stopwatcher is 50seconds, the file is 58seconds.

The sample code is very simple and I picked from a tutorial.

```auto
import numpy as np
import os
import cv2

filename = 'video.avi'
frames_per_second = 24.0
res = '720p'

# Set resolution for the video capture
# Function adapted from https://kirr.co/0l6qmh
def change_res(cap, width, height):
    cap.set(3, width)
    cap.set(4, height)

# Standard Video Dimensions Sizes
STD_DIMENSIONS = {
    "480p": (640, 480),
    "720p": (1280, 720),
    "1080p": (1920, 1080),
    "4k": (3840, 2160),
}

# grab resolution dimensions and set video capture to it.
def get_dims(cap, res='1080p'):
    width, height = STD_DIMENSIONS["480p"]
    if res in STD_DIMENSIONS:
        width,height = STD_DIMENSIONS[res]
    ## change the current caputre device
    ## to the resulting resolution
    change_res(cap, width, height)
    return width, height

# Video Encoding, might require additional installs
# Types of Codes: http://www.fourcc.org/codecs.php
VIDEO_TYPE = {
    'avi': cv2.VideoWriter_fourcc(*'XVID'),
    #'mp4': cv2.VideoWriter_fourcc(*'H264'),
    'mp4': cv2.VideoWriter_fourcc(*'XVID'),
}

def get_video_type(filename):
    filename, ext = os.path.splitext(filename)
    if ext in VIDEO_TYPE:
      return VIDEO_TYPE[ext]
    return VIDEO_TYPE['avi']

cap = cv2.VideoCapture(0)
out = cv2.VideoWriter(filename, get_video_type(filename), 25, get_dims(cap, res))

while True:
    ret, frame = cap.read()
    out.write(frame)
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
out.release()
cv2.destroyAllWindows()

```

I don’t know what it happens. If is the resolution, fps, camera, … I am new in opencv. I appreciate every tip or idea for making videos with the right time in file.

Thanks a lot

---

<div class="post-metadata">

**Author:** ![laurent.berger](https://avatars.discourse-cdn.com/v4/letter/l/ec9cab/32.png) [@laurent.berger](https://forum.opencv.org/u/laurent.berger)\
**Post date:** [June 14, 2022, 10:48am UTC](https://forum.opencv.org/t/opencv-python-recording-from-webcam-in-720p-is-5-seconds-less-of-file-video/9170/2 "2022-06-14T10:48:44Z")

</div>

It does not work as you think.  
You must grab 25 images per second if you want a video at 25fps.

try this [code] ([Python-sans-detour/cv2\_ex3.py at master · LaurentBerger/Python-sans-detour · GitHub](https://github.com/LaurentBerger/Python-sans-detour/blob/master/chapitre_image_et_son/opencv/cv2_ex3.py)) in french.

---

<div class="post-metadata">

**Author:** ![ijimenez](https://avatars.discourse-cdn.com/v4/letter/i/8edcca/32.png) [@ijimenez](https://forum.opencv.org/u/ijimenez)\
**Post date:** [June 14, 2022, 4:00pm UTC](https://forum.opencv.org/t/opencv-python-recording-from-webcam-in-720p-is-5-seconds-less-of-file-video/9170/3 "2022-06-14T16:00:03Z")

</div>

Yes, I guess. But this equation for calculate time in that code

```auto
tps_img_sui = time.time_ns() + 1 / fps * 1e9
while True:
    ret, img = flux_entree.read()
    if not ret:
        print("erreur ou fin de la lecture du flux")
        break
    tps_attente = tps_img_sui - time.time_ns()
    if tps_attente > 0:
        time.sleep(tps_attente * 1e-9)
    else:
        print("FPS trop grand")
    tps_img_sui += 1 / fps * 1e9

```

are there any documentation in opencv in order to get the right time in file recorded.?

Thanks
