10
11

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.

【動画連結】OpenCVで動画の連結をやってみた♪

Last updated at Posted at 2019-01-02

OpenCVで動画連結してみた。
なかなか芽が出ないので、コマ切れになった動画を連結することとした。

やってみると、参考サイトがあり、ここから連結は簡単にできてしかも応用範囲も広そうなので、まとめておこうと思う。

コードは以下に置きました

OpenCV/combine_movie.py

これは、ほとんど参考のexport_movie.pyのままで、単に複数動画に拡張したものです。
【参考】
Python + OpenCV で雑コラ動画を作成する③ 雑コラ動画作成

コード解説

OpenCVだけで、やれます。
関数名をcombine_movie()としました。
複数ファイルは列挙しています。

# coding=utf-8
import cv2

def combine_movie():
    # 入力する動画と出力パスを指定。
    target1 = "kenbikyo_video_hatuga_60-3.mp4"
    target2 = "kenbikyo_video4450940952464.mp4"
    target3 = "kenbikyo_video4527173059250.mp4"

参考の通り、出力ファイルを定義します。
codecはウワンと同じMP4V,出力の拡張子は参考と同じとしました。
fps, int(width), int(height)を最初の元動画から取得します。
ここで、fpsをfps2とか、int(fps0.5)とすると、早回し、スロー再生ができます。

    result = "kenbikyo_combine.m4v" 
    # 形式はMP4Vを指定
    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')  

    #動画情報の取得
    movie = cv2.VideoCapture(target1)    
    fps    = movie.get(cv2.CAP_PROP_FPS)
    height = movie.get(cv2.CAP_PROP_FRAME_HEIGHT)
    width  = movie.get(cv2.CAP_PROP_FRAME_WIDTH)
    print(fps, int(width), int(height))
    
    # 出力先のファイルを開く
    out = cv2.VideoWriter(result, int(fourcc), fps, (int(width), int(height)))

ここでは3個の動画を順に読み込み・書き出しをします。
結合動画を意味する'comBined_movie'を重畳します。

    # 動画の読み込み
    for i in range(1,4):
        if i==1:
            movie = cv2.VideoCapture(target1)
            print(i)
        elif i==2:
            movie = cv2.VideoCapture(target2)
            print(i)
        elif i==3:
            movie = cv2.VideoCapture(target3)
            print(i)    

        # 最初の1フレームを読み込む
        if movie.isOpened() == True:
            ret,frame = movie.read()
        else:
            ret = False

        # フレームの読み込みに成功している間フレームを書き出し続ける
        while ret:
            cv2.putText(frame, 'comBined_movie', (400,400), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0,0,255), 2);
            
            # 読み込んだフレームを書き込み
            out.write(frame)

            # 次のフレームを読み込み
            ret,frame = movie.read()


if __name__ == '__main__':
    combine_movie()

思っていたより、案外簡単にできました。

連結動画

複数の顕微鏡動画を連結してスロー再生、早回し再生などしてみた♪
<img src="http://img.youtube.com/vi/pwBoF4kfeYs/0.jpg"

※画像をクリックするとYouTube動画につながります

まとめ

・OpenCVで動画の連結をやってみた
・fpsの値で再生速度を変更できる
※再生速度変更だけでもできます

・いろいろなバラバラ動画から、まともな動画が作れそうだ

10
11
2

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
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?