アニメを自動キャプチャしてみた

自動キャプチャが欲しい

なんで自動キャプチャが欲しいか?

それはブログを書くときにいちいちキャプチャボタンを押すのがめんどくさかったから。

というか、スクショを逃したときに巻き戻すのもめんどくさいし、自動で保存して欲しい。

Pythonで実装した

import cv2
import os
import time

cap = cv2.VideoCapture(0)

# GC550は解像度が一致しないと表示されない
cap.set(3, 1920)
cap.set(4, 1080)

# 初期設定
dir = "./capture"
ext = ".png"

os.makedirs(dir, exist_ok=True)

f = 0
while True:
    ret, frame = cap.read()
    cv2.imshow('Auto Capture', frame)
    if f == 180:
      name = str(int(time.time())) + ".png"
      path = os.path.join(dir, name)
      print(path)

      cv2.imwrite(path, frame)
      f = 0
    # ESCキーが押されたら終了する
    k = cv2.waitKey(1)
    if k == 27:
      break
    f += 1
cap.release()
cv2.destroyAllWindows()

思ったより簡単に実装できました。

意図としては180フレーム(3秒)に1回のペースで自動でスクリーンショットをとってくれます。

自動スクリーンキャプチャ

まあこれでも結構逃してしまうのが気になる方は1秒とか2秒にすればいいと思います。

ただ、1枚がだいたい2MBくらいあるので30分アニメが1800秒なことを考えると600枚キャプチャすると1.2GBになります。

最終的にJPGに変換するとはいえ、一時的に1.2GBになるのはなんだかなあという気もしますね。

Webpで実装してみた

Googleの示した事例では、ファイルサイズは非可逆圧縮モードで(同一画像、同等画質の)JPEGと比較して25-34%小さくなり、可逆圧縮モードでPNGと比較して28%小さくなるとしている。また22%のファイルサイズ増加でアルファチャネルを追加できるとしている。可逆圧縮は、エンコードはPNGよりも時間がかかるが、デコードはPNGよりも高速であると主張している[6]。一方、2013年10月に行われたMozillaの比較調査では、旧来のJPEGと大して変わらないという結果となった[7]。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

PythonはWebpに対応されているらしいので、そういう風に改良するという手もあると思います。

ただ、WebpはChromeとOpera以外は対応していないので、Webpとして保存してしまうとそのままでは使いみちがないので困ります。

Webpへの変換方法についてはこの記事をどうぞ。