# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# # 9.4.2 동영상을 frame별 화상 데이터로 변환
#
# 다운로드한 동영상을 frame별로 jpeg 형식의 화상 데이터로 변환합니다.
#

# ## 사전 준비
#
# ffmepg가 설치되어 있지 않은 경우에는
# 다음 명령을 터미널에서 실행하여, Ubuntu에 ffmpeg를 설치합니다.
#
# - sudo apt install ffmpeg
#

# +
import os
import subprocess  # 터미널에서 실행할 명령을 수행할 수 있다


# 동영상이 저장된 "kinetics_videos"폴더에 있는, 클래스의 종류와 경로를 취득
dir_path = './data/kinetics_videos'
class_list = os.listdir(path=dir_path)
print(class_list)

# 각 클래스의 동영상 파일을 화상 파일로 변환한다
for class_list_i in (class_list):  # 클래스별 루프

    # 클래스의 폴더 경로를 취득
    class_path = os.path.join(dir_path, class_list_i)

    # 각 클래스 폴더 내의 동영상 파일을 하나식 처리하는 루프
    for file_name in os.listdir(class_path):

        # 파일명과 확장자로 분할
        name, ext = os.path.splitext(file_name)

        # mp4 파일이 아니거나, 폴더 등은 처리하지 않음
        if ext != '.mp4':
            continue

        # 동영상 파일을 화상으로 분할하여 저장할 폴더명을 취득
        dst_directory_path = os.path.join(class_path, name)

        # 위의 화상 저장 폴더가 없으면 작성
        if not os.path.exists(dst_directory_path):
            os.mkdir(dst_directory_path)

        # 동영상 파일의 경로를 취득
        video_file_path = os.path.join(class_path, file_name)

        # ffmpeg를 실행하여, 동영상 파일을 jpg로 바꿈(높이 256 픽셀로, 폭은 화면 비율을 바꾸지 않음)
        # kinetics 동영상은 10초이며, 대략 300개의 파일이 됨(30 frames /sec)
        cmd = 'ffmpeg -i \"{}\" -vf scale=-1:256 \"{}/image_%05d.jpg\"'.format(
            video_file_path, dst_directory_path)
        print(cmd)
        subprocess.call(cmd, shell=True)
        print('\n')

print("동영상 파일을 화상 파일로 변환했습니다.")

# -

# 끝

StarcoderdataJupyterScriptsDedupFiltered