1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VisualStudio2017で、Python3/OpenCVを使って動画を加工する

Last updated at Posted at 2019-02-24

#はじめに
唐突に画像と動画を加工してみたくなり、VisualStudio2017でPython3/OpenCVを使ってみました。

この記事の続きです。
VisualStudio2017で、Python3/OpenCVを使って画像を表示する

#実装
##やったこと
###実装した処理
・動画を読み込む
・縦100px, 横200px を切り取る
・動画を表示
・動画を保存

※gif形式では動画の入出力ができなかったので、手動でavi形式とgif形式の変換を行いました。

###Before
sample_clip.gif

###After
sample_clip_after.gif

##サンプルソース

Sample.py
import numpy as np
import cv2

#任意のパスを指定
clip = cv2.VideoCapture("sample\path\sample_clip.avi")

#読み込んだ動画の情報を取得
clipFps = clip.get(cv2.CAP_PROP_FPS)
clipHeight = clip.get(cv2.CAP_PROP_FRAME_HEIGHT)
clipWidth = clip.get(cv2.CAP_PROP_FRAME_WIDTH)

#対応してないコーデックを指定すると、上手く動画が出力されない
codec = cv2.VideoWriter_fourcc(*'DIVX')

#出力する動画の情報を指定
editedClipHeight = 100
editedClipWidth = 200

#出力先の任意のパスを指定
outputPathAndFilename = 'sample\path\output.avi'

#出力する動画の解像度と指定した解像度がずれると、上手く動画が出力されない
clipWriter = cv2.VideoWriter(outputPathAndFilename, codec, clipFps, (editedClipWidth, editedClipHeight))

while(clip.isOpened()):
    ret, frame = clip.read()
    if ret == True:

        #左上を起点に、[縦100px, 横200px]を切り出す
        editedClip = frame[0:editedClipHeight,0:editedClipWidth]
        
        clipWriter.write(editedClip)
        cv2.imshow('SampleClip', editedClip)

    #[ q ]を押すと表示が終了する
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

clip.release()
clipWriter.release()
cv2.destroyAllWindows()

##はまったポイント
何も考えずに下記のソースをコピペしたら、動画が上手く保存できなかったので備忘。
動画を保存する — 動画を扱う — OpenCV-Python Tutorials 1 documentation

下記の現象が発生していましたが、設定しなおすことで解決しました。

ファイルは出力される。
しかし、再生しようとしても動画が流れない。
ファイルプロパティを確認すると、サイズが小さい。

他の解決策をご存知の方がいれば、教えていただきたいです。

###1. 対応していないコーデックを指定している

Sample.py
#対応してないコーデックを指定すると、上手く動画が出力されない
codec = cv2.VideoWriter_fourcc(*'DIVX')

環境によって利用可能なコーデックが異なるようです。

###2. 出力する動画の解像度と、VideoWriterで指定した解像度が違う

Sample.py
#出力する動画の解像度と指定した解像度がずれると、上手く動画が出力されない
clipWriter = cv2.VideoWriter(outputPathAndFilename, codec, clipFps, (editedClipWidth, editedClipHeight))

#参考資料
動画を扱う — OpenCV-Python Tutorials 1 documentation

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?