macOS Sequoia - 写真のサムネイル画面で作成日表示が正しくない
Mac OS をSequoiaに変えてから起こったことです.
* タイトルを変更しました。 Apple Inc.
Mac mini, macOS 15.0
Mac OS をSequoiaに変えてから起こったことです.
* タイトルを変更しました。 Apple Inc.
Mac mini, macOS 15.0
コードをベタベタ貼るもどうかと思いましたが、需要が多そうなのでポストしますね。
以下は EXIF 情報の DataTimeOriginal を取得して、ファイルの作成日と変更日をセットする AppleScript です。
exiftool コマンドを使わない方法です。
作り方: スクリプトエディタに下記のコードをコピペして保存
使い方: スクリプトエディタから実行
# コード
use AppleScript version "2.7"
use scripting additions
use framework "Cocoa"
property OSX : current application
property nil : missing value
on run
set uti to "public.jpeg"
set msg to "JPEG ファイルを選択してください (複数選択できます)"
set args to choose file of type uti with prompt msg with multiple selections allowed
repeat with f in args
set filemanager to OSX's NSFileManager's defaultManager()
set fpath to f's POSIX path
set odate to get_odate(fpath)
if odate is not nil then
set new_attrs to {NSFileCreationDate:odate, NSFileModificationDate:odate}
set {res, err} to (filemanager's setAttributes:new_attrs ofItemAtPath:fpath |error|:(reference))
if not res then
error err's localizedDescription() as text
end if
end if
end repeat
end run
on get_odate(fpath)
set odate to nil
set rep to OSX's NSBitmapImageRep's imageRepWithContentsOfFile:fpath
if rep is not nil then
set exif to rep's valueForProperty:"NSImageEXIFData"
if exif is not nil then
set odate to exif's objectForKey:"DateTimeOriginal"
end if
end if
if odate is not nil then
set df to OSX's NSDateFormatter's alloc()'s init()
set df's locale to OSX's NSLocale's localeWithLocaleIdentifier:"en_US_POSIX"
set df's dateFormat to "yyyy:MM:dd HH:mm:ss"
set odate to (df's dateFromString:odate)
end if
return odate
end get_odate
コードをベタベタ貼るもどうかと思いましたが、需要が多そうなのでポストしますね。
以下は EXIF 情報の DataTimeOriginal を取得して、ファイルの作成日と変更日をセットする AppleScript です。
exiftool コマンドを使わない方法です。
作り方: スクリプトエディタに下記のコードをコピペして保存
使い方: スクリプトエディタから実行
# コード
use AppleScript version "2.7"
use scripting additions
use framework "Cocoa"
property OSX : current application
property nil : missing value
on run
set uti to "public.jpeg"
set msg to "JPEG ファイルを選択してください (複数選択できます)"
set args to choose file of type uti with prompt msg with multiple selections allowed
repeat with f in args
set filemanager to OSX's NSFileManager's defaultManager()
set fpath to f's POSIX path
set odate to get_odate(fpath)
if odate is not nil then
set new_attrs to {NSFileCreationDate:odate, NSFileModificationDate:odate}
set {res, err} to (filemanager's setAttributes:new_attrs ofItemAtPath:fpath |error|:(reference))
if not res then
error err's localizedDescription() as text
end if
end if
end repeat
end run
on get_odate(fpath)
set odate to nil
set rep to OSX's NSBitmapImageRep's imageRepWithContentsOfFile:fpath
if rep is not nil then
set exif to rep's valueForProperty:"NSImageEXIFData"
if exif is not nil then
set odate to exif's objectForKey:"DateTimeOriginal"
end if
end if
if odate is not nil then
set df to OSX's NSDateFormatter's alloc()'s init()
set df's locale to OSX's NSLocale's localeWithLocaleIdentifier:"en_US_POSIX"
set df's dateFormat to "yyyy:MM:dd HH:mm:ss"
set odate to (df's dateFromString:odate)
end if
return odate
end get_odate
>Sequoia以前のOSで正しく表示
それはあなたの思い込みでは?
ずっと以前から類似の書き込みは多いです。
ファインダーで表示するのはあくまでもファイルとしての作成・変更日時。os(macOSに限りません)が管理すべきはファイルシステムでの作成・変更日時だからです。
写真の撮影日はexif情報に書き込まれてますので、そちらを参照すべきです。カメラで写真を撮り、それをメモリーに記録すればそれが、そのメモリーカードでの作成日になります。その場合はこの日時は撮影日と一致します。しかし、それをmacなど別のパソコンにコピーすれば、その時がパソコンでのその写真ファイルの作成日で、撮影日とは異なってきます。でもexif情報には正しい撮影日時が記録されてます。
さらに追記)
同じLightroomによる書き出しでも「オリジナルで書き出し」すると状況は変わってきます。
「作成日」は「Lightroomに取り込まれた日時」になります。
いずれにしても、Finderではなく「写真を管理しているアプリ」が関係していることに違いはないでしょう。
例えば exiftool コマンドにより Date/Time Original を取得する AppleScript はこんな感じ。
on run {argv}
repeat with f in argv
set fpath to f's POSIX path
set DateTimeOriginal to my func(fpath) # DateTimeOriginal : %Y-%m-%d %H:%M:%S
end repeat
end run
on func(fpath)
do shell script "/usr/local/bin/exiftool -s3 -DateTimeOriginal -d '%Y-%m-%d %H:%M:%S' " & fpath's quoted form
end func
exiftool が /usr/local/bin に入っていることを前提としてます。別の場所なら適宜変更してください。同コマンドは -d オプションで日時の書式を指定できるので、好きなように変更してください。あと、Date/Time Original 以外の日時を求めたい場合も適宜変更。
で、この AppleScript によりファイル名を変更?すれば良いと思います。リネームのルールを明示すれば誰か答えてくれるかもしれません。
はにさんのコメントとカブりますが、ファイルの作成日はファイルシステム上の作成日であって、コンテンツの作成日とは違うものです。一致する場合もあれば一致しない場合もあります。同じでないから間違ってるということにはなりません。「作成日」がない OS だってあります。
Automator により何かをする際に問題となるということであれば、ワークフローを変更することで対処してください。
>私が考えておりました作成日(時刻)に最も近いのは,pajerow氏の引用されている,コンテンツの作成日(時刻)です.
EXIFの撮影日を読み出すのでは。
定期的に出てくる話題なので、過去を探ると、抽出プログラムがわかるかも。
>作成日表示が正しくない
denk162さんの場合は、作成日にどのような日付が表示されているのでしょうか?
以下は先日(9/24)私がiPhone 15で撮影したものをMacの写真アプリに取り込み(iCloud経由)、
その写真をMacのピクチャーフォルダに先ほど(9/30)コピーしたものです。
macOS Sequoia 15.0のFinderでカラム表示してみると、「作成日」には「コンテンツの作成日」(=撮影日?)と同じ日時が表示されています。
>この欄の作成日が正しく表示されません(Olympus製のOM-Dを使用しています).
作成日は、ファイルをマックにコピーした日時になるのでは。
追記)
上記と同じ写真をLightroomから書き出してみました。
この場合、「作成日」には書き出した日時が設定され「コンテンツの作成日」(=撮影日?)と同じ日時にはなりません。
このとおり、Finderによる仕様ではなく書き出したアプリによる違いではないでしょうか?
推測ですが、撮影日をMac上の作成日にするのは如何なものかと言う意見が多かったとか…?
フィードバックをすると改善されるかも。
Appleがやらかしたと判断すれば15.*で改善されるかもしれませんが。
Automatorでどのようなアクションで処理しているのかが分かればもっと具体的なコメントがつくかもしれません。
既出のようにファイルの「作成日」は状況によってさまざまに変化するので、これ(Automator)だけで「撮影日」の確実な判定はできないと思いますが...
Finder Window でColumn形式を用いると,指定したFileのサムネイルが最も右の欄に現れると思いますが,この欄の作成日が正しく表示されません(Olympus製のOM-Dを使用しています).ちなみに,exiftoolを用いると,オリジナルデートが正しく入っています.Automatorを用いて,File Nameの一括変換,整理をするのに大きな支障となります.対処方法がありましたら,お教えいただければ,助かります.
>「写真を管理しているアプリ」が関係
アプリというよりはシステムに関係してるのでは?
上げられた最初の例では、iPhoneで撮影して、写真はicloudに同期してるか何かなのでは?その場合は、最初からicloudの写真システムに取り込まれてるから、iphoneで見ようが、macで見ようが作成日(最初にicloud写真システムに取り込まれた日)と撮影日が一致するのでは?
lightroomに取り込んだ場合は、書き出しの仕方で変わるということですが、特別なことをしなければ、普通のosがファイルを管理するときの振る舞いと思います。
色々のご意見ありがとうございました.私が考えておりました作成日(時刻)に最も近いのは,pajerow氏の引用されている,コンテンツの作成日(時刻)です.これらは全ての引用について,不変です.この時刻は,光がメモリーカードに記録された時刻として良いと思われます.これが,OS Sequoia,15では反映されないことが問題なのです.私は,Automatorでこの値を用いていて,OSを変えた途端,値が得られなくなってしまいました.どなたか,この値の簡単な求め方をお教えくだされば,ありがたいと思っております.
状況が理解出来ません。 何のサムネールを何処で、何のアプリで、表示しているのでしょうか?
macOS Sequoia - 写真のサムネイル画面で作成日表示が正しくない