파이썬으로 영상을 캡처하는 코드를 GPT에게 부탁해서 만들었다.

 

동영상 파일이 있는 폴더 주소를 입력하고 원하는 프레임을 입력하며 ( 초당 10회 or 60초 1회)

거기에 맞게 캡처 파일을 하위 폴더로 만들어 준다.

 

gpt로 생성한 이미지를 kling을 이용해 i2v로 만든 동영상
캡처폴더 생성결과

import cv2
from pathlib import Path
from PIL import Image
import numpy as np

def capture_frames(video_folder, capture_rate=1):
    """
    동영상의 프레임을 캡처하여 지정된 폴더에 저장합니다. Pillow를 사용하여 한글 경로 저장 문제를 해결합니다.

    Args:
    video_folder (str): 동영상 파일이 있는 폴더 경로
    capture_rate (int): 초당 캡처할 프레임 수
    """
    # 초당 최대 캡처 수 제한
    if capture_rate > 10:
        capture_rate = 10
        print("Warning: 초당 캡처할 횟수는 최대 10으로 제한됩니다.")

    # 경로 설정
    video_folder = Path(video_folder)
    capture_folder = video_folder / 'capture'
    capture_folder.mkdir(exist_ok=True)

    # 폴더 내 파일 목록 가져오기
    video_files = [f for f in video_folder.iterdir() if f.suffix in ['.mp4', '.avi', '.mkv']]

    for video_file in video_files:
        video_path = str(video_file.resolve())
        cap = cv2.VideoCapture(video_path)

        if not cap.isOpened():
            print(f"Cannot open video: {video_path}")
            continue

        fps = int(cap.get(cv2.CAP_PROP_FPS))
        frame_interval = max(1, fps // capture_rate)
        frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

        capture_count = 0
        frame_idx = 0

        while frame_idx < frame_count:
            cap.set(cv2.CAP_PROP_POS_FRAMES, frame_idx)
            ret, frame = cap.read()

            if not ret or frame is None:
                print(f"Failed to read frame at index {frame_idx}")
                break

            # 프레임 데이터를 Pillow로 저장
            capture_filename = capture_folder / f"{video_file.stem}_frame_{capture_count:04d}.jpg"
            capture_filename = str(capture_filename)  # Pillow에서 사용할 경로는 문자열이어야 함
            try:
                # OpenCV 프레임 데이터를 Pillow 이미지로 변환
                image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
                image.save(capture_filename)
                print(f"Saved {capture_filename} using Pillow")
            except Exception as e:
                print(f"Failed to save {capture_filename} using Pillow: {e}")

            capture_count += 1
            frame_idx += frame_interval

        cap.release()
        print(f"Frames captured for {video_file} saved in {capture_folder}")

    print("All captures complete.")

# 사용 예시
video_folder_path = r'c:\Users\eligh\Desktop\test\수정영상'  # 한글 포함된 경로
capture_rate = 2  # 초당 1번 캡처하도록 설정
capture_frames(video_folder_path, capture_rate)

위는 짧은 영상용(한글명 경로로 인한 인코딩 오류 수정완료)

 

아래는 긴 영상용

#capture폴더에 바로 저장
import cv2
import os

def capture_frames(video_folder, capture_interval_sec=10):
    """
    지정된 폴더의 동영상에서 일정 시간마다 프레임을 캡처하여 capture 폴더에 직접 저장합니다.

    Args:
    video_folder (str): 동영상 파일이 있는 폴더 경로
    capture_interval_sec (int): 몇 초에 한 번씩 캡처할지 설정 (예: 10초에 한 번이면 10으로 설정)
    """
    # 폴더 내 파일 목록 가져오기
    video_files = [f for f in os.listdir(video_folder) if f.endswith(('.mp4', '.avi', '.mkv'))]
    
    # 캡처 폴더 생성 (모든 캡처 이미지를 저장할 폴더)
    capture_folder = os.path.join(video_folder, 'capture')
    os.makedirs(capture_folder, exist_ok=True)

    for video_file in video_files:
        # 동영상 파일 열기
        video_path = os.path.join(video_folder, video_file)
        cap = cv2.VideoCapture(video_path)

        if not cap.isOpened():
            print(f"Cannot open video {video_file}")
            continue

        # 동영상 정보 가져오기
        fps = int(cap.get(cv2.CAP_PROP_FPS))  # 초당 프레임 수
        frame_interval = int(fps * capture_interval_sec)  # 캡처할 프레임 간격 설정
        frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

        capture_count = 0

        while capture_count * frame_interval < frame_count:
            # 지정된 프레임 위치로 이동
            cap.set(cv2.CAP_PROP_POS_FRAMES, capture_count * frame_interval)
            ret, frame = cap.read()
            if not ret:
                break

            # 캡처 이미지 저장 경로 설정 (동영상 이름과 프레임 번호를 포함하여 저장)
            capture_filename = os.path.join(
                capture_folder, 
                f"{os.path.splitext(video_file)[0]}_frame_{capture_count:04d}.jpg"
            )
            cv2.imwrite(capture_filename, frame)
            capture_count += 1

        cap.release()
        print(f"Frames captured for {video_file} saved in {capture_folder}")

    print("All captures complete.")

# 사용 예시
video_folder_path = r''  # 동영상 폴더 경로 설정
capture_interval_sec = 60  # 60초에 한 번씩 캡처하도록 설정
capture_frames(video_folder_path, capture_interval_sec)

 

 

타일러 다이어리를 일주일 정도 써보았다.

 

 

결론,

시간을 경영(변화나 성장)하기보다는 관리(퇴보를 막기 위한 유지)하기 위해 사용한다고 느껴졌다.



업무나 루틴에도 특성이 존재하기 때문에 (주 업무, 보조업무, 자기계발, 인간관계, 취미 등)

자신에 하루 패턴에 대해 어느 정도 틀이 잡혀 있거나 고정적인 업무 경험을 관리하는 사람, 매니저가 있는 사람에게는 괜찮을 것 같다.



하지만 이제막 루틴을 만들어가는 사람이나 SMART 기법을 사용해 효과적인 결과값을 도출하고자 하는 사람에게는 추천하기 어려워 보인다.



밸런스 조절이나 루틴 변화, 즉각적인 피드백을 남기기 어렵다는 한계가 있기 때문이다.

최악에 경우 성과 데이터와 결과 데이터를 구분하지 않기 때문에 루틴(데이터)은 자기만족 욕구만을 충족시킬 가능성도 염두에 둬야 할 것으로 보인다.





생각해보면 AI를 활용해 보겠다는 취지에 더 가까우므로 노트를 이용한 시간관리 법 이상에 효과를 기대하기란 무리일 것이다.

 

보통 폴더를 만드는 방식은 크게 두 가지로 나뉜다.

 

첫째, 직접 마우스를 이용해서 폴더를 만들기.

둘째, 터미널 또는 PowerShell을 이용해서 명령어를 입력하기.

 

 

 

하지만

대량에 파일을 정리해야 하는 상황에서

두 방법만으로는 충분하지 않을 수있다.

 

 

 

 

 

 

 

 

 

 

 

가령 여행에 관한 사진 자료를 정리해야 한다고 가정해보자.

 

 

폴더 구조는는 연도별 폴더와 하위폴더로 여행지별 폴더가 있다면

ChatGPT에게 다음과 같이 만들어 달라고 요청해보자.

 

윈도우라면 powershell, 맥이라면 터미널이라고 요청하면 된다.

 

 

 

 

 

 

 

이후 받은 코드를 복사한 뒤

powershall에 붙여 넣는다.

 

 

 

 

 

 

 

 

시작 페이지에서 PowerShell 검색 후 열기

 

 

 

 

 

 

 

창에 코드 붙여넣고 엔터

 

 

 

 

생성완료

 

 

 

 

 

 

 

 

 

이제 바탕화면에

 

폴더가 생성된 것을 확인 할 수 있다.

 

 

 

 

 

 

 

 


중급

(파일 구조 한번에 뒤엎기)

 

 

 

생각이 바뀌어

여행지를 기준으로 하고 연도를 하위 폴더로 

만들고 싶어 한다고 가정해보자

 

 

 

 

 

프랑스에 피렌체?

이상하게 들어간다

 

 

 

 

때문에 먼저

구분을 먼저 해준다.

 

 

 

 

 

 

 

 

 

동일한 요청을 하면 성공적으로 원하는 폴더 구조를 얻을 수 있다.

 

 

 

 

 

잘들어 간다.

 

 

 

 

 

 

 

 

최종결과

 

 

 

 

 

 

 

 

GOOD

 

 

 

 


 

 

고급(실무편)

 

 

 

 

종종 회사에선 직원들의 생산성을 높이기 위해

 

PC 정리 컨설턴트를 불러 폴더 트리를 짠다고 한다.

 

 

 

 

 

 

컴퓨터 화면에 파일이 난잡하게 있어

정작 필요한 파일을 찾는데 시간을 허비하기 때문이다.

 

 

 

 

 

맥킨지(McKinsey) 보고서를 통해 직원들은 매일 1.8시간(주당 평균 9.3시간)을 정보 검색 및 수집에 소비한다고 밝힌바 있다.

 

 

 

 

 

 

 

 

 

 직무 내용과 프로세스 업무에 주기를 고려해

폴더 트리를 짤 수 있는데,

 

 

알마인드를 이용하면

마인드맵 프로그램을 함께 이용하면 보다 쉽게 만들 수있다.

 

(광고 느낌이 날까봐 링크를 걸지 않았는데

걸어 두는게 사람들에게 더 편할것같다.

https://www.softpick.co.kr/software/almindlite)

 

 

 

 

 

 

 

다 만들었다면

 

 

 html 파일로 만들어 저장한다

 

 

 

 

 

 

 

 

 

 

 

마지막이다

 

 

파일을 열어 복사 한 뒤

(컨트롤 + A , 컨트롤 + C)

 

 

 

 

 

 

 

 

 

 

 

GPT에게 만들어 달라고 하면

 

 

 

 

 

 

 

 

 

 

 

 

간단하게 폴더트리를 만들 수 있다.

 

 

 

 

 


 

 

*Tip

 

 

Everthing 같은 프로그램을 설치하면, 정리할 파일을 보다 빠르게 찾을 수 있다.

(https://www.voidtools.com/ko-kr/downloads/)

 

+ Recent posts