1. ホーム
  2. Python

Python OpenCVによる動画の読み込みと保存、保存失敗の理由解決

2022-02-21 22:58:07

最新記事 https://blog.csdn.net/DumpDoctorWang/article/details/92399157 をご参照ください。

I. OpenCVのインストール

# Open a terminal and type in pip, install pip if you don't have it
pip install opencv-contrib-python
# Open the Python interactive environment and print the opencv version
import cv2
print(cv2.__version__)

II. 動画の読み込みと保存

# coding=utf8
import cv2

if __name__ == '__main__':
    # Open the video
    reader = cv2.VideoCapture("/home/creator/Projects/Dataset/edge/V90516-155231.mp4")
    print(reader.isOpened())
    # The width of the video
    width = int(reader.get(cv2.CAP_PROP_FRAME_WIDTH))
    # The height of the video
    height = int(reader.get(cv2.CAP_PROP_FRAME_HEIGHT))
    # The frame rate of the video
    fps = reader.get(cv2.CAP_PROP_FPS)
    # The encoding of the video
    fourcc = int(reader.get(cv2.CAP_PROP_FOURCC))

    # Define the video output
    writer = cv2.VideoWriter(". /out.mp4", fourcc, fps, (width, height))

    have_more_frame = True
    while have_more_frame:
        have_more_frame, frame = reader.read()
        if have_more_frame:
            # Show
            cv2.imshow('video', frame)
            # delay
            cv2.waitKey(24)
            # Write the new video
            writer.write(frame)
    reader.release()
    writer.release()

前のコードを実行すると、次のようなエラーが発生することがあります。

True

Failed to load OpenH264 library: openh264-1.7.0-win64.dll
Please check environment and/or download library: https://github.com/cisco/openh264/releases

[libopenh264 @ 000000001e84abe0] Incorrect library version loaded
Could not open codec 'libopenh264': Unspecified error

Process finished with exit code 0

これは、エンコードライブラリがないためです。そのため、それが示唆するリンク先(https://github.com/cisco/openh264/releases)に行き、対応するバージョンをダウンロードしてください。 openh264の対応バージョンをダウンロードする場合は、ビット数を間違えないように注意してください。例えば、私のはPython, Windows用の64ビットなので、ダウンロードは openh264-1.7.0-win64.dll.bz2 <スパン このzipアーカイブ。ダウンロード後、pyファイルのあるディレクトリに解凍し、再度実行するとエラーになりません。

III. 動画保存失敗の理由

ほとんどの場合、エンコーディングやビデオの幅が書き込むフレームの幅と異なるために書き込みに失敗します。したがって、入力ビデオのエンコーディング(fourcc)を使用し、ビデオの幅を正しく設定するのがよいでしょう。処理後の画像のサイズがわからない場合は、画像のサイズを出力して、画像と同じサイズの動画を保存すればよい。