モチベーション
Macのデスクトップに動画ファイルが追加されたら、自動的にGifを生成してみる - Qiita
この記事を読んで会社のwindowsPCでも同じことがしたいと思った。 Automatorの代替と言われるAutoHotKeyで何とか実現できないかと少し調べてみたけど、めんどくさそうだったので簡単そうなpythonに逃げた。 常駐するものやしなるべく軽くすべきなんやろうけどその辺あんまりわからん。
やりたいこと
Win + G
から呼べるゲームバーで保存した動画を自動でgifに変換するつかうもの
- ffmpeg
- watchdog
コード
from watchdog.events import FileSystemEventHandler from watchdog.observers import Observer import os import time import subprocess from logging import getLogger, StreamHandler, DEBUG CAPTURE_DIR = "<キャプチャした動画の保存先>" NEW_FILE_DIR = "<gifの保存先>" CMD_TEMPLATE = "ffmpeg -i \"{0}\" \"{1}\"" logger = getLogger(__name__) handler = StreamHandler() handler.setLevel(DEBUG) logger.setLevel(DEBUG) logger.addHandler(handler) logger.propagate = False class ChangeHandler(FileSystemEventHandler): def on_created(self, event): logger.debug('[{0}]'.format(event.event_type) + str(event)) file_path = event.src_path file_name = os.path.splitext(os.path.basename(file_path))[0] file_ext = os.path.splitext(file_path)[1] if file_ext != ".mp4": return gif_file_path = NEW_FILE_DIR + file_name + ".gif" if os.path.exists(file_path): while True: try: size = os.path.getsize(file_path) time.sleep(1) if os.path.getsize(file_path) == size: break except OSError: time.sleep(1) subprocess.call(CMD_TEMPLATE.format(file_path, gif_file_path), shell=True) def on_modified(self, event): logger.debug('[{0}]'.format(event.event_type) + str(event)) def on_deleted(self, event): logger.debug('[{0}]'.format(event.event_type) + str(event)) def on_moved(self, event): logger.debug('[{0}]'.format(event.event_type) + str(event)) observer = Observer() observer.schedule(ChangeHandler(), CAPTURE_DIR, recursive=True) observer.start() while True: time.sleep(3)
こまったこと
感想
コピペ駆動開発はほんまあかんのわかってはいるんやけどやめられんの悲しい
参考
Python WatchDog - フォルダの監視を行う - PythonとRPAで遊ぶ
ファイルの更新をきっかけにコマンド実行 (python編) - Qiita
ログ出力のための print と import logging はやめてほしい - Qiita
おわり