memorandums

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

exiftoolではmpgファイルのExif情報は変更できません

もういいって感じかと思いますが、作業ログなので。。。

昨日、以下を書きました。

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

これまではmp4が対象ファイルだったのですが、変換対象にmpgファイルがあることがわかり。。。調べるとタイトルの通りだったんですね。。。ちなみに情報の取得はできます。

うーん。。。困った。

とりあえず、手元のmpgファイルをGoogle Photoにアップするとファイル作成日時を採用するようでした。でも、exiftoolでは変更できない。。。困った。

動画フォーマットなんてこの際どうでもいいので、handbreakでmp4に変換して、そのあと昨日のツールを適用することにしました。

面倒なので、上記の作業を一緒にしたスクリプトを作りました。はい。

HandBreakCLIをHandBreakのサイトから入手して、/usr/local/binあたりに入れて、それを使いました。というか私はいつも使っています。スマホで撮影した動画なんかをそのままアップするとアップロード時間がかかるので小さくして送るときに使っています。

SRC_EXT = ['mpg','MPG']
DIST_EXT = 'mp4'
SRC_EXT.each {|ext|
  Dir::glob('*.' + ext).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
      dist = src.sub(ext, DIST_EXT)
      m = '01' if m == '00' #特殊処理(ファイル名の月が00のときに強制的に01にする)
      d = '01' if d == '00' #同情じゃなくて同上
      `HandBrakeCLI -i #{src} -o #{dist} --preset="iPhone & iPod touch"`
      `exiftool -overwrite_original -CreateDate='#{y}:#{m}:#{d} 12:00:00' -ModifyDate='#{y}:#{m}:#{d} 12:00:00' #{dist}`
      t = Time.mktime(y.to_i,m.to_i,d.to_i,12,0,0)
      File::utime(t,t,dist)
    end
  }
}

こればっかりやっているわけではないのですが。。。やってる感じですね。ブログだけ見ると。恥ずかしい。。。