iOS/macOS ボイスメモを「録音日・タイトル・録音時間」を保持したままファイル保存

チャッピーさんに書いてもらいました。最近Androidに変えたし、iCloudの容量追加サブスクを解約しようかな…と思ってきました。


はじめに

iOSやmacOS の「ボイスメモ」アプリ、便利ですが、録音が増えてくると iCloudやiPhoneストレージ容量を圧迫 してしまいます。

そこで、古い録音をMacOS内のFinderからGoogle Driveや外付けHDDにコピーしようとしても、ボイスメモアプリのファイルは、タイトルが保持されないという仕様。

20241120 123456.m4a
20241119 091234.m4a

これでは、どの録音が何の内容なのか、録音時間はどれくらいなのか、全く分かりません。

この記事では、この問題を解決する 録音日・タイトル・録音時間をファイル名へ自動付与するスクリプトを紹介します。

これにより、iCloud から解放しつつ、大量のボイスメモを効率的に整理・管理できるようになります。


こんなファイル名に変換できます

2025-11-20_会議メモ_15m30s.m4a
2025-11-19_アイデア_03m12s.m4a
2025-11-18_インタビュー_45m08s.m4a

できること:

  • 録音日が一目で分かる
  • タイトルで内容を識別できる
  • 録音時間(分秒)で長さが分かる
  • Finder での並び順が録音順に統一される
  • 元ファイルは保持され、安全に処理できる
  • Google Drive や外付けHDDに移行して iCloudやiPhoneストレージ容量を削減できる

動作環境:

  • macOS 15 (Sequoia) 以降で動作確認済み
  • それ以前のバージョンでも動作する可能性がありますが未検証

実践編:手順に従って実行

この章では、技術的な説明は省略し、手順だけを記載しています。

理解していなくても、このとおりに進めれば完了します。


ステップ1:ボイスメモデータをコピー

  1. Finder で「移動」メニューから `Option (⌥)` キーを押しながら「ライブラリ」を選択
  2. `Group Containers` → `group.com.apple.VoiceMemos.shared` → `Recordings` と進む
  3. `Recordings` フォルダをコピー
  4. デスクトップに `VoiceMemos_Work` フォルダを作成してペースト

重要: 元のデータは削除されません。


ステップ2:ターミナルを開く

ターミナルとは、Mac でコマンドを入力して操作するアプリです。

手順:

  1. Spotlight 検索を開く(`Command ⌘ + Space`)
  2. 「ターミナル」と入力
  3. 「ターミナル.app」をクリック

黒い(または白い)ウィンドウが開けば成功です。


ステップ3:スクリプトファイルを作成

