
クイックリーダーをゲット
7月初めにInsta360 GO3sを購入しました。
内臓メモリは128GBと大きい方を選んだのですが、それでも4Kを多用すると1日でストレージがなくなってしまいます。バッテリーに加えてストレージも死活問題になると予想はついていたので、当初からクイックリーダーを購入しようと考えていたのですが、在庫切れで本体のみ購入していました。
この度(7/25日現在)、公式ストアと楽天市場で在庫が復活していたので購入しました。
https://store.insta360.com/product/go-3s-quick-reader
https://item.rakuten.co.jp/insta360-shop2/ac-go3-quickreader
楽天の方は送料がかからないのでおすすめです。
(どちらもアフィリンクではありません。)
ファイルコピー時にファイル変更日がずれる問題
これはクイックリーダーと本体だけで、microSDにファイルをコピーする際に起こる不具合です。
ずれるというよりはファイルをコピーした日がファイルの作成日・更新日になってしまいます。
海外のYouTubeのレビューでその問題を説明している動画があります。
この動画では、外出先でどうしてもストレージを確保したいとき以外、microSDへのコピー機能は使わない方が良いでしょう。みたいなことが言われていました(多分)。
しかしながら背に腹は変えられないのでmicroSDへのコピーもしたい….
ということで、その対策を考えました。
ファイル名が撮影日時だから、それを使ってメタデータを書き換えればいいのでは
とりあえず書く時間がないのでコードだけ貼り付けておきます。
全てChatGPTに作ってもらったものです。
Mac用のコードです。実行可能にする手順も併せて貼り付けています。
#!/bin/bash
# チェック:引数が一つ渡されたかどうか
if [ "$#" -ne 1 ]; then
echo "使用法: $0 <フォルダパス>"
exit 1
fi
# ターゲットフォルダ
TARGET_DIR="$1"
# サポートされているファイル形式
FILE_PATTERNS=("*.jpg" "*.dng" "*.lrv" "*.mp4")
# ファイルの処理
for PATTERN in "${FILE_PATTERNS[@]}"; do
for FILE in "$TARGET_DIR"/$PATTERN; do
# ファイルが存在するかどうかを確認
if [ ! -e "$FILE" ]; then
continue
fi
# ファイル名から日時を抽出
BASENAME=$(basename "$FILE")
echo "Processing: $BASENAME" # デバッグメッセージ
if [[ "$BASENAME" =~ ^IMG_([0-9]{8})_([0-9]{6}) ]]; then
DATE="${BASH_REMATCH[1]}"
TIME="${BASH_REMATCH[2]}"
elif [[ "$BASENAME" =~ ^LRV_([0-9]{8})_([0-9]{6}) ]]; then
DATE="${BASH_REMATCH[1]}"
TIME="${BASH_REMATCH[2]}"
elif [[ "$BASENAME" =~ ^PRO_LRV_([0-9]{8})_([0-9]{6}) ]]; then
DATE="${BASH_REMATCH[1]}"
TIME="${BASH_REMATCH[2]}"
elif [[ "$BASENAME" =~ ^VID_([0-9]{8})_([0-9]{6}) ]]; then
DATE="${BASH_REMATCH[1]}"
TIME="${BASH_REMATCH[2]}"
elif [[ "$BASENAME" =~ ^PRO_VID_([0-9]{8})_([0-9]{6}) ]]; then
DATE="${BASH_REMATCH[1]}"
TIME="${BASH_REMATCH[2]}"
else
echo "Skipped: $FILE (no valid date in filename)"
continue
fi
DATE="${DATE:0:4}-${DATE:4:2}-${DATE:6:2}"
TIME="${TIME:0:2}:${TIME:2:2}:${TIME:4:2}"
DATETIME="$DATE $TIME"
# EXIFデータを更新
if [[ "$FILE" == *.jpg ]] || [[ "$FILE" == *.dng ]]; then
echo "Updating EXIF data for: $FILE to $DATETIME" # デバッグメッセージ
exiftool -overwrite_original -AllDates="$DATETIME" "$FILE"
if [ $? -ne 0 ]; then
echo "Error: Failed to update EXIF data for $FILE"
fi
fi
# touchコマンドの形式: [[CC]YY]MMDDhhmm
FORMATTED_DATE="${DATE//-/}${TIME//:/}"
FORMATTED_DATE="${FORMATTED_DATE:0:12}" # 秒を省略
echo "Formatted Date: $FORMATTED_DATE" # デバッグメッセージ
# ファイルの作成日と更新日を更新
touch -t "$FORMATTED_DATE" "$FILE" 2>&1
if [ $? -eq 0 ]; then
echo "Updated: $FILE to $DATETIME"
else
echo "Error: Failed to update file dates for $FILE"
echo "Command: touch -t \"$FORMATTED_DATE\" \"$FILE\""
touch -t "$FORMATTED_DATE" "$FILE" 2>&1 # 詳細なエラーメッセージを表示
fi
done
done