본문 바로가기
R&D

Video To Image 프로그램

by 도승이 2022. 3. 28.

 

 

용도 :

동영상에서 이미지를 뽑아내고싶을때

동영상의 일정한 프레임마다 이미지를 생성하고싶을때 사용하면된다.

 

과정

온라인사이트에서 사용할때는 제약이있고 내 동영상파일이 유출될? 우려가 있다.

온라인에서 돌아다니는 프로그램을 받으면 바이러스우려나 부속프로그램이 깔리는게 불편하다.

그래서 github을 돌아다니며 찾았다.

 

사용언어 : Python

 

소스코드 (Python)

import argparse
import os
import cv2
import time
from datetime import date
import glob

parser = argparse.ArgumentParser()
parser.add_argument('--input_path', type=str, default='', help='input video file\'s path')
parser.add_argument('--output_path', type=str, default='', help='output video file\'s path')
parser.add_argument('--video_type', type=str, default='avi,mp4,mpg,mpeg,mov', help='available video\'s type')
parser.add_argument('--fps', type=int, default=1, help='extract frame per second from video')

args = parser.parse_args()


def extract_frame(file_path):
    file_name_ext = os.path.basename(file_path)
    file_name = file_name_ext.split('.')[0]
    output_path = os.path.join(file_path.replace('/' + file_name_ext, ""), 'result/')
    if not os.path.exists(output_path):
        print('% % % % % % % % %  make result directory  % % % % % % % % %')
        os.mkdir(output_path)

    video = cv2.VideoCapture(file_path)
    video_fps = int(video.get(cv2.CAP_PROP_FPS))
    video_length = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
    video_length_one = 1
    if video_length > 100:
        video_length_one = int(video_length / 100)
    video_save_fps = int(video_fps / args.fps)

    extract_today = date.today().strftime('%m%d')
    start = time.time()
    success = True
    count = 1
    save_count = 1
    while success:
        success, image = video.read()
        if success:
            if count % video_save_fps == 0:
                cv2.imwrite(os.path.join(output_path, ('%s_%s_frame%05d.jpg'
                                                       % (extract_today, file_name, save_count))), image)
                save_count += 1
            if count % video_length_one == 0:
                print('########## progress ------ %s (fps: %d) ------ %7.2f%%  (%6d/%6d) ------------------ ##########'
                      % (file_name_ext, video_fps, count / video_length * 100, count, video_length), end='\r')
            count += 1
        else:
                print('########## progress ------ %s (fps: %d) ------ %7.2f%%  (%6d/%6d) ------------------ ##########'
                      % (file_name_ext, video_fps, (count - 1) / video_length * 100, count - 1, video_length), end='\r')
    print('@@@@@@@@@@ complete ------ %s (fps: %d, frames: %6d) -->> image\'s count: %6d ------ %0.2f sec @@@@@@@@@@'
          % (file_name, video_fps, video_length, save_count, time.time() - start), end='\r')
    print()


if __name__ == '__main__':
    video_type_list = args.video_type.split(',')

    if os.path.isfile(args.input_path):
        extract_frame(args.input_path)
    elif os.path.isdir(args.input_path):
        input_path = sorted(glob.glob(os.path.join(args.input_path, '*.*')))
        for f in input_path:
            if f.split('.')[-1] in video_type_list:
                extract_frame(f)

    else:
        print('% % % % % % % % % no file or directory % % % % % % % % %')

 

 

  • --input_path
    • you should use directory path (contains video files) or video file path
    • 비디오 파일이 있는 디렉토리의 경로나 비디오 파일의 경로를 입력해야 합니다.
    • after my code check input path, extract video files
    • 코드에서 input_path를 확인한 후, 비디오 파일들을 이미지로 전환합니다.
  • --video_type
    • You can set the possible extensions for the files in the directory or the video files.
    • 디렉토리 내 파일이나 비디오 파일에 대해 가능한 확장자를 설정할 수 있습니다.
    • default='avi,mp4,mpg,mpeg,mov'
  • --fps
    • this parameter means frame per second from video files.
    • 해당 파라미터는 비디오 파일로부터 초당 몇 프레임을 추출할 것인지를 의미합니다.
    example1) parameter fps = 1, video file(fps 30)
              every 1s -> save 1 image
    
    example2) parameter fps = 3, video file(fps 30)
              every 1s -> save 3 image
    
    • default=1

 

 

출처

 

GitHub - sga8/Video2Image: Convert Video to image files Python

Convert Video to image files Python. Contribute to sga8/Video2Image development by creating an account on GitHub.

github.com

'R&D' 카테고리의 다른 글

딥러닝을 통한 이미지생성과 슈퍼샘플링  (0) 2022.04.29
포토모자이크 기법  (0) 2022.03.28
[WebRTC] 웹 화면공유, 화상회의  (0) 2021.11.03
오픈소스 한글 입력 문제  (0) 2021.10.08

댓글