画像処理」カテゴリーアーカイブ

コマンドラインでJPEGファイルのEXIF情報を取り除く

Webに写真を載せる時とかにEXIF情報は削除しておきたい。

以前はImageMagickのconvertコマンドで convert -strip とやっていたがどうやらこれは画像の再圧縮がかかるようだ(strip後の方がファイルサイズが大きくなったりする)。

ググったらそれっぽいStack Overflowの質問が出てきたのでメモしておく。

何種類か回答が寄せられているが、自分の環境にはexiv2を入れた覚えがあったのでexiv2の方法をやってみた。コマンドは

$ exiv2 rm (JPEGファイル)

となる。JPEGファイルは上書きされるので注意。

MacPortsを使っていればexiv2は $ sudo port install exiv2 で入るはず。

ffmpegを使って微速度動画を作るメモ

この記事では、連続撮影した静止画を動画に変換する方法について書く。状況としては、微速度撮影・タイムラプス撮影のように、カメラで写真を一定時間ごとに撮影したものを動画にしたい、というものを想定している。

ここで使うのはffmpegという、動画や音楽ファイルのフォーマットを変換するのに使われる無料のプログラムである。マウスで操作するようなGUIはついておらず、コマンドラインからコマンドを叩いて使う。ffmpegのインストール方法は割愛する。

この記事を書いている時点でのffmpegの最新版は2.2.1なので、ffmpeg 2.2.1の使い方について書く。おそらく、多少バージョンが違っても同じように使えるのではないかと思う。

まず、動画の各コマとなる静止画を用意する。適当にフォルダを作って、その中に使いたい画像をコピーする。静止画の形式はJPEGにしておく。ファイル名は連番になるようにする。

ターミナルを開き、先に画像ファイルを準備したフォルダに移動する。ffmpegコマンドの使い方はおおざっぱに言うと

ffmpeg [入力に関するオプション] -i (入力ファイル名) [出力に関するオプション] (出力ファイル名)

となる。以下、オプションの詳細について。

入力に関するオプション・入力ファイルの指定

  • -framerate (rate)
    • 入力ファイルを動画とみなす場合の、フレームレートを指定する。
    • 画像の場合25がデフォルト。つまり、1秒あたり25フレームということである。
    • (rate) は、整数、小数、分数、または名前で指定できる。詳しくは公式のドキュメント(英語)を参照。
  • -s:v (size) または -video_size (size)
    • 各コマのサイズ。
    • (size)(幅)x(高さ) の形で指定する。あるいは、 vgahd720 のような名前も使える。詳しくは公式のドキュメント(英語)を参照。
    • 指定しなかった場合は最初の画像から適当に判断される。
  • -start_number (n)
    • 入力ファイル名の連番を何番から始めるかを指定する。
  • -i (ファイル名)
    • 入力ファイル名、もしくはファイル名のパターン。
    • 入力ファイル名が IMG_nnnn.JPG という形をしていれば、パターンとしては IMG_%04d.JPG を指定する。
    • 詳しいパターンの指定方法は公式のドキュメント(英語)を参照。

出力に関するオプション・出力ファイル名

  • -r:v (fps)
    • 出力する動画のフレームレート(1秒あたりのフレーム数)を指定する。
    • (rate) は、整数、小数、分数、または名前で指定できる。詳しくは公式のドキュメント(英語)を参照。
  • -s:v (size)
    • 各コマのサイズ。
  • -b:v (bitrate)
    • ビットレート。大きな数値を指定する方が高画質になる。bpsで指定する。
    • k (103)や M (106)などの接尾辞も使えるようだ。
  • -vcodec (codec) または -codec:v (codec)
    • 動画のコーデックを指定する。mpeg4h264 など。利用できるコーデックはffmpeg -codecs で確認できる。
  • (ファイル名)
    • 出力ファイル名。ファイル形式は拡張子から適当に判断される。

オプションの一部は入力にも出力にも指定できる。入力と出力に異なるフレームレートを指定した場合、一部のコマが複製されたり取り除かれたりする。各コマのサイズは入力と出力どちらにも指定できるが、どちらに指定するとどう変わるのか筆者はよく分かっていない。

コマンドの実行例は、例えば

ffmpeg -framerate 24 -start_number 7836 -i 'IMG_%04d.JPG' -r:v 24 -b:v 10M -s:v 1080x720 -vcodec mpeg4 output.mov

となる。この場合、IMG_7836.JPG から始まる連番のファイルが処理対象となり、出力ファイルは output.mov となる。

ImageMagickの使い方に関する自分用メモ

自分で使ったときのメモ。備忘録。

加算合成・比較明合成

入力を1.jpg, 2.jpg, ..., n.jpg、出力をoutput.jpgとする。

加算合成:

$ convert 1.jpg 2.jpg ... n.jpg -background none -compose plus -flatten output.jpg

比較明合成:

$ convert 1.jpg 2.jpg ... n.jpg -background none -compose lighten -flatten output.jpg

 アニメーションGIFを作る

2つの画像が切り替わる(2コマ)アニメGIFを作りたい。

1コマ目をa.png, 2コマ目をb.pngとし、0.01*t 秒で1コマ目から2コマ目に切り替わるとする。繰り返しはしない。

$ convert -delay t -loop 1 a.png b.png output.gif

-loop 1-loop 0に変えると無限ループになる。詳細はこの辺とかを参照。