Vai al sito di Tutto su Linux Salta al contenuto
  • Categorie
  • Recenti
  • Tag
  • Popolare
  • Utenti
  • Gruppi
Collassa
Icona di Tutto su Linux con diversi loghi

Forum di Tutto su Linux

  1. Home
  2. Discussioni generiche sull'informatica
  3. TUTORIAL: Come fare un backup dei memo vocali dell'iPhone/iPad su LINUX (Debian)!

TUTORIAL: Come fare un backup dei memo vocali dell'iPhone/iPad su LINUX (Debian)!

Pianificato Fissato Bloccato Spostato Discussioni generiche sull'informatica
3 Post 2 Autori 73 Visualizzazioni 2 Seguito
  • Da Vecchi a Nuovi
  • Da Nuovi a Vecchi
  • Più Voti
Rispondi
  • Risposta alla discussione
Effettua l'accesso per rispondere
Questa discussione è stata eliminata. Solo gli utenti con diritti di gestione possono vederla.
  • pinguinotatticoP Non in linea
    pinguinotatticoP Non in linea
    pinguinotattico
    scritto ultima modifica di
    #1

    Il mio problema coi memo vocali è stato che ne avevo quasi 800 e non riuscivo a passarli al PC Linux in quanto la rotellina dell'iPad era ferma allo 0% e diceva sempre "Preparo..." senza esportare nulla su Telegram, LocalSend, File, ecc.
    L'unica strada è stata quella del terminale di Linux e Python, in quanto iTunes non è disponibile su Linux (nemmeno con Wine funziona al 100%) e Clementine, VLC e Strawberry Music Player si sono rivelati inutili nella sincronizzazione tra Linux e iOS.
    È venuto in soccorso ChatGPT e la maieutica di Socrate con la quale l'ho interrogato e sono riuscito ad arrivare ad una soluzione per me e... per voi!

    Ho testato questa procedura con:

    - iPad con iOS 26

    - Debian 13 Trixie

    - Trinity Desktop Environment (TDE)

    - Konsole

    1. BACKUP COMPLETO

    1.1 Collegate il dispositivo iOS (es. iPad) al computer, autorizzate quello che c'è da autorizzare

    1.2. Aprite Konsole e mandate:

    sudo apt update

    sudo apt install libimobiledevice-1.0-6 libimobiledevice-utils ifuse python3 python3-pip sqlite3

    1.3. Verifica che Debian rileva il dispositivo:

    ideviceinfo

    1.4. ATTENZIONE: come utenti NON root, mandate:

    mkdir -p ~/iOSBackup

    Questo vi creerà una cartella nella vostra /home/nome-utente-del-computer

    1.5. Accertati di avere spazio sul PC per il backup (per esempio dalle impostazioni del dispositivo iOS risulta che il mio iPad ha 50 GB di spazio occupato e il backup sul PC è venuto a pesare 20 GB) ed esegui il backup completo mandando:

    idevicebackup2 backup ~/iOSBackup

    1.6. Quando il backup sarà terminato vedrete dentro la cartella "iOSBackup" un'altra cartella con dei numeri e delle lettere strane. Apritela e vedrete molte cartelle, all'interno delle quali rimarrete delusi nel constatare che APPARENTEMENTE il backup non è riuscito come ALMENO credevate.
    Occorre perciò portare alla luce tutti i vostri file, ma in questo tutorial ci limitiamo a recuperare i memo vocali (che è dove mi sono spinto io grazie a ChatGPT e alle scarsissime conoscenze che ho per queste cose).

    2. COME ESTRARRE I MEMO VOCALI

    2.1. Per ottenere i file .m4a (il vero formato dei memo vocali di iOS) leggibili devi usare Python dal terminale (es. Konsole) + lo script "iphonemediakit"

    2.2. Manda sul terminale come root:

    sudo apt install python3.13-venv

    2.3. Ora dobbiamo creare l'ambiente virtuale venv nella nostra home.
    Quindi creiamo il virtualenv nella nostra home con:

    python3 -m venv ~/venv

    Ora propongo due strade per estrarre i memo vocali. Un metodo non consigliato e un metodo consigliato. Vi consiglio di passare direttamente al punto 4.

    3. METODO NON CONSIGLIATO: COME ESTRARRE I MEMO VOCALI (ATTENZIONE: SENZA RINOMINARLI SULLA BASE DEI METADATI)

    3.4. Attiviamo l'ambiente con:

    source ~/venv/bin/activate

    Qui vedremo che il prompt del terminale cambia in (venv) nome-utente ecc.

    3.5. I memo vocali stanno nel backup come file .m4a con i riferimenti salvati in un database SQLite.
    Puoi estrarli con sqlite3 e una ricerca mirata.
    Manda nel terminale (ATTENZIONE: sostituisci le 8 cifre iniziali di seguito con quelle della tua cartella di backup!!!)
    cd ~/iOSBackup/00008030*/

    sqlite3 Manifest.db "SELECT fileID, relativePath FROM Files WHERE relativePath LIKE '%Recordings/%';"

    Poi basta copiarli in massa:

    mkdir -p ~/Desktop/MemoVocali

    sqlite3 Manifest.db "SELECT fileID FROM Files WHERE relativePath LIKE '%Recordings/%';" | while read fid; do

    cp "${fid:0:2}/$fid" ~/Desktop/MemoVocali/

    done

    Ti ritrovi i memo vocali grezzi in ~/Desktop/MemoVocali/ ma non saranno ancora in .m4a ma in "hash" senza un'estensione. A noi servirà mettere ad essi un'estensione e mettere ad essi i metadati (la data e l'ora delle registrazioni).

    2.6 Per rinominare tutti i file con l'estensione .m4a, inserisci nel terminale:

    cd ~/Desktop/MemoVocali

    for f in *; do

    mv "$f" "$f.m4a"

    done

    4. METODO CONSIGLIATO: COME ESTRARRE I MEMO VOCALI RINOMINANDOLI COI METADATI

    4.1. Ora procediamo a rinominarli grazie al file Manifest.db, presente già nel nostro backup completo della cartella home: è un database SQLite che dice quale hash corrisponde a quale percorso originale sul dispositivo iOS.
    ChatGPT mi ha creato uno script adatto a questo. Crea un documento vuoto sul tuo desktop e rinominalo (togliendo le virgolette): "extract_voicememos.py"

    4.2. Apri il file appena creato con Kate o Kwrite e copia e incolla questo script (ATTENZIONE: cambia la voce "nome-utente" con il nome utente del tuo computer, e il nome della cartella "00008030-0012712E3ADB402E" con il nome della cartella effettiva del TUO backup, non il mio) :

    #!/usr/bin/env python3

    import os

    import sqlite3

    import shutil

    import re

    # --- Configurazioni ---

    BACKUP_DIR = "/home/nome-utente/iOSBackup/00008030-0012712E3ADB402E"

    DB_PATH = os.path.join(BACKUP_DIR, "Manifest.db")

    OUTPUT_DIR = os.path.join(os.path.expanduser("~/Desktop/VoiceMemos"))

    # Crea la cartella di destinazione se non esiste

    os.makedirs(OUTPUT_DIR, exist_ok=True)

    # Connessione al database

    conn = sqlite3.connect(DB_PATH)

    cur = conn.cursor()

    # Query per recuperare fileID e relativePath dei voice memos

    query = """

    SELECT fileID, relativePath

    FROM Files

    WHERE relativePath LIKE '%Recordings%'

    """

    cur.execute(query)

    rows = cur.fetchall()

    print(f"Trovati {len(rows)} file voice memo.")

    # Funzione per convertire nome originale in YYYY-MM-DD HH-MM-SS

    def format_filename(original_name):

    # Estrae data e ora dal nome (supporta sia m4a che .composition)

    m = re.search(r'(\d{8})[ _]?(\d{6})', original_name)

    if m:

    date_part = m.group(1) # es: 20240326

    time_part = m.group(2) # es: 152834

    formatted = f"{date_part[:4]}-{date_part[4:6]}-{date_part[6:]} {time_part[:2]}-{time_part[2:4]}-{time_part[4:]}.m4a"

    return formatted

    else:

    # fallback se non trova data/ora: usa hash + m4a

    return original_name + ".m4a"

    # Ciclo su tutti i file

    for fileID, relativePath in rows:

    subdir = fileID[:2] # sottocartella in cui iOS mette il file

    original_file = os.path.join(BACKUP_DIR, subdir, fileID)

    # Prende solo il nome del file dall'originalPath

    original_name = os.path.basename(relativePath)

    # Genera nome finale leggibile

    new_name = format_filename(original_name)

    dest_file = os.path.join(OUTPUT_DIR, new_name)

    # Copia il file se esiste

    if os.path.exists(original_file):

    shutil.copy2(original_file, dest_file)

    print(f"✅ Copiato: {original_file} → {dest_file}")

    else:

    print(f"⚠️ File non trovato: {original_file}")

    # Chiude il DB

    conn.close()

    print("🎉 Operazione completata! Tutti i voice memos sono sul Desktop.")

    4.3. vai sul tuo Desktop, fai clic destro col mouse e seleziona la voce per aprire il terminale lì.
    Manda:
    python3 extract_voicememos.py

    4.4. Troverai tutti i memo vocali rinominati nella cartella ~/Desktop/VoiceMemos.

    1 Risposta Ultima Risposta
    • clarintuxC Non in linea
      clarintuxC Non in linea
      clarintux
      Moderatore globale
      scritto ultima modifica di
      #2

      Grazie @pinguinotattico per questo tuo contributo, che potrà essere utile ad altri!

      https://www.youtube.com/@clarintuxuntuxepersempre1287

      pinguinotatticoP 1 Risposta Ultima Risposta
      • clarintuxC clarintux

        Grazie @pinguinotattico per questo tuo contributo, che potrà essere utile ad altri!

        pinguinotatticoP Non in linea
        pinguinotatticoP Non in linea
        pinguinotattico
        scritto ultima modifica di
        #3

        @clarintux è stato un piacere!

        1 Risposta Ultima Risposta
        Rispondi
        • Risposta alla discussione
        Effettua l'accesso per rispondere
        • Da Vecchi a Nuovi
        • Da Nuovi a Vecchi
        • Più Voti


        • Accedi

        • Non hai un account? Registrati

        • Accedi o registrati per effettuare la ricerca.
        • Primo post
          Ultimo post
        0
        • Categorie
        • Recenti
        • Tag
        • Popolare
        • Utenti
        • Gruppi