備忘録にて。
iPhoneのLivePhotos(mp4ファイル)から切り出して画像として使用したいときに、一括でjpg画像に変換してしまう方法。
OSはLinux mint20。
ffmpegを使用する
LivePhotosはシャッター前後1.5秒を含めた映像として記録できる機能(参考:Appleサポート)で、1秒60コマで保存されています。
LivePhotosの映像はmp4で保存されているので、ffmpegで1コマずつjpgとして書き出します。
ffmpegのインストール
今はsynapticからインストールできるようです。便利ですね。
ffmpegの公式にもダウンロードページがあります。https://www.ffmpeg.org/download.html
ffmpegコマンド
ffmpegでmp4からjpgを切り出す場合、1ファイルから約180枚の画像が生成されることになります。(1秒あたり60コマで、LivePhotosは3秒あるから。)
とりあえず基本的なコマンドは以下のようになります。(sample.mp4 をsample-xxx.jpg に変換)
cd 編集するディレクトリ
ffmpeg -i sample.mp4 sample-%03d.jpg
%03d をつけることで、001.jpg から999.jpgまで3桁の数字が連番でふられていきます。
ターミナルで上のコマンドを実行すると、sampple-001.jpgからsample-180.jpgまでが生成されます(実際には168ファイル生成されたので微妙な差が出る模様)
フレームレートを変更する
180枚も出力されるのは流石に面倒なので、1秒60コマのフレームレートを1秒5コマぐらいにしてみます。フレームレート変更には -r オプションを使用します。 -r 1 で1秒1コマ指定となります。
ffmpeg -i sample.mp4 -r 5 sample-%03d.jpg
実行してみると16ファイル生成されました。
ffmpegの一括実行
1ファイルずつ編集するのは大変なので、一括変更してしまいます。
for i in *.mp4; do ffmpeg -i "$i" -r 5 "${i%.}-%03d.jpg"; done