Đọc video, lưu các frame vào list, đảo ngược list, phát lại. Sử dụng cv2.VideoCapture và cv2.imshow.
Các bước
- Mở video với
cv2.VideoCapture. - Đọc frame bằng
cap.read(), lưu vào list. - Đảo ngược list:
frames.reverse(). - Phát từng frame với
cv2.imshow. - Nhấn 'q' để thoát sớm.
Code hoàn chỉnh
import cv2
cap = cv2.VideoCapture('input_video.mp4')
frames = []
# Đọc tất cả frame
while True:
ret, frame = cap.read()
if not ret:
break
frames.append(frame)
cap.release()
# Phát ngược
for frame in reversed(frames):
cv2.imshow('Reverse Video', frame)
if cv2.waitKey(25) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
Tối ưu bộ nhớ (video lớn)
Video lớn gây tràn RAM. Giải pháp:
- Ghi frame ra disk (temp file) thay vì giữ trong RAM.
- Dùng
cv2.VideoWriterghi video ngược trực tiếp. - Xử lý theo chunk.
Ghi video ngược ra file
import cv2
cap = cv2.VideoCapture('input.mp4')
fps = cap.get(cv2.CAP_PROP_FPS)
w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('output_reverse.mp4', fourcc, fps, (w, h))
frames = []
while True:
ret, frame = cap.read()
if not ret: break
frames.append(frame)
cap.release()
for frame in reversed(frames):
out.write(frame)
out.release()
print("Done!")
Lưu ý
waitKey(25)~ 40 FPS. Điều chỉnh theo FPS video gốc.- Mã codec:
mp4v(MP4),XVID(AVI),MJPG. - OpenCV không hỗ trợ audio – video ngược sẽ không có âm thanh.