Convertire DVD per vederli sul Nintendo DS

Per la sempre maggiore gioia di NoKo, ieri ho deciso che volevo assolutamente vedere il video di It’s no good sul mio Nintendo DS.

Intanto, com’è possibile fare ciò, se il DS non ha uno slot per schede di memoria? Serve una cosiddetta Flashcart (in realtà in modo un po’ improprio), ossia una cartuccia in cui si inserisce una SD o simile, che permette poi di lanciare sul DS i programmi e giochi che si trovano su questa. Ce ne sono diversi modelli in giro: in particolare io ho una SuperCard Lite, che monta schede MicroSD/TransFlash.

Trovata una flashcart, serve un qualche media player. No problem: per DS c’è il buon Moonshell (LOL! Mentre scrivo questo hanno appena rilasciato una nuova versione :D), di cui, fra l’altro, sono disponibili i sorgenti completi.

Ora viene il difficile: infatti, mentre per quanto riguarda l’audio, Moonshell riproduce file OGG e MP3, per i video il programmatore si è inventato un formato tutto suo, che ha chiamato nDs-mPeG, per gli amici DPG. Si tratta in sostanza di video MPEG-1 e audio MPEG-2, rinchiusi in un container (che in realtà è un semplice header) assolutamente non standard che ha il seguente formato:

The header is 36 bytes. (Note: all of the numbers below are hexadecimal.)
44 50 47 30 (this stands for DPG0 in ASCII)
Four bytes for the number of frames in the video
00 00 00 00
Two bytes for the frames per second that the video runs
00 00
Four bytes for the audio sample rate
00 00 00 00
00 00 00 00 (this was the number of audio channels, now deprecated in favor of MP2 audio)
24 00 00 00 (this is the start of the audio file, i.e. right after the header)
Four bytes for the length, in bytes, of the audio
Four bytes for the above length + 36 bytes (i.e. the start of the video file)
Four bytes for the length, in bytes, of the video

Di nuovo, chi è interessato a vedere come concilare tutto ciò col solito ffmpeg, legga l’articolo intero! :)
Continue reading