Mac でスクリーン動画を撮ったあとの処理方法のメモ。 作業は Ubuntu 24.04 server LTS 上で行っています。
といっても ffmepg と convert と bash しか使っていないので Mac でもそれらのツールが入っていれば 普通にできる話だと思う。
オプションなどは以前調べたメモをもとに書いています。 本当に意図したオプション指定ができているかは確認していません。
Mac上でスクリーン動画を撮ったファイルが demo.mov だったとして:
ffmpeg -i demo.mov -vsync 1 -r 10 image-%04d.png -y
もし、ffmpeg コマンドが無い場合は:
sudo snap install ffmpeg
これでカレントディレクトリに大量の image-*.png ファイルが作成されます。 PNG画像はコマごとになっているので、不要なコマがあれば削除します。 また、この段階でタイトルとかテロップを入れることで分かりや動画になります。
今度はこれを MP4 形式の動画として書き出します。結果は demo.mp4 に出力されます。
ffmpeg -r 20 -pattern_type glob -i "*.png" -c:v libx264 -pix_fmt yuv420p demo.mp4
オプションは意図通りなのかわかりません。とりあえず機能はしていますが。あしからず。
最初に -r 10 で PNG 書き出しして MP4 をつくるときに -r 20 にしているので、2倍速になります。 スクリーン動画は見る側にしてみたら少し早回しにしないと まどろっこしいので、たいていこの設定にしています。
あとは、この demo.mp4 を YouTube にアップするだけです。
ブログに貼るとかの場合は MP4 より Gif animation の方が都合が良い場合がある。
MP4 から GIF animation にするには:
ffmpeg -stream_loop 0 -i result.mp4 -r 10 demo.gif
これだけのことなのですが、たぶんそのままではメモリ不足でエラーになります。(当然環境に依存します。)
そもそも、気軽に見せたいので GIF animation にする場合がほとんどだと思うので Mac で撮ったスクリーン動画そのままの縦横サイズは大きすぎます。
そこで、コマごとに書き出していた PNG 画像をリサイズして小さく縦横サイズにしておきます。
convert コマンドを使えば:
convert -resize 320x src.png dst.png
もし convert コマンドが無い場合は:
sudo apt install imagemagick-6.q16
これだけの話です。320x とする指定することで幅が320ピクセルの画像(縦はおまかせ)になります。
ただし、PNG 画像ファイルの数が多いので、次のようなスクリプト(bash)を使うと便利。
conv.sh :
#!/bin/bash
list=`ls src/`
for file in $list
do
echo $file
convert -resize 320x src/$file $file
done
このスクリプトでは ./src/ 以下に PNG 画像が存在していることを想定しているので (ここまでの説明ではカレントディレクトリに PNG画像が入っている前提で説明してきているので)
mv *.png ./src/
などとして、./src/ 以下にすべての PNG 画像を移動した上で sh conv.sh として実行します。
これでカレントディレクトリに生成されたすべての PNG 画像は 320 ピクセル幅に縮小されているので、 この PNG から MP4 を経由して、GIF animation ファイル demo.gif を生成します。
ffmpeg -r 20 -pattern_type glob -i "*.png" -c:v libx264 -pix_fmt yuv420p tmp.mp4
ffmpeg -stream_loop 0 -i tmp.mp4 -r 10 demo.gif
なお -stream_loop 0 で 0 指定で無限ループです。 もし 1 を指定すれば一度だけアニメーションが実行されて止まります。
以上です。