動画で撮ったものも静止画で管理したいけど最初のフレームのサムネイルだとイマイチ。前から3割くらいの場所にしたいよー。という話の続き。
使ってるツール:
で、これらを使ったシェルスクリプトを書きました。
- 動画ファイルの任意の時間から静止画を抽出: vid2jpg
$ for i in /nobu/201?_??_??/*.{mp4,AVI} ; do vid2jpg -p 0.3 $i ; done
という感じで使います。処理の流れは:
- コマンドラインを解釈。-pオプションが指定されてればその倍率の時間を使う。ビデオファイル名は常に最後。
- ビデオの長さの0.1倍、または-pで指定された倍率の時間をtimecalcにより計算。
- 計算で出たポジションの静止画をffmpegにより抽出。
- 静止画のタイムスタンプをビデオファイルのタイムスタンプに合わせる。
- 静止画のExifの時間をjheadによりタイムスタンプ時間に合わせる。
という感じです。エラー処理は:
- ファイルが存在するか
- -pで指定された割合が0-1の範囲か
- ファイルがビデオファイルかどうか(ビデオファイルじゃなければtimecalcからエラーを貰ってexit)
- 変換後のJPGが既に存在しないか(存在してれば何もせず終了)
といったところ。
自分的にはこれで十分。やっぱUnix的に単一の機能をきっちり果たすツールを組み合わせるのが楽ですな。その文脈で言えば、timecalcはビデオファイルの情報を取るだけのツールと時間の計算をするだけのツールに分割すべきかも。