東雲めぐの配信を録画したいがために強引に自動録画する話


東雲めぐとは





かわいいですね。Showroomで平日7:30から生配信をしているんですが、何分朝が早いもので見逃してしまうことがあります。
Showroomにはアーカイブがないため、見逃したらおしまいです!

そんな悩みを解決するために自動で録画できるようにしたいと思います。
また、個人的な理由として、一週間程度海外へ旅行に行くことになっていたので追いかけるのが厳しそうだという背景もありました。




開発



前提として、

- 直近の週末にしばらく家を開ける事情があったため、残りの1,2日で開発を終えたい
- 急ぎのため、なるべく知っている言語と知識で完結させたい

だったので、手軽な感じで行こうと思いました。

要件としては、

- 毎日07:30、19:00にshowroomの配信を録画開始できていること
- 30分経過したら録画が終了すること
- 録画開始前にPCを起動し、録画終了後にPCをシャットダウンすること
- 録画されたファイルは確認できればどこに保存されていてもよい

といったところでしょうか。

そんな感じなので、初めは以下のように作ろうと思いました。

1. タスクスケジューラで指定の時間にwindowsを起動
2. OBSを起動する
3. マウスでのクリックをエミュレート(よく知らないけどたぶんできる
4. OBSの録画開始ボタンにカーソルを合わせてポチる
5. 終了時間が来たら停止ボタンを押して電源を切る

開発前に一番問題となりそうなマウス操作のエミュレートする部分から着手
さくっと調べたところpyautoguiというライブラリを使うか、win32apiを使用するかで実現できそうだった
pythonは少しだけど触ったことがあるのでpyautoguiを採用し、開発着手していきます。

開発メモ


以下開発時のメモを垂れ流します
seesaadでマークダウン記法が使えないので力尽きました

pyautoguiでコロンが*になってしまう問題の回避

- https://teratail.com/questions/79973

$pip show pyautogui
上記コマンドでpyautoguiのインストール先がわかるので、上記のサイト通りにコードを書き換える
キーボードがUS配列じゃないから起きる不具合っぽい?

pyautoguiで全角入力になってしまう問題

- 意味不明
- f8を入力することで半角に変換して回避

ブラウザが起動する前にクリックイベントが発火してしまう

- pyautoguiに用意されているPAUSEを使用してもブラウザが起動する前にクリックしてしまう
- 意味不明
- python側のsleep関数を使うことで回避
- このライブラリもしかしてバグ多い?

起動したアプリケーションをフルスクリーンにしたりできないっぽい

- win32apiなどを使えば出きるっぽいがいったん保留
- とりあえずブラウザとOBSを最大化してから終了しておけば、次回起動時もフルスクリーンで開いてくれるはず
- print(pyautogui.position());を使ってボタン位置を頑張って取得
- フルスクリーンになっていること前提でやる
- 右下に通知とか来たら失敗するからそのうち回避したい・・・

windowsのタスクスケジューラで、マウス操作やキーボード操作のエミュレートが意図した動作をしなかった

- firefoxを立ち上げようとするも、プロセスは存在するが画面にはでてこない謎の存在とかしてしまっていた
- pythonスクリプトだから動かないのかと思いDLLでマウス操作をエミュレートしてみたが同じようにダメだった
- ファイル作成スクリプトで動作確認したところ、.batファイル > pythonファイルは正常に呼び出されていた

Macへ逃げようかと模索

- 厳しい感じが出てきたのでmacでの作業に移行する
- 幸いpythonスクリプトで書いたのでちょっと修正すれば使いまわせる

macにpyautoguiを入れようとしたところでさっそくつまずく

- 以下のようなエラーが出てインストールに失敗する
- ImportError: No module named 'Quartz'
- Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/1k/0cqqr2m53qz8zvgyglm9sh_c681kyz/T/pip-build-g6epdbdu/pyautogui/
- ぐぐってみると以下の記事がでた
- https://medium.com/@tracy_blog/pyautogui-installing-on-mac-os-x-86e397428b3
- https://stackoverflow.com/questions/35991403/pip-install-returns-python-setup-py-egg-info-failed-with-error-code-1
- > Quartz is a dependency for PyAutoGui. Quartz is a package of frameworks for PyObjC which contains graphic APIs.
- なるほど
- これでインストールはできるようになった

Windowsで動かせそうな気配を感じたので戻る




できあがったもの



最終的にはこんな感じになりました。





最後に


いろいろ突貫で作ったので雑なつくりだったり、この記事自体も雑なつくりだったりですが、世に出すことが大事だということでとりあえず公開してみました。
旅行から帰ってきたら少しずつ直していきたいなあと思います。
最後まで見ていただきありがとうございました~

この記事へのコメント