如何在文件夹中使用 opencv 更改视频速度后保存视频?
How to save a video after changing its speed with opencv in your folder?
使用:OpenCV 和 Python3
我正在使用 Python 3.8.2
操作系统:macOS Big Sur 11.2.3
我在 VScode 上试过这段代码,它确实显示了一个使用 cv2.imshow
命令改变了速度的视频,但我不知道如何将改变后的视频保存在我的文件夹中:
import cv2
cap = cv2.VideoCapture('Pothole testing.mp4')
frameTime = 100
while(cap.isOpened()):
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(frameTime) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
谁能告诉我应该向这段代码中添加什么才能保存更改后的视频?最好是 .mp4 格式本身。
可以使用cv2.VideoWriter()
方法的fps参数。 fps 可以通过简单地将 frameTime
变量乘以 1000
来计算,因为 cv2.waitKey()
方法接受一个数字并将其用作千分之一秒。
请注意,如果 cap
在 while
循环期间从未关闭,则 while cap.isOpened()
不会比 while True
好多少,意思是最后一次帧被读取,就会发生错误,导致永远不会调用 writer.release()
方法,从而使生成的文件不可读。
以下是我的做法:
import cv2
cap = cv2.VideoCapture('Pothole testing.mp4')
ret, frame = cap.read() # Get one ret and frame
h, w, _ = frame.shape # Use frame to get width and height
frameTime = 100
fourcc = cv2.VideoWriter_fourcc(*"XVID") # XVID is the ID, can be changed to anything
fps = 1000 / frameTime # Calculate fps
writer = cv2.VideoWriter("Pothole testing 2.mp4", fourcc, fps, (w, h)) # Video writing device
while ret: # Use the ret to determin end of video
writer.write(frame) # Write frame
cv2.imshow("frame", frame)
if cv2.waitKey(frameTime) & 0xFF == ord('q'):
break
ret, frame = cap.read()
writer.release()
cap.release()
cv2.destroyAllWindows()
如果你只需要结果文件而不是进度window,你可以省略几行:
import cv2
cap = cv2.VideoCapture('Pothole testing.mp4')
ret, frame = cap.read()
h, w, _ = frame.shape
frameTime = 100
fourcc = cv2.VideoWriter_fourcc(*"XVID")
fps = 1000 / frameTime
writer = cv2.VideoWriter("Pothole testing 2.mp4", fourcc, fps, (w, h))
while ret:
writer.write(frame)
ret, frame = cap.read()
writer.release()
cap.release()
使用:OpenCV 和 Python3
我正在使用 Python 3.8.2
操作系统:macOS Big Sur 11.2.3
我在 VScode 上试过这段代码,它确实显示了一个使用 cv2.imshow
命令改变了速度的视频,但我不知道如何将改变后的视频保存在我的文件夹中:
import cv2
cap = cv2.VideoCapture('Pothole testing.mp4')
frameTime = 100
while(cap.isOpened()):
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(frameTime) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
谁能告诉我应该向这段代码中添加什么才能保存更改后的视频?最好是 .mp4 格式本身。
可以使用cv2.VideoWriter()
方法的fps参数。 fps 可以通过简单地将 frameTime
变量乘以 1000
来计算,因为 cv2.waitKey()
方法接受一个数字并将其用作千分之一秒。
请注意,如果 cap
在 while
循环期间从未关闭,则 while cap.isOpened()
不会比 while True
好多少,意思是最后一次帧被读取,就会发生错误,导致永远不会调用 writer.release()
方法,从而使生成的文件不可读。
以下是我的做法:
import cv2
cap = cv2.VideoCapture('Pothole testing.mp4')
ret, frame = cap.read() # Get one ret and frame
h, w, _ = frame.shape # Use frame to get width and height
frameTime = 100
fourcc = cv2.VideoWriter_fourcc(*"XVID") # XVID is the ID, can be changed to anything
fps = 1000 / frameTime # Calculate fps
writer = cv2.VideoWriter("Pothole testing 2.mp4", fourcc, fps, (w, h)) # Video writing device
while ret: # Use the ret to determin end of video
writer.write(frame) # Write frame
cv2.imshow("frame", frame)
if cv2.waitKey(frameTime) & 0xFF == ord('q'):
break
ret, frame = cap.read()
writer.release()
cap.release()
cv2.destroyAllWindows()
如果你只需要结果文件而不是进度window,你可以省略几行:
import cv2
cap = cv2.VideoCapture('Pothole testing.mp4')
ret, frame = cap.read()
h, w, _ = frame.shape
frameTime = 100
fourcc = cv2.VideoWriter_fourcc(*"XVID")
fps = 1000 / frameTime
writer = cv2.VideoWriter("Pothole testing 2.mp4", fourcc, fps, (w, h))
while ret:
writer.write(frame)
ret, frame = cap.read()
writer.release()
cap.release()