TL;DR
こんなシェルでやってます
#! /bin/zsh
INPUT_FILEPATH=$1
OUTPUT_FILEPATH=$2
CRF=$3
SCALING_FACTOR=$4
if [ $# -ne 4 ]; then
echo "引数は4つ指定してください(input_path, output_path, crf, scaling_factor)"
fi
ffmpeg -i ${INPUT_FILEPATH} -crf ${CRF} -vf "scale=trunc(iw*${SCALING_FACTOR}/2)*2:trunc(ih*${SCALING_FACTOR}/2)*2" ${OUTPUT_FILEPATH}
呼び出す時は ./scripts/ffmpeg.sh 画面収録xxxx.mov out.mp4 30 0.5
とか。
これは何
Macの標準で付属している画面キャプチャ(Command+Shift+5)はネイティブ解像度、かつH.264ではあるものの圧縮率がかなり低い形式のため、1分尺でも画面全体を収録すると200MBを超える。
開発中のアプリの動作報告やその他キャプチャをした後、Windowsの時はさっと変換するユーティリティツールがあったのだが、Macでは丁度良いものがなかったのでffmpegで変換するスクリプトを運用する。
ハウツー
(homebrewを入れて) brew install ffmpeg
でffmpegをインストールした後、冒頭で紹介したシェルを適当なディレクトリ(~/scripts/とか)に配置してコマンドを打つだけ。
画面全体だと解像度が余剰になるため、 SCALING_FACTOR
という変数で拡大倍率を指定する(半分の解像度にしたい場合は 0.5
とする)。CRFは30でいい。Slackには何でも添付できるからといってクソ重い画面共有動画を貼り付けるのは地味な嫌がらせと受け止める人も多いので気をつけましょう。
追記
AppleScript(Windowsで言うパワーシェルみたいなやつ)で画面収録を起動出来るらしく、「画面週力を起動」「screenCaptureのプロセスを監視しつつ、その間fswatch等で特定ディレクトリを監視して、新たにmovファイルが書き出されたら自動的に変換」みたいなのを実現できそうなものの、実装がだるそうなのとAppleScriptを既存のショートカットにバインドするのも面倒くさそうなので辞めた。もっとスマートな方法があれば教えて下さい。
エンジニアとして働く90年生まれ。Web系技術を追っかけたり、PCガジェットや自転車いじりが趣味。オーディオオタク。