Recuperare e riparare video MP4 interrotti o cancellati

Quando la registrazione di un video in formato MP4 viene bruscamente interrotta e il file non viene finalizzato, spesso il filmato diventa inutilizzabile. Nelle stesse condizioni ci si può ritrovare se si tenta di recuperare un filmato accidentalmente cancellato: la maggior parte dei dati è recuperata, ma mancando alcune informazioni fondamentali non è possibile riprodurre il video.

La prima cosa che si può tentare di fare è cercare di riprodurre il video con un programma un po’ più flessibile, come ad esempio VLC, per poi salvarlo in un nuovo file. La lista di programmi che è possibile utilizzare per provare a riprodurre il video è pressoché interminabile, ma dopo averne provati 4-5 le speranze calano e si perde fiducia.

Il metodo che intendo spiegare in questo articolo non è proprio semplicissimo, specie per chi non ha mai avuto a che fare con l’hex editing, ma cercherò di spiegare tutti i passaggi in modo quanto più dattagliato è possibile.

Premetto che non sono un esperto di editing video e la soluzione a cui sono giunto deriva da numerose ricerche su google e sui vari forum dedicati all’argomento. Inoltre in questa guida utilizzo software per Windows, ma il procedimento può essere seguito con software equivalenti su GNU/Linux.

Vediamo in breve quali sono le operazioni da effettuare per ripristinare un video:

  1. Recupero: qualora il video fosse stato cancellato, la prima cosa da fare è cercare di recuperarlo per poterlo riparare
  2. Riparazione: la riparazione che tenteremo di effettuare consisterà nel sostiture alcune righe del file danneggiato con quelle di un file funzionante dello stesso tipo
  3. Salvataggio: una volta riparato il file, ne salveremo una versione riproducibile in un nuovo file MP4

1. Recupero

Se il nostro problema deriva da una cancellazione accidentale (o non!) del video, la prima cosa da fare è tentare di recuperarlo. È importante notare che quando un file viene “cancellato” dal dispositivo, nella maggior parte dei casi non viene realmente eliminato dalla memoria, ma viene “nascosto” rendendo lo spazio da lui occupato disponibile per altri file. Se quindi dopo la cancellazione la memoria non è stata più utilizzata, le probabilità di ritrovare il file integro sono abbastanza elevate.

Il programma che ho utilizzato con Windows è WinHex, disponibile anche in versione free. Su GNU/Linux è disponibile una valida alternativa che è PhotoRec.
Da Strumenti -> Apri unità disco selezioniamo la nostra memoria nel gruppo Unità logiche. Se non dovesse aprirsi la finestra che permette di esplorare le cartelle, visualizziamola tramite Visualizza -> Mostra -> Esplora cartella. Tramite questa finestra possiamo accedere alla cartella contenente il file cancellato, che è possibile recuperare semplicemente tramite Click destro sul file -> Recupera/Copia. Se il file dovesse essere contrassegnato da un’icona con una X e dimensioni di pohi kB, il suo recupero potrebbe diventare molto più complicato. Lo stesso vale se questo non dovesse essere affatto presente nella lista di file. In questo caso WinHex mette a disposizione degli strumenti, accessibili tramite Strumenti -> Utilità disco sui quali però non mi soffermerò.

2. Riparazione

Veniamo ora alla parte più interessante di questa guida. In questa fase avremo bisogno di un editor esadecimale; potete utilizzare ancora WinHex se siete su Windows, oppure una qualsiasi alternativa come Shed per sistemi GNU/Linux.
Prima di dirvi come procedere è necessario capire innanzitutto come è strutturato un file MP4: una spiegazione dettagliata la potete trovare QUI; in breve esso è costituito da una serie di atom, che sono una specie di tag contenenti informazioni sui video. Ogni atom è costituito da 8 byte (caratteri): 4 byte per la sua dimensione (in giallo, nella foto) e altri 4 per il nome (in azzurro).

La riparazione che tenteremo di effettuare consiste nel copiare l’atom di nome esds da un filmato funzionante a quello danneggiato.
Apriamo con un editor esadecimale un filmato girato con lo stesso dispositivo del video danneggiato e cerchiamo la stringa esds. Dovrebbe essercene una sola, preceduta dall’atom mp4v e seguita dall’atom mdat.
Selezioniamo tutto l’atom esds, partendo da 4 byte prima del nome, fino a 4 byte prima di mdat, come indicato nella figura:

Questa stringa va copiata tra l’atom ftyp e l’atom esds, nella prima riga del file danneggiato. Ricordate sempre che l’atom inizia con i 4 byte sulle dimensioni, seguiti dai 4 byte del nome, quindi la stringa va incollata giusto 4 caratteri prima della stringa “esds”, come indicato in figura:

A questo punto siamo pronti per la fase finale, il salvataggio del video in una versione riproducibile.

3. Salvataggio

Per salvare il file in una versione riproducibile utilizzeremo MP4Creator, un software open source che permette di aprire il bytestream e salvarlo come filmato MP4 riproducibile.
Per prima cosa rinominiamo il file video danneggiato da .mp4 a .mp4v, altrimenti il software non riconosce l’estensione. Collochiamo MP4Creator e il video da riparare nella stessa directory, ed eseguiamo il seguente comando:

mp4creator --create=fdanneggiato.mp4v --rate=24 --verbose video.mp4

Sostituendo ovviamente fdanneggiato e rate con i parametri del nostro video. In realtà MP4Creator supporta l’opzione –variable-frame-rate, ma con me non ha funzionato, su nessuno dei due pc con cui ho provato.
Se tutto è andato a buon fine, il nuovo file video.mp4 dovrebbe essere visualizzabile correttamente da qualsiasi player video.

L’unico problema di questo sistema è che non riesce a recuperare l’audio dei filmati. Ripeto, non essendo un esperto di editing video non so di preciso a cosa sia dovuto il problema, ma sono quasi sicuro se si possa recuperare anche quello.

In conclusione, ho testato questo procedimento sia con un filmato la cui registrazione è stata bruscamente interrotta, sia con un filmato che era stato cancellato da un cellulare (Nokia N82) e in entrambi i casi sono riuscito a recuperare il video con successo.