동영상 파일에서 프레임을 나란히 썸네일 만들기

6770 단어 파이썬OpenCV
동영상에서 이미지를 만듭니다. 1프레임만으로 화상으로 하는 것이 아니라, 시계열에 썸네일을 늘어놓은 화상을 만들고 싶었습니다. 먼저 결과만 보여주면 이런 이미지입니다.



첫 번째 프레임을 메인 이미지로 만들고 그 아래에 미리보기 이미지를 정렬합니다.

이것은 이전에 만든 다음 동영상을 기반으로 만든 이미지입니다. 이미지가 흐릿한 것은 동영상의 질이 나쁜 것일지도.
  • 달리는 Raspberry Pi - YouTube

  • 이런 이미지를 동영상 파일에서 생성하는 Python 코드를 썼습니다.

    OpenCV를 사용하고 있습니다. OpenCV에 대해서는 어제도 기사로했습니다.
  • 동영상 파일에서 사이즈 정보와 썸네일을 Python의 OpenCV로 취득

  • 다음은 파이썬 코드입니다.
    import cv2
    
    def buildVideoCaptures(videoPath, outputPath):
        cap = cv2.VideoCapture(videoPath)
        if not cap.isOpened(): return
    
        # 最初のフレームの画像を取得
        _, first_img = cap.read()
    
        # 動画のフレーム数を取得
        frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    
        # 連続サムネイルを作成
        n = 9 # サムネイルの数
        thumbnail_imgs = []
        for i in range(n):
            # フレームの番号を設定
            cap.set(cv2.CAP_PROP_POS_FRAMES, (i+1) * frame_count / (n+1))
    
            # 設定したフレーム番号の画像を取得
            _, img = cap.read()
    
            thumbnail_imgs.append(img)
    
        # 9つのサムネイルを横に結合
        thumbnails_img = cv2.hconcat(thumbnail_imgs)
    
        # 画像サイズを取得
        first_width = first_img.shape[1]
        first_height = first_img.shape[0]
        thumbnails_width = thumbnails_img.shape[1]
        thumbnails_height = thumbnails_img.shape[0]
    
        # 連続サムネイルのリサイズ後のサイズを決定
        new_width = first_width
        new_height = int(thumbnails_height * new_width / thumbnails_width)
    
        # 連続サムネイルをリサイズ
        thumbnails_img = cv2.resize(thumbnails_img, (new_width, new_height))
    
        # 最初のフレーム画像と連続サムネイルを縦に結合
        # 最初のフレーム画像の下に連続サムネイル
        concat_img = cv2.vconcat([first_img, thumbnails_img])
    
        # 画像ファイルで書き出す
        cv2.imwrite(outputPath, concat_img)
    
    buildVideoCaptures("./sample.mp4", "./thumbnail.jpg")
    

    처음과 도중의 전부에서 10개의 프레임을 이미지로서 꺼내고, OpenCV의 resize , hconcat , vconcat 로 리사이즈나 결합하고 있을 뿐입니다.

    좋은 웹페이지 즐겨찾기