Menyimpan Sebuah Video

Ketika menangkap sebuah video, prosesnya dilakukan frame demi frame dan kita dapat menyimpan video tersebut. Untuk image, cukup sederhana, dengan menggunakan cv2.imwrite().

Dalam kasus ini, kita membuat sebuah obyek VideoWriter. Kita harus menentukan nama file, misal output.avi. Selanjut, kita menentukan kode FourCC, lalu jumlah frame per detik (fps) dan ukuran frame yang dilewatkan. Dan yang terakhir, flag isColor. Bila bernilai True, encoder bekerja pada frame berwarna, sementara bila False, bekerja pada frame grayscale.

FourCC adalah kode 4-byte yang digunakan untuk menentukan video codec. Daftar codec yang available dapat ditemukan di fourcc.org. Berikut adalah beberapa codec yang bekerja dengan baik:

  • Di Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID is more preferable. MJPG results in high size video. X264 gives very small size video)
  • Di Windows: DIVX (More to be tested and added)
  • Di OSX : (I don’t have access to OSX. Can some one fill this?)

Kode FourCC dilewatkan demikian: cv2.VideoWriter_fourcc(‘M’,’J’,’P’,’G’) atau cv2.VideoWriter_fourcc(*’MJPG) untuk MJPG.

Berikut adalah sebuah contoh, menangkap gambar dari sebuah kamera, membalik frame secara vertikal dan menyimpannya:

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv2.flip(frame,0)

        # write the flipped frame
        out.write(frame)

        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()

Untuk kelas pelatihan Pemrograman dan Aplikasi Image Processing menggunakan Raspberry Pi atau PC, silahkan menghubungi:

NEXT SYSTEM
Robotics Learning Center
ITC Kosambi F2
Jalan Baranang Siang 6-8
Bandung 40112
Tel. (022) 4222062, (022) 70775874