ffmpegというソフトを使って連続写真を動画にするのがやりたかったのです。
結論を知りたい人はいちばん下の◎をみてください。
MacでスマホのSDカードに入った写真をうまくUSBでコピーできず、
Flickr Uploadというアプリでアップロードしたのですが、
kimg2150_23977558372_o.jpg
とかそういうファイル名になってしまっていてkimgNNNNの部分は数字なのに後ろに色々ついてしまってかなり面倒なことになってしまった。
そこから色々試行錯誤して、
○まず、__oというのが邪魔なので
http://uguisu.skr.jp/Windows/find_xargs2.html
を参考に変数展開を使って、_o.jpgをとって、.jpgをつけなおすことで、結果として_oをとるみたいな。
(コマンドは全部対象の画像ファイルが入っている状態で、実行。)
find * -maxdepth 0 -name "*.jpg" -print0 | while read -r -d '' file; do mv "$file" "${file%%_o.jpg}.jpg"; done
○次に、連番になってるのはIMGとかついてていいんだと思って、
最初の7文字だけとる。
for f in *.jpg
do
foo=${f}
foo=${foo:1:7}
mv $f $foo.jpg
done
で、実はimgとかいらないので
for f in *.jpg; do
mv $f ${f#img};
done
さらに、ここまできて、ffpmegの入力は0001.jpgのように1から始まる連番でないといけないということに気づく。
いまの状態では
2034.jpg
2035.jpg
2036.jpg
2037.jpg
:
:
みたいなものなので、全部1からふりなおし(ただしゼロ埋め)しないといけない。
x=1;
for f in *.jpg
do
mv $f $(printf "%04d.jpg" $x)
x=$((x+1))
done
○回転(jpegtran) (ひっくり返ってた時のみ)
たぶんこれはスマホで撮っていると気がつかないうちに上下逆になってたりすると思います。
逆になっている画像はjpegtranなるものを使って180反転。
http://robotics.usc.edu/~ampereir/wordpress/?p=702
このjpegtranは標準出力に画像のバイナリを出力するようなのでリダイレクトはつけないといけないみたいです。
for f in *.jpg
do
foo=${f}
foo=${foo:1:4}
jpegtran -rotate 180 --copy all $f > $foo.jpeg
done
◎結局、、これ一発でよかったんだ・・・
x=1;
for f in *.jpg
do
foo=${f}
foo=${foo:4:7}
mv $f $(printf "%04d.jpg" $x)
x=$((x+1))
done
コメント
コメントを投稿