新しいスクリプトによる課題解決
背景
大量のjpeg画像を月毎の動画に変換する件。これを月初に行うと大量のファイル操作が必要となり、シェルの限界を超えてしまう事態が生じた。ところで、撮影枚数が多いカメラは日毎のビデオ化の作業も実施しているのだ。そこで、月初は日毎の動画ファイルを結合する作業に変更することにした。
この様な運営方法に変更することにより、月毎の作業においてファイル数が30を超えることがなくなる。
調査及び解決方法
ffmpegは高機能なのだが、オプションが複雑で容易に使うことが難しい。色々検索をして調べるとjpeg画像のようにワイルドカードで動画ファイルをコマンドラインで指定することは出来ないようだ。そこで、現状のスクリプトでは画像ファイルのファイル名を通し番号に変更するのに用いているawkを利用して結合したい動画ファイルを記述したテキストファイルを作成することにした。次いで、このファイルに基づきffmpegで動画を結合する。
1 2 |
ls | awk '{printf"file %s\n", $0}' > video_list.txt ffmpeg -f concat -i video_list.txt -c copy output.mp4 |
実際には作業用フォルダの作成、対象ファイルの移動、上記コマンドの実行。出力されたファイルの移動、作業用フォルダの消去をスクリプトに記述して、cronに登録して運用することになる。