🐷

Macで録画したmovファイルをgifファイルに自動変換する(bash/fish)

2022/12/19に公開

はじめに

zennやqiitaに動画を上げる場合、macユーザーだと手元で録画した動画を、オンラインでの変換か ffmpeg を利用して変換されている方が多いのではないでしょうか。
毎回、コマンドを打ったり、webを立ち上げるのが面倒だったので、録画したら自動で、gifファイルに変換できるようにしました。
解説では、fishを利用しています。 bashは、こちらを参照してください。

録画後にデスクトップへの配置を検知してgifに変換する

Macの標準機能を利用して録画すると、Desktopに 画面収録 2023-1-1 11.11.11.mov のような
ファイル名で mov ファイルが出力されます。ファイル出力を検知して、検知したファイルが、movであればgif に変換して同ディレクトりに出力します。

準備

fswatchffmpegをインストールする

brew install fswatch
brew install ffmpeg

以下のファイルを任意のフォルダに作成します。
fswatch でデスクトップを監視して、拡張子が .mov の場合に、 ffmpeg を呼び出して git ファイルを作成します。
ffmpeg のパラメータはお好みに合わせて変更してください。

watch_desktop.sh
#!/opt/homebrew/bin/fish

fswatch -e ".*" -i ".mov" ~/Desktop | while read filePath;
	set replacedFilePath (string replace .mov .gif $filePath)
	if test -e $filePath
	    if test -e $replacedFilePath
		echo 'exists.'
	    else 
		echo 'not exists.'
		ffmpeg -i "$filePath" -r 30 -vf scale=680:-1 "$replacedFilePath"
		osascript -e "display notification \"$replacedFilePath\" with title \"Conversion to gif completed.\" sound name \"default\""
	    end
	end
end

if test -e $replacedFilePath としているのは、fswatchで監視していると、録画して作成されてmovファイルが2回検知してしまうためです。(なぜかは分からないです。詳しい人教えてください。)

今回は、ログイン時に起動するようにしたいので、command ファイルを作成します。

/{シェルを格納したディレクトリまでの絶対パス}/watch_desktop.sh

ここで、忘れずに実行ファイルと command ファイルに実行権限をつけてください。

chmod 755 watch_desktop.sh
chmod 755 watch_desktop.command

command をログイン時の項目として登録してください。
ログイン項目

再起動して録画をしてみてください。gifファイルが作成されると思います。

変換完了を通知する

このままだと、作成できているか分かりにくいので、通知するようにしたいと思います。
AppleScriptを利用して通知します。

以下の、行を追加します。

watch_desktop.sh
     ffmpeg -i "$filePath" -r 30 -vf scale=680:-1 "$replacedFilePath"
+    osascript -e "display notification \"$replacedFilePath\" with title \"Conversion to gif completed.\" sound name \"default\""

今度は、gifファイル変換後に、通知されるようになりました。
以下のようにMacの右上に通知されればOKです。

参考

https://github.com/emcrisostomo/fswatch
https://github.com/FFmpeg/FFmpeg
https://gist.github.com/activeguild/d649989c1860c076f2d2052a7875f8d1
https://gist.github.com/activeguild/c28d7e2f2ac859c150bd294daea3f74e
https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW224

Discussion