memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

ファイル名から日付情報を取り出してExif情報を書き換えるrubyスクリプト

少し前に以下のエントリーを書きました。

ファイル名から日付情報を取り出してファイル更新日付にセットするrubyスクリプト - memorandums

Google Photoに動画(mp4)をアップするときに、意図した日付にならず(撮影した動画ファイルのサイズを小さくするためにhandbreakで編集して。。。なのでファイル更新日付等が変わってしまい。。。)、そのせいでうまくいかないと思っていました。それで上記のスクリプトを作ったよ、ということでした。

しかし。。。これではうまくいかないファイルが現れました。よく調べもしていなかったのですがmp4にもExif情報があるようで、ファイル作成・更新日付ではなく、やはりExif情報を参照しているようでした。

そこで、上記のスクリプトを書き換えて以下のようにしましたよ、という報告です。こちらはうまくいきました。

Dir::glob('*.mp4').each {|src|
  y = src[0, 4]
  m = src[4, 2]
  d = src[6, 2]
  if y =~ /\A-?\d+\Z/ and m =~ /\A-?\d+\Z/ and d =~ /\A-?\d+\Z/ then
    `exiftool -overwrite_original -CreateDate='#{y}:#{m}:#{d} 12:00:00' -ModifyDate='#{y}:#{m}:#{d} 12:00:00' #{src}`
    t = Time.mktime(y.to_i,m.to_i,d.to_i,12,0,0)
    File::utime(t,t,src)
  end 
}

1行追記されていると思います。Exif情報を書き換えるRubyライブラリもあるようでしたら、今回はexiftoolというコマンドをbrewでインストールして使いました。

なので、まず、exiftoolをインストールする必要があります。Homebrewが導入済みであることが前提です。

brew install exiftool

あとは、上記をa.rbなど適当な名前をつけて保存して、mp4ファイルが入っているフォルダにa.rbをいれて、ruby a.rbなどと実行すれば一気に更新できます。

とりあえず。