【问题标题】:How to save videos recorded from a loop as different files?如何将循环录制的视频保存为不同的文件?
【发布时间】:2020-02-22 16:36:38
【问题描述】:

我正在使用 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

【问题讨论】:

  • 你能说得更具体点吗?您已经知道如何将视频写入文件,对吧?
  • 是的,但是如果我运行此代码,它捕获的每个视频(从我想要的六个视频中)都会保存到同一个文件中。我希望每个视频都保存到单独的文件中

标签: python opencv video-capture


【解决方案1】:

在每次迭代中选择不同的文件名。

例子:

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

【讨论】:

  • 就是这样!非常感谢:D
【解决方案2】:

我可以帮助你,但我的回答没有多大用处...... 您可以使用此代码.......

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()

【讨论】:

  • 请正确格式化您的代码,click here to learn how
  • 虽然此代码可能会解决问题,但 including an explanation 关于如何以及为何解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释并说明适用的限制和假设。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
相关资源
最近更新 更多