728x90
반응형
SMALL
💡 문제
1번 동영상이 끝나기 2초전 부터 2번 동영상이 좌측에서 시작되어 2초가 끝나면 2번 동영상이 모두 보이는 형태의 프로그램을 만들어보자.
import cv2
import numpy as np
cap1 = cv2.VideoCapture('cat1.mp4')
cap2 = cv2.VideoCapture('cat2.mp4')
frame_cnt1 = round(cap1.get(cv2.CAP_PROP_FRAME_COUNT))
frame_cnt2 = round(cap2.get(cv2.CAP_PROP_FRAME_COUNT))
print(frame_cnt1)
print(frame_cnt2)
fps1 = cap1.get(cv2.CAP_PROP_FPS)
fps2 = cap2.get(cv2.CAP_PROP_FPS)
print(fps1)
print(fps2)
w = round(cap1.get(cv2.CAP_PROP_FRAME_WIDTH))
h = round(cap1.get(cv2.CAP_PROP_FRAME_HEIGHT))
print('w', w)
print('h', h)
fourcc= cv2.VideoWriter_fourcc(*'DIVX')
out = cv2.VideoWriter('cat.avi', fourcc, fps1, (w,h))
delay = int(1000/fps1)
effect_frame = int(fps1 * 2) # 2초
# 첫번째 영상
for i in range(frame_cnt1 - effect_frame):
ret1, frame1 = cap1.read()
cv2.imshow('output', frame1)
out.write(frame1)
if cv2.waitKey(delay) == 27:
break
for i in range(effect_frame):
ret1, frame1 = cap1.read() # 첫번째 영상의 나머지 2초 영상 읽기
ret2, frame2 = cap2.read() # 두번째 영상의 처음 2초 영상 읽기
# int(640 / 60) * 0 = 0
# int(640 / 60) * 1 = 10
# int(640 / 60) * 2 = 20
# ...
x = int(w / effect_frame) * i
frame = np.zeros((h, w, 3), dtype=np.uint8) # 검정색 배경영상
frame[:, 0:x, :] = frame2[:, 0:x, :]
frame[:, x:w, :] = frame1[:, x:w, :]
cv2.imshow('output', frame)
out.write(frame)
if cv2.waitKey(delay) == 27:
break
# 두번째 영상
for i in range(effect_frame, frame_cnt2):
ret2, frame2 = cap2.read()
cv2.imshow('output', frame2)
out.write(frame2)
if cv2.waitKey(delay) == 27:
break
cap1.release()
cap2.release()
out.release()

728x90
반응형
LIST
'KDT > 과제' 카테고리의 다른 글
[파이썬, Python] OpenCV - 동영상 필터 입히기 (0) | 2023.09.02 |
---|---|
[파이썬, Python] OpenCV - 원하는 ROI 설정 후 투시변환하기 (0) | 2023.08.30 |
[파이썬, Python] 알고리즘 - 1️⃣ 재귀호출(recursive call) (0) | 2023.06.29 |
[파이썬, Python] 서브워드분리(subword segmentation) - WordPiece Tokenizer (0) | 2023.06.29 |
[파이썬, Python] 서브워드분리(subword segmentation) - BPE 알고리즘 (0) | 2023.06.27 |