写真をDropBox共有するために「写真」の日付のまま書き出したい。

これまで「写真アプリ」で整理してきた写真は、オリジナルファイルの日付が誤っていたため変更しているものが多数あります。これを書き出してDropBoxに移し、複数の(windowsを含む)PCで共有したいのですが、上手く行きません。

オリジナルを書き出すと、これまでの日付の修正が台無しになってしまうからです。

過去、何度もmac写真ライブラリからエクスポート、インポートを繰り返したからです。(何も指定しないと、すべて書き出した日付になってしまう)これを繰り返し合体して、いまのライブラリがあります。

もう、写真アプリ内で整理した日付を保持したまま、他のPCと共有する方法は無いのでしょうか。

環境はiMac mid2011 OS HighSierra 10.13.6 写真ver 3.0

iMac 27″, macOS 10.13

投稿日 2024/10/22 07:30

返信
返信: 25

2024/10/25 19:14 Haru831 への返信

アプリについては分からないので自作のスクリプトを紹介しますね。


まず下準備。EXIF 情報をセットするために exiftool コマンドが必要となります。入手は下のリンクから。


ExifTool by Phil Harvey

https://exiftool.sourceforge.net/


版は大きく分けて3種類ありますが、ページ上部にある「Download Version 12.99 (7.1 MB) - Oct. 18, 2024」をダウンロードしてください。(Windows 版の下にある MacOS Package は OS のセキュリティで弾かれてしまうようです...)


ダウンロードが完了したら

  1. デスクトップに新規フォルダ「bin」を作成
  2. Image-ExifTool-12.99.tar.gz をダブルクリックで展開
  3. 展開したフォルダの中にあるファイル「exiftool」とフォルダ「lib」を先ほど作成したフォルダ「bin」にコピー



作業が終わったら教えてください。次に進みます。


2024/10/26 06:17 Haru831 への返信

確認ありがとうございます。


以下はダイアログで選択したフォルダ内にある JPEG ファイルの EXIF 情報とファイルの変更日をセットする AppleScript です。


処理対象のファイルを入れたフォルダは、ローカルな場所 (ネットワーク越しとかクラウド上とかではない場所) に置いといてください。


スクリプトの作り方

  1. スクリプトエディタを起動
  2. 言語選択で AppleScript を選択 (今回は JavaScript でなく AppleScript)
  3. 下記コードをコピペ
  4. 保存


実行

  1. スクリプトエディタから実行し、
  2. ダイアログに従ってフォルダを選択 => フォルダ内の JPEG ファイルに EXIF 情報とファイルの変更日がセットされる


# コード

on run
    set_exif_all_dates(choose folder)
end run

on set_exif_all_dates(dir)
    do shell script "bash -s <<'EOF' - " & dir's POSIX path's quoted form & "
export PATH=\"/usr/local/bin:${PATH}\"

which exiftool >/dev/null 2>&1
(( $? )) && { echo 'exiftool: no such command' >&2; exit 1; }

cd \"${1}\" || exit 1

shopt -s nocaseglob
shopt -s extglob