手順:

  1. テキストエディットを開く(Spotlight で「テキストエディット」と検索)
  2. 新規ファイルを作成
  3. メニューから「フォーマット」→「標準テキストにする」を選択(重要!
  4. 以下のスクリプトをすべてコピーしてテキストエディットに貼り付け
#!/bin/zsh

DB="$HOME/Desktop/VoiceMemos_Work/Recordings/CloudRecordings.db"
SRC_DIR="$HOME/Desktop/VoiceMemos_Work/Recordings"
OUT_DIR="$HOME/Desktop/VoiceMemos_Work/output"
mkdir -p "$OUT_DIR"

sqlite3 -separator "|" "$DB" '
SELECT
  ZPATH,
  ZCUSTOMLABEL,
  ZENCRYPTEDTITLE,
  CAST(ZDATE AS INTEGER) AS ZDATE
FROM ZCLOUDRECORDING;
' | while IFS="|" read -r ZPATH ZCUSTOMLABEL ZENCRYPTEDTITLE ZDATE; do

  [ -z "$ZPATH" ] && continue
  SRC_FILE="$SRC_DIR/$ZPATH"
  [ ! -f "$SRC_FILE" ] && continue

  EXT="${ZPATH##*.}"

  # タイトル決定(ISO形式は除外)
  RAW_TITLE="$ZENCRYPTEDTITLE"
  [[ -z "$RAW_TITLE" ]] && RAW_TITLE="$ZCUSTOMLABEL"
  if echo "$RAW_TITLE" | grep -Eq '^[0-9]{4}-[0-9]{2}-[0-9]{2}T'; then
    SAFE_TITLE="Untitled"
  else
    SAFE_TITLE=$(printf "%s" "$RAW_TITLE" | tr '/:' '_' | tr -d '\n\r')
    [ -z "$SAFE_TITLE" ] && SAFE_TITLE="Untitled"
  fi

  # 録音日
  EPOCH=$((ZDATE + 978307200))
  DATE=$(date -r "$EPOCH" +"%Y-%m-%d")

  # 録音時間(duration)
  DURATION_RAW=$(afinfo "$SRC_FILE" | awk '/estimated duration/ {print $3; exit}')
  if [ -z "$DURATION_RAW" ]; then
    DURATION_STR="00m00s"
  else
    SEC=$(printf "%.0f" "$DURATION_RAW")
    DURATION_STR=$(printf "%02dm%02ds" $((SEC/60)) $((SEC%60)))
  fi

  NEW_NAME="${DATE}_${SAFE_TITLE}_${DURATION_STR}.${EXT}"
  cp "$SRC_FILE" "$OUT_DIR/$NEW_NAME"

  # 作成日/更新日を録音日時に書き換え
  TOUCH_DATE=$(date -r "$EPOCH" +"%Y%m%d%H%M.%S")
  touch -t "$TOUCH_DATE" "$OUT_DIR/$NEW_NAME"

done
  1. ファイルを保存:
    • 保存場所:デスクトップの `VoiceMemos_Work` フォルダ
    • ファイル名:`rename.sh`
    • 「.txt を追加しない」にチェック(表示される場合)

ステップ4:スクリプトを実行

ターミナルに以下をコピー&ペーストして `Enter` を押してください:

cd ~/Desktop/VoiceMemos_Work && chmod +x rename.sh && ./rename.sh

copy

処理が始まります。ファイル数によっては数分かかる場合があります。


ステップ5:結果を確認

処理が完了すると、デスクトップの `VoiceMemos_Work/output` フォルダに、整理されたファイルが保存されています。

確認方法:

  1. デスクトップの `VoiceMemos_Work` フォルダを開く
  2. `output` フォルダを開く
  3. ファイル名が以下のように変わっているはずです:
2025-11-15_会議メモ_15m30s.m4a
2025-11-16_アイデア_03m12s.m4a
2025-11-18_インタビュー_45m08s.m4a

これで完了です!

整理されたファイルを Google Drive や外付けHDDに移動できます。



解説編:技術的な背景を理解する

ここからは、スクリプトの仕組みを理解したい方向けの解説です。

実行だけが目的の方は読む必要はありません。


処理の仕組み

データの取得元

このスクリプトは、ボイスメモアプリが内部で使用している SQLite データベースから情報を取得します。

CloudRecordings.db の主要カラム:

  • `ZENCRYPTEDTITLE`:録音タイトル(ユーザーが設定したタイトル)
  • `ZCUSTOMLABEL`:カスタムラベル(タイトルが未設定の場合の代替)
  • `ZDATE`:録音日時(macOS 独自の epoch 形式)
  • `ZPATH`:実際のファイルパス

処理の流れ

  1. データベースクエリ:SQLite から録音情報を取得
  2. タイトル処理
    • ISO 形式の日付(`2025-11-20T12:34:56`)は `Untitled` に置換
    • ファイル名に使えない文字(`/`, `:`)をアンダースコアに変換
  3. 日時変換:macOS epoch(2001年1月1日基準)を Unix epoch に変換
  4. 録音時間取得:`afinfo` コマンドで M4A ファイルの実際の長さを取得
  5. ファイル生成:新しいファイル名でコピーを作成
  6. メタデータ更新:ファイルの作成日・更新日を録音日時に書き換え

技術的なポイント

macOS Epoch の変換

EPOCH=$((ZDATE + 978307200))

macOS の Core Data は 2001年1月1日 00:00:00 UTC を基準とする独自の epoch を使用しています。

Unix epoch(1970年1月1日)との差分は `978307200` 秒です。

この値を加算することで Unix timestamp に変換しています。

afinfo コマンド

afinfo "$SRC_FILE" | awk '/estimated duration/ {print $3; exit}'

`afinfo` は macOS 標準のオーディオファイル情報取得コマンドです。

`estimated duration` 行から録音時間(秒数)を抽出し、この値を分秒形式(`15m30s`)に変換しています。

ファイル名の安全化

SAFE_TITLE=$(printf "%s" "$RAW_TITLE" | tr '/:' '_' | tr -d '\n\r')

`/` と `:` はファイル名に使用できないため `_` に置換し、改行文字(`\n`, `\r`)を削除しています。


トラブルシューティング

データベースが見つからない

症状: スクリプトが動作しない、エラーが出る

解決策:

  • ステップ1でボイスメモデータが正しくコピーされているか確認
  • `VoiceMemos_Work/Recordings` フォルダ内に `CloudRecordings.db` ファイルがあるか確認

afinfo コマンドが見つからない

症状: `command not found: afinfo`

解決策:

`afinfo` は macOS 標準コマンドです。Xcode Command Line Tools がインストールされているか確認してください:

xcode-select --install

ファイルが出力されない

解決策:

  • ボイスメモアプリでタイトルを設定しているか確認
  • `Recordings` フォルダ内に `.m4a` ファイルがあるか確認

まとめ

このスクリプトを使うことで:

  • 録音日・タイトル・録音時間で自動リネーム
  • duration 付きで一覧性が大幅に向上
  • Finder の並び順が録音順に統一
  • 元ファイルを壊さず安全に処理
  • ファイルのメタデータも録音日時に統一

大量のボイスメモを効率的に整理・アーカイブできます。

応用例

iCloud ストレージ管理
整理したファイルを Google Drive に移行し、ボイスメモアプリから古い録音を削除して iCloud 容量を削減

バックアップ
定期的に実行して整理済みアーカイブを作成

クラウド同期
整理したファイルを Dropbox や Google Drive に保存

検索性向上
タイトルと日付で簡単に目的の録音を見つけられる


ぜひお試しください!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です