🍿

Macで動画ファイルを右クリック→2倍速に変換する(ffmpeg と Automatorを使って)

2023/04/02に公開

「画面を収録」で出来た.movファイルをシェアするために、小さく・速くしたい。しかも1クリックで。

という願いを叶えるべく一念発起した覚書きです。

結果はこんな感じ

Unsplashのアプリを紹介するようすを画面収録した動画、
アフターとビフォー。

用意するもの

  • ffmpeg(homebrewでMacにインストール)
  • Automator(Macのどこかに入ってます)
  • 適当な.movファイル(動画ならなんでも)

ffmpegのインストール

homebrewでやるのが簡単でした。

Automatorの内容

こんな感じです。

  1. Automatorでクイックアクションを作成。
  2. 変数(テキスト)を2つ用意。スクショ内では movieNamemoviePath を用意。
  3. 以下のアクションを movieNamemoviePath 用にそれぞれ追加。
  4. 選択されたファイル項目を取得
  5. 変数の値を取得
  6. シェルスクリプトを実行
  7. 変数の値を設定
  8. これらの変数の値を最後のシェルスクリプトに突っ込む。
  9. シェルスクリプトでffmpegを走らせる。(サンプルコードは下を見てね)
  10. 処理に少し時間がかかるので終了を知らせる通知音のシェルスクリプトもおまけで。

Automatorのシェルスクリプト

パスを取り出す

echo $1

ファイル名を取り出す

basename "$@"

変数使って動画の処理

  • PATHはhomebrewをインストールしてるディレクトリにパスを通しています。
  • echo は開発時の確認用です🤤この時$1で ファイル名、$2でパスが呼ばれてます。
  • -filter:vは動画用のフィルター。いろんなオプション指定しています。setptsで動画を1.25倍速、scaleで1280px幅に縮小。minterpolateでなんかええ感じに滑らかにしてるっぽいです()。
  • -filter:a は音声用のフィルター。atempoオプションで1.25倍速にしています。
  • -y で同じファイル名があったら上書き。
PATH="$PATH:/opt/homebrew/bin"
echo $1 ----- $2
ffmpeg -i "$2" -r 16 -filter:v "setpts=0.8*PTS,scale=1280:-2,minterpolate='mi_mode=mci:mc_mode=aobmc:vsbmc=1:fps=120'" -filter:a "atempo=1.25" -y "$1.mp4"

通知音を鳴らす

シェルスクリプト内に以下を書けばOKです。AppleScriptだともっと色々出来そう。アラートとか。
音は他にもあるので見てみてください。

afplay /System/Library/Sounds/Glass.aiff

おまけ: 変数使って動画の処理(gifアニメにする)

ファイル名やパスはよしなに。
なお webp や apng という選択肢もありましたが、両方ともSlackやローカルでプレビューされないのと、apngについてはめちゃ重いので諦めました🥺
環境さえ合えばwebpアニメが最高でした。
しかしながらここは伝統と格式のgifアニメで行きます。

シンプルな設定の場合
scale で 1/3サイズを指定→3.5MB。
scale で 1/4サイズを指定→14.5MB。
…あれ??🤔
どうも小さければ良いってもんじゃ無いようです。奥が深い〜

ffmpeg -i /Users/bissy/input.mov -filter:v "setpts=0.5*PTS,fps=10,scale=iw/4:-1" -y output-simple.gif

ちょっと重いけどいい感じ
scale で 1/4サイズを指定→2.8MB。
palettegen を使うことで色が最適化されて見やすくなります!
Zennは3MBより大きいファイルはアップできないんですが、2.8MBになったのでアップしてみました👏
「ここをこうするとこんなエラーが出るんですが〜」という連絡にはこれで十分ですね。

ffmpeg -i /Users/bissy/input.mov -filter_complex "[0:v]setpts=0.5*PTS,fps=10,scale=iw/4:-1,split [a][b];[a] palettegen [p];[b][p] paletteuse=dither=none" -y output.gif

────
 

ではみなさん良きMacライフを〜👋

参考資料

みなさまありがとうございました🙇‍♀️🫶

Automator/シェルスクリプトについて

Automatorには比較的慣れてたものの、シェルスクリプトは初めてで変数の取り扱いがよくわからなかったのでとても勉強になりました。

ffmpegについて

Discussion