Alfred + Pythonで動画をgifアニメーションに変換するワークフローを作ってみた
モチベーション
マークダウンで何かを書く時に、動画を載せたいが対応していないのでGifアニメーションに変換して載せたい時があります。
そんな時、いちいち外部サービス開くのも面倒ですし、知らないサービスにアップするのもなんか嫌だって人もいると思います。
そこで、自分で変換しちゃおう!というわけです。
作ったもの
- pythonで動画をgifに変換するスクリプト
- Alfredのワークフロー
pythonで動画をgifにする
今回はMoviePyというライブラリを使用します。
コード
import sys
from moviepy.editor import *
args = sys.argv
input_path = args[1]
name = args[1].split('.')[0]
output_path = name + ".gif"
clip = VideoFileClip(input_path)
clip = clip.resize(width=600)
clip.write_gif(output_path, fps=6)
clip.close()
コマンドラインで実行して、引数から変換したい動画ファイルを指定する様にしました。
スクリプトファイルと動画を同じ階層に置いておくことで、tabでファイル一覧を見ながらファイル名を入力できるので少し楽です。
python script.py hoge.mp4
このまま実行しても動きますが、いちいちターミナルを起動しないといけませんし、ファイル名を入力するのも面倒です。
そこで、みんな大好きAlfredから実行してみよう!と言うことです。
gif変換のコードは下記記事を参考にしました。
Alfredでスクリプトを実行する
AlfredからWorkflowsを開き、新しいワークフローを作成します。
workflowの中はシンプルで、File Filter
とTerminal Command
だけです。
File Filter
File Filterの中身はこんな感じです。
Basic Setup
FileTypes
は検索対象の種類などを設定できます。
これで、.mp4と.movだけ表示されます。
手動で設定をしなくても、ファイルをドラッグ&ドロップすると勝手に設定してくれるので楽ちんです。
お好みで変えてください。
Scope
こちらもドラッグ&ドロップで検索対象のフォルダを選択することができます。
変換したい動画を入れる場所を固定にすればファイルの整理もできて綺麗に管理できると思います。
これで、Alfredからキーワードを打つとタイトルが表示されるので、スペースで検索するとこんな感じに動画ファイルの一覧が表示される様になります。
一覧が表示されない人は*
(ワイルドカード)を入力してみてください。
Terminal Command
Terminal Commandの中身はこんな感じです。
絶対パスでcdをして、 先ほど作成したscript.pyを実行します。
ここにある{query}
は、Alfredで選択したファイル名が取得できます。
なのでコマンド的には、python3 script.py test.mp4
みたいになるわけです。
あとは、pythonが動いて動画をgifに変換してくれます。
ワークフローをつなげる
File Filter
をクリックして、出っ張りをドラッグしてTerminal Command
につなげます。
実行してみる
こんな感じになります。
モザイクをかけていますが、ターミナルが開かれて動画の変換進捗がプログレスバーでわかる様になっていますね。
終わるとターミナルが閉じます。
これで、簡単に動画をgifアニメーションに変換することができました。
ドキュメントを書いたり、技術記事を書きまくれますね!!
余談
exitを書いてもターミナルが閉じない人は、ターミナルの環境設定から、シェルの終了時をウィンドウを閉じるに変えてみてください。
Discussion