連番ではないJPEGファイルからffmpegでタイムラプス動画を生成する

PC/デジモノ

まえおき

タイトルの通りです。

ffmpegを使うと静止画ファイルをつないだタイムラプス動画を作ることができますが、検索してもほとんどの解説は連番jpegファイルを動画ファイルにまとめる方法しか紹介されていません。

ここでは、特定のディレクトリに格納されている画像ファイルをリネーム操作なしで連結してタイムラプス動画を作成する方法(スクリプト)を紹介します。

大まかな方法としては、指定したディレクトリのファイルリストを作成しffmpegに渡す、というものです。
なお、Linuxのbashスクリプトになります。ご了承ください。

方法

#!/bin/bash
cd `dirname $0`

SRC_DIR="/mnt/image/source/*"
OUTPUT="timelaplse.mp4"
FILE_LIST="flist.txt"
#rm $FILE_LIST

for filepath in $SRC_DIR; do
    echo "file "$filepath >> $FILE_LIST
done

ffmpeg -r 30 -safe 0 -f concat -i $FILE_LIST -r 30 -an -vcodec libx264 -pix_fmt yuv420p $OUTPUT

解説

/mnt/image/source/
ディレクトリ以下のファイルのリストを作成し、flist.txtに保存しています。flistは追記していくので都度削除が必要です。(1発目は対象のファイルリストがないのでエラーになります。なのでここではコメントアウトしています。必要に応じてコメントアウトを外すなりif文で回避するなりして下さい)
また、ファイルの並び順はlinuxの気分なのでこれでダメなら連番にした方が早いかもしれません。大抵はこのままでうまくいきます。

ffmpegのオプション”-safe 0 -f concat -i $FILE_LIST”
ファイルリストからffmpegに読み込ませるためのおまじないです。今回は画像を指定しましたが、読み込ませるファイルが動画ファイルでも連結してくれます。
その他のオプションは各自のお好みで。

以上、参考まで。

1日1問、半年以内に習得 シェル・ワンライナー160本ノック Software Design plus

1日1問、半年以内に習得 シェル・ワンライナー160本ノック Software Design plus

上田 隆一, 山田 泰宏, 田代 勝也, 中村 壮一, 今泉 光之, 上杉 尚史
3,450円(09/16 23:43時点)
発売日: 2021/09/22
Amazonの情報を掲載しています

コメント