braintag

公開してしまう備忘録

ファイル名からタイムスタンプを変更するpythonスクリプト

Google フォトに保存してある動画の日付がおかしい。
少しづつズレている。

ちょっと調べてみると、Googleフォトで表示される日時はあくまでもファイルの更新日時らしい。
そのため、動画を取り込んだ日時が、Googleフォトで表示される日時になってしまう。

これをどうにか、動画を記録した日時=Googleフォトの日時にしたい。

ファイル名には録画した日付が入っているので、これを、タイムスタンプに反映すれば良いのだけれども、
ファイル名からタイムスタンプに反映するフリーソフトが見つからない。

しょうがないので作ってみた。

ファイル名からタイムスタンプを変更するpythonスクリプト(python3.6で動作確認済み)

#coding:utf-8
import sys
import os
import re
import glob
import time
from datetime import datetime

print ("filename2timestamp")
print (os.getcwd())

pattern = r"^(\d{4})[^\d]*(\d{1,2})[^\d]*(\d{1,2})[^\d]*(\d{1,2})[^\d]*(\d{1,2})(?:[^\d]*(\d{1,2})){0,1}"

for x in glob.glob("*.*"):
sys.stdout.write(x + " -> ")
matchOB = re.match(pattern , x)
if matchOB:
atime = mtime = time.mktime*1,int(matchOB.group(2)),int(matchOB.group(3)),int(matchOB.group(4)),int(matchOB.group(5)),int(matchOB.group(6)), 0, 0, -1))
os.utime(x, (atime, mtime))
print (datetime.fromtimestamp(os.stat(x).st_mtime))
else:
print ("unmatch")

これを保存し、動画があるローカルのディレクトリで実行すれば、ファイル名にある日付情報がファイルの更新日時、アクセス日時に反映される。
ファイル名の形式は、なんらかの文字で区切ってあれば認識される。
数値のみであれば、"20130901110202"という風に、ちゃんと4桁、2桁で別れていればOK。

実際やってみるとフォルダたくさんあって面倒くさいのでアプリ化しようかなぁ。

*1:int(matchOB.group(1