如何将循环录制的视频保存为不同的文件?

How to save videos recorded from a loop as different files?

我正在使用 opencv 和 python 循环录制视频。我已经设法让它记录循环中的所有视频并将其保存到单个输出文件中,但我的目标是将循环中记录的每个视频都保存为不同的文件,并将日期和时间作为标识符每个视频。我不经常使用 python,我确信有一种简单的方法可以做到这一点,但我就是找不到。非常感谢任何帮助!

import cv2
import time as t1
import numpy as np

def save_video(outPath,fps,mirror=False):
    cap = cv2.VideoCapture(0)

    currentFrame = 0
    width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)  # float
    height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)  # float

    fourcc = cv2.VideoWriter_fourcc(*"XVID")
    out = cv2.VideoWriter(outPath, fourcc, 20.0, (int(width), int(height)))

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

    currentFrame +=1


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

date_string = t1.strftime("%Y-%m-%d-%H:%M")

count=0
while(True):
    if count < 6:
    print('Recording started: recording video number ' + str(count))
    save_video('/Documents/0222_video_recordings/video' + date_string + '.avi', 
    30.0,mirror=True)
    count += 1

Select 每次迭代中的不同文件名。

示例:

save_video('/Documents/0222_video_recordings/video_' + str(count) + '_' + date_string + '.avi', 

我可以帮你,但是我的回答用处不大...... 你可以使用这个代码......

import cv2
codec = cv2.VideoWriter_fourcc("*XVID")

# out = cv2.VideoWriter("out.avi", codec, frame speed, frame size)
out = cv2.VideoWriter("out.avi", codec, 10.0, (640,480))
i = 0

cap = cv2.VideoCapture(0)


while True:

    ret, frame = cap.read()

    if ret == True:

        cv2.VideoWriter("out{}.avi".format(i),fourcc, 10.0, (640,480)).write(frame)

        i = i + 1

    cv2.imshow("frame",frame)

    if cv2.waitKey(5) & 0xFF == ord("q"):

        break

cap.release()

out.release()

cv2.destroyAllWindows()
import cv2, numpy as np
import time
from datetime import datetime
i = 1;

win_name = 'Recording'

start_time = time.time()
capture_duration = 1

# Connect camera for capture 

cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)              
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) 
# cap.set(cv2.CAP_PROP_FPS,150)

frame_width = int(cap.get(3))

frame_height = int(cap.get(4))

frame_size = (frame_width,frame_height)

#output = cv2.VideoWriter('output.avi', cv2.VideoWriter_fourcc(*'XVID'), 20, (frame_width , frame_height))
outVid = 'output_' + str(i) + '.avi'
output = cv2.VideoWriter( outVid, cv2.VideoWriter_fourcc(*'XVID'), 20, (frame_width , frame_height))
while cap.isOpened():
    e1 = cv2.getTickCount()       
    ret, frame = cap.read()
    
    duration = time.time() - start_time
    minutes = int(duration/60)
    hours = int(minutes/60)
    seconds = duration%60
    seconds = round(seconds, 2)
    now = datetime.now()
    # write text to the frame
    cv2.putText(frame, now.strftime("date : %Y/%m/%d time : %H:%M:%S") + '  '+ 'hours: ' + str(hours) + '  min: ' + str(minutes) + '  sec: ' + str(seconds), (20, frame_height - 20), 0, 1, (255, 255, 255), 1,
          cv2.LINE_AA)

   
    cv2.imshow(win_name, frame)
    # print(round(seconds % 20))

    if round(minutes) < capture_duration:

        output.write(frame)

    elif round(minutes) == capture_duration:
        output.release()
        i += 1
        capture_duration += 1
        outVid = 'output_' + str(i) + '.avi'
        output = cv2.VideoWriter( outVid, cv2.VideoWriter_fourcc(*'XVID'), 20, (frame_width , frame_height))
    key = cv2.waitKey(1)  & 0xFF
    if key == 27:    # Esc, 종료
            break          


else:
    print("can't open camera.")

cap.release()                          
cv2.destroyAllWindows()
output.release()