以下の内容はhttps://seinzumtode.hatenadiary.jp/entry/2025/01/14/143227より取得しました。


写真と動画のEXIF(作成日)を一括で更新する

Flickrからダウンロードした写真をGoogle photoにアップしたい。
Flickrからバックアップした写真のEXIFデータは正しく日付が割り当てられていないようだったので、以下のスクリプトで一括更新する。

import os
import re
import piexif
from PIL import Image

def extract_datetime_from_filename(filename):
    match = re.search(r"img_(\d{8})_(\d{6})", filename, re.IGNORECASE)
    if match:
        date_part = match.group(1)  # YYYYMMDD
        time_part = match.group(2)  # HHMMSS
        formatted_datetime = (
            f"{date_part[:4]}:{date_part[4:6]}:{date_part[6:]} "
            f"{time_part[:2]}:{time_part[2:4]}:{time_part[4:]}"
        )
        return formatted_datetime
    return None

def update_exif_datetime(image_path):
    filename = os.path.basename(image_path)
    datetime_original = extract_datetime_from_filename(filename)
    
    if not datetime_original:
        print(f"Failed to extract date/time from filename: {filename}")
        return
    
    try:
        image = Image.open(image_path)
        if image.info.get("exif",b"")==b"":
            exif_dict = {"0th": {}, "Exif": {}, "GPS": {}, "Interop": {}, "1st": {}, "thumbnail": None}
        else:
            exif_dict = piexif.load(image.info.get("exif", b""))
        exif_dict["Exif"][piexif.ExifIFD.DateTimeOriginal] = datetime_original.encode("utf-8")
        exif_dict["Exif"][piexif.ExifIFD.DateTimeDigitized] = datetime_original.encode("utf-8")
        exif_bytes = piexif.dump(exif_dict)
        image.save(image_path, "jpeg", exif=exif_bytes)
        print(f"Updated EXIF DateTimeOriginal to {datetime_original} for {filename}")
    except Exception as e:
        print(f"Error updating EXIF for {filename}: {e}")

# 使用例

import glob
import os
import subprocess

files = glob.glob('./*')

for image_path in files:
    #image_path = "img_20161119_143550_31237835410_o.jpg"
    #image_path = "img_20160509_143550_31237835410_o.jpg"
    update_exif_datetime(image_path)
|

動画の場合

import re
import subprocess

def extract_datetime_from_filename(filename):
    """
    ファイル名から日付と時刻を抽出する関数
    """
    match = re.search(r'vid_(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})', filename)
    if match:
        year, month, day, hour, minute, second = match.groups()
        return f"{year}:{month}:{day} {hour}:{minute}:{second}"
    return None

def update_exif_metadata(file_name, date_str):
    """
    ExifToolを使用してMP4のメタデータを更新する関数
    """
    subprocess.run([
        "exiftool",
        "-AllDates=" + date_str,  # すべての日付を更新
        "-CreateDate=" + date_str,  # 作成日
        "-ModifyDate=" + date_str,  # 修正日
        "-overwrite_original",  # 元ファイルを上書き
        file_name
    ])
    print(f"ファイル '{file_name}' のメタデータを {date_str} に更新しました。")

# メイン処理

import glob
import os
import subprocess

files = glob.glob('./*')

for file_name in files:

    #file_name = "vid_20160514_131310mp4_27756463831.mp4"  # ここに対象のMP4ファイル名を入れる
    date_str = extract_datetime_from_filename(file_name)
    
    if date_str:
        update_exif_metadata(file_name, date_str)
    else:
        print("ファイル名から日時を抽出できませんでした。")



以上の内容はhttps://seinzumtode.hatenadiary.jp/entry/2025/01/14/143227より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14