OpenCV를 사용하여 긴 동영상을 일부만 저장하는 방법
계기
구후 / 증식계 YouTuber 의 「NHK」로 늘어나 「부수다」로 배가 되는 타치바나 타카시 에 sync했습니다
딱 좋은 동영상 소재로, 영역 분할·얼굴 인식·테롭을 지우려면···등등 뭔가에서 opencv로 할 수 있을 것 같습니다.
이 동영상은 18분 있습니다만 후보자가 등장하는 서두의 1분만을 사용하고 싶습니다.
그래서 일부만 시간별로 추출하는 방법을 python과 OpenCV에서만 해보겠습니다.
원소재
방법
開始時間 * fps
or 終了時間 * fps
에서 프레임 수 계산 time.time()
로 계측하려고 했습니다만 프레임수 베이스로 제어하는 것이 성공했습니다.또한
候補者が登場する冒頭の1分
그래서했다.
개발
import cv2
if __name__ == '__main__':
cap = cv2.VideoCapture('drop_out_nhk.mp4')
cap_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
cap_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
writer = cv2.VideoWriter('one_minutes.mp4',fourcc, fps, (cap_width, cap_height))
# 抽出したい開始or終了時間
begin = 30
end = 90
for i in range(end * fps):
ret, frame = cap.read()
if ret:
if begin * fps < i:
writer.write(frame)
writer.release()
cap.release()
결과
아마 이것으로 정확히 1분이 되었다고 생각합니다.
결론
asyncio
라든지 사용하려고 생각했습니다만, 꽤 실용적으로 구현할 수 있었습니다. 이미지 크기를 변경하면 왠지 코덱으로 실수합니다.
참고로 한 링크
import cv2
if __name__ == '__main__':
cap = cv2.VideoCapture('drop_out_nhk.mp4')
cap_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
cap_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
writer = cv2.VideoWriter('one_minutes.mp4',fourcc, fps, (cap_width, cap_height))
# 抽出したい開始or終了時間
begin = 30
end = 90
for i in range(end * fps):
ret, frame = cap.read()
if ret:
if begin * fps < i:
writer.write(frame)
writer.release()
cap.release()
아마 이것으로 정확히 1분이 되었다고 생각합니다.
결론
asyncio
라든지 사용하려고 생각했습니다만, 꽤 실용적으로 구현할 수 있었습니다. 이미지 크기를 변경하면 왠지 코덱으로 실수합니다.
참고로 한 링크
Reference
이 문제에 관하여(OpenCV를 사용하여 긴 동영상을 일부만 저장하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/satsukiya/items/9647e20c4e27b3d0362a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)