for f in *.jp?([e])g; do
    if [[ -f \"${f}\" ]]; then
        dt=$(grep -oE '^\\d{4}-\\d{2}-\\d{2} \\d{2}-\\d{2}-\\d{2}' <<< \"${f}\")
        if [[ -n \"${dt}\" ]]; then
            exiftool -q -overwrite_original -alldates=\"${dt}\" -FileModifyDate=\"${dt}\" \"${f}\"
            chmod -x \"${f}\"
            # echo \"${f}\"
        fi
    fi
done
EOF"
end set_exif_all_dates


2024/10/22 14:25 Haru831 への返信

そもそも、Exifに撮影日時が保存されているので、書き出したファイル作成日は無視できるんですけどね。

写真管理のアプリで管理するなら、あまり問題は生じないはずですけど…

Exifが消えちゃってる写真とかもあるのでしょうか?


行うとすれば、

書き出し時にファイル名に撮影日時を付与する(純正写真アプリではできないかも)

Exifから撮影日時を拾ってファイル名に反映させるスクリプトを使ってファイル名を変更する(Automaterあたりで実行可能)

Mac用Automatorユーザガイド - Apple サポート (日本)


あたりを検討してみてください。


2024/10/23 05:19 Haru831 への返信

綺麗さっぱりなくなってますね...。


写真アプリの「情報」にはご自身で設定した日時が表示されているのですよね?

であれば、こんな感じでどうでしょうか?


  1. 写真アプリでタイトルを設定
  2. 写真アプリから写真を書き出し (ファイル名をタイトルに指定)
  3. 書き出したファイルの EXIF 情報を他社製アプリでセット


1 は下記スクリプトでできます。

3 は EXIF を編集する他社製アプリを使うと良いでしょう (必要ならスクリプトを投稿します)


# スクリプト


作り方

  1. スクリプトエディタを起動し、
  2. ウインドウ左上の方にある言語選択から「JavaScript」を選択
  3. 下記コードをコピペ
  4. 適当な名前を付けて、ファイルフォーマットを「スクリプト」で保存


実行

  1. 写真アプリで写真を選択し
  2. スクリプトを実行 => 写真アプリで選択した項目のタイトルがセットされる


JavaScript のコード

'use strict';

var Photos = Application('Photos');

function date2str(date) {
    const df = $.NSDateFormatter.alloc.init;
    df.locale = $.NSLocale.localeWithLocaleIdentifier('en_US_POSIX');
    df.dateFormat = 'yyyy-MM-dd HH:mm:ss';
    return df.stringFromDate(date).js;
}

function run() {
    for (const i of Photos.selection()) {
        const odate = date2str(i.date());
        const title = i.name();
        if (! title) {
            const fname = $(i.filename()).stringByDeletingPathExtension.js;
            i.name = `${odate} ${fname}`;
        } else {
            if (! /^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/.test(title)) {
                i.name = `${odate} ${title}`;
            }
        }
    }
}


2024/10/26 19:37 Hiro__S への返信

extool コマンドのオプション (日時の書式) を追加しました。同オプションはなくても大丈夫のようですが一応追加。


なお、このスクリプトは前掲のものと動作は変わらないのでなので、再度実行する必要はありません。今後使用する際は、このアップデート版を使ってください。


on run
    set_exif_all_dates(choose folder)
end run

on set_exif_all_dates(dir)
    do shell script "bash -s <<'EOF' - " & dir's POSIX path's quoted form & "
export PATH=\"/usr/local/bin:${PATH}\"

which exiftool >/dev/null 2>&1
(( $? )) && { echo 'exiftool: no such command' >&2; exit 1; }

cd \"${1}\" || exit 1

shopt -s nocaseglob
shopt -s extglob

for f in *.jp?([e])g; do
    if [[ -f \"${f}\" ]]; then
        dt=$(grep -oE '^\\d{4}-\\d{2}-\\d{2} \\d{2}-\\d{2}-\\d{2}' <<< \"${f}\")
        if [[ -n \"${dt}\" ]]; then
            exiftool -q -overwrite_original -d '%Y-%m-%d %H-%M-%S' -alldates=\"${dt}\" -FileModifyDate=\"${dt}\" \"${f}\"
            chmod -x \"${f}\"
            # echo \"${f}\"
        fi
    fi
done
EOF"
end set_exif_all_dates


2024/10/22 15:59 Haru831 への返信

Exifが変わっちゃってるとなると、ちょっと厄介ですね。

まずはサードパーティのアプリとかでExifの撮影日時の修正が必要ですが、その辺はどうやってるんでしょう?

私はLightroomを使っているので、カメラの時計の時刻ずれを修正するくらいですけど、Exifの日時変更可能です。


現在、Exifの撮影日時が正確なら、撮影日時にファイル作成日を修正するアプリとかもある様ですが、使った事ないのでその点はご容赦ください。

https://macfan.book.mynavi.jp/article/m137026/


2024/10/25 04:00 Haru831 への返信

タイトルがセットされたら、写真アプリからオリジナルを書き出す際に、「ファイル名:タイトルを使用」で書き出すと、ファイル名が「YYYY-MM-DD hh:mm:ss xxx.jpg」で書き出されます。


で、他社製アプリによりファイル名の「YYYY-MM-DD hh:mm:ss」の部分から日時関連の EXIF 情報をセットすれば完成です。


2024/10/22 15:19 D300 への返信

ありがとうございます。

なぜかExifが書き換わっちゃってるんですよね...

Automaterですか。使ったこと無いですが、日付も変えられるんですか?たしか操作をスプリクトに変えてくれるんですよね。

ちょっと勉強が必要な感じですね。

そうか、そういう写真用のアプリもあるかも知れませんね。探して見ます。

本体をDropBoxに置いた後、複数のmac,iPhoneで共有できるかも気にところです。

写真ライブラリは元ファイルの場所を格納しているのでしょうが、他のPCから元ファイルを変更されると???

どうなるんでしょうね。

2024/10/23 05:05 Haru831 への返信

>日付が無いみたい


おかしいですね。iphone se 2ndで写したのなら、iphoneで見れば撮影日時は入ってるはずですけどね。普通はそれをmacに移行すればexifに撮影日時は入るのですが。通常はデジタル化時刻とかオリジナル作成時刻のところに撮影日時が入ってるのですが。

macOSがhigh sierraだからおかしいということはないはずです。うちのでみる限りもっと古い4sとかガラ携で撮った写真でもexifは入ってます。ただ色々みてみると、exifのところじゃなくて、TIFFとか他のところに入ってるものもあります。

2024/10/25 15:02 はに への返信

はにさん。

日付が何故消えてしまったのか解らないんです。

iPhoneだけじゃなくCanonのデジカメの写真も混在していたんだけど、それをWindowsの環境であっちこっちに保管してあったものを写真アプリにインポートしたときに日付がおかしい事に気づいて。そのあと、いろんなアプリで出したり入れたりしてるうちに消えちゃったみたいなんですよね。

容量の少ないiPhoneと無料プランのCloud使っていた事もあって、本体保管はしていません。

TIFFの項目に入るって、謎ですね(笑)

2024/10/25 15:09 Hiro__S への返信

Hiro_Sさん

タイトルに日付→日付付きファイル名 の書き出し成功しました!

ありがとうございます。希望が見えてきました。

ここから、ファイル名→Exifに日付セット、の流れですよね。

調べたのですが適当なアプリが見つかりません。なにかご存知でしょうか。

続けて甘えてしまい申し訳無いのですが、ご存知でしたら教えてもらえませんか。

Exiftoolというのがそれっぽいのですが、私は先ほどのスプリクトの時もそうですが引数(どのファイルを指定)の渡し方がよく解らないのです。ターミナルでのディレクトリの指定の仕方もよく解らず(macディレクトリ構造があまりわかっていないのです)

あと一歩なので、どうかご教示ねがいます。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

写真をDropBox共有するために「写真」の日付のまま書き出したい。

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。