🎬

Alfred + Pythonで動画をgifアニメーションに変換するワークフローを作ってみた

2022/10/15に公開

モチベーション

マークダウンで何かを書く時に、動画を載せたいが対応していないのでGifアニメーションに変換して載せたい時があります。

そんな時、いちいち外部サービス開くのも面倒ですし、知らないサービスにアップするのもなんか嫌だって人もいると思います。

そこで、自分で変換しちゃおう!というわけです。

作ったもの

  • pythonで動画をgifに変換するスクリプト
  • Alfredのワークフロー

pythonで動画をgifにする

今回はMoviePyというライブラリを使用します。

コード

script.py
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変換のコードは下記記事を参考にしました。
https://self-development.info/moviepyを使ってpythonで動画をgifアニメに変換する/

Alfredでスクリプトを実行する

AlfredからWorkflowsを開き、新しいワークフローを作成します。

workflowの中はシンプルで、File FilterTerminal 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