静止画と動画のディレクトリにサムネイルとインデックスを付加

備忘録です。写真のJPEGファイル、動画のmp4ファイルをゴチャゴチャ置いたサーバのディレクトリにサムネイル表示の簡単なインデックスページを手動で楽に付ける方法。特殊なツールとしてはjheadとffmpegを使ってます。gcpやgcutはGNUバージョンのcpやcutなのでLinuxの人はg抜きのコマンド名(cpやcut)で置き換え。

ファイル名はそれぞれこんな感じを想定:

IS12Tの写真
WP_[シリアルナンバー].jpg という形。WP_005555.jpgなど。
IS12Tの動画
WP_[年月日]_[グリニッジ時]Z.mp4 という形。WP_20120816_071640Z.mp4 など。
E-P2の写真
P[月日][シリアルナンバー].JPG という形。P8161234.JPGなど。

まずはコピーしてくる

$ gcp -a ~/photo/2012_08_16/*.jpg .
$ gcp -a ~/photo/2012_08_16/*.JPG .
$ gcp -a ~/photo/2012_08_16/*.mp4 .

ファイル名をJPGに揃える

$ for i in WP_0*jpg ; do mv $i ${i/jpg/JPG} ; done

タイムスタンプを直しておく

$ for i in *.JPG ; do jhead -ft $i ; done
$ for i in *.mp4 ; do DATESTR=`echo $i | gcut --output-delimiter=' ' -c4-11,13-14,15-16,17-18 | awk '{DATE=$1; HOUR=$2 ; MIN=$3 ; SEC=$4; HOUR=HOUR+9 ; if (HOUR>=24) { HOUR=HOUR-24 ; DATE=DATE+1 } ; printf("%8d%02d%02d.%02d\n", DATE, HOUR, MIN, SEC)}'`; touch -t $DATESTR $i ; done

静止画のサムネイルを生成

$ for i in P*[0-9].JPG ; do convert -define jpeg:size=321x214 -resize 321x214 $i ${i/.JPG/s.JPG}  ; done # ← 3:2
$ for i in WP*[0-9].JPG ; do convert -define jpeg:size=320x240 -resize 320x240 $i ${i/.JPG/s.JPG}  ; done # ← 4:3

mp4のサムネイルを生成してタイムスタンプを合わせておく。

$ for i in WP_20??????_??????Z.mp4 ; do ffmpeg -i $i -f image2 -an -y -vframes 1 -s 320x180  ${i/mp4/JPG} ; touch -r $i ${i/mp4/JPG} ; done # 16:9

最後にサムネイル画像を並べただけのhtml生成。しつこくタイムスタンプを直したのは、ここで撮影順に並べたいため。

$ for i in `/bin/ls -tr *[0-9Z].JPG` ; do if [[ "$i" =~ W*Z.JPG ]] ; then echo "<a href=\"./${i/JPG/mp4}\"><img src=\"./$i\"></a>" ; else echo "<a href=\"./$i\"><img src=\"./${i/.JPG/s.JPG}\"></a>" ; fi ; done > index.html
$
$ chmod +r *

おわり。ちょー原始的。