備忘録です。写真の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 *
おわり。ちょー原始的。