11.22
L’altro ieri ho avuto la sfortuna di lasciare il DVD del singolo di Martyr (DM) sulla scrivania vicino alla mia PSP. Così, quando ieri li ho rivisti fianco a fianco, non ho potuto resistere alla curiosità di convertire il video da DVD a PSP. Pensavo che, col solito ffmpeg, sarebbe stata un’operazione banale, invece mi ha impegnato per ore.
Eggià, per tutta una serie di motivi. Prima di tutto, la PSP, seppur compatibile con video MPEG-4 e H.264, non supporta il contenitore standard MPEG-4, ma una sua versione modificata da Sony. Tale formato non era inizialmente supportato da ffmpeg, e per questo c’erano in giro versioni patchate, ffmpeg-psp. Non so precisamente da quando, ma oggi come oggi l’ffmpeg normale basta e avanza, anche se forse mezzo mondo non se n’è accorto e continua a mettere in giro informazioni sbagliate. Inoltre, la PSP è molto pignola sui parametri con cui viene fatta la codifica, e si rifiuta di riprodurre il file se questi non sono di suo gradimento. Fortunatamente Sony si è un po’ svegliata, e dal firmware 2.80 supporta il container standard e parametri un po’ più laschi. È per questo motivo che i video che scaricate da Google Video in formato PSP, in realtà li riuscite a vedere solo se avete un firmware >= 2.80.
Altra cosa che mi ha fatto perdere tempo è che ffmpeg, ultimamente, ha cambiato un po’ le sue opzioni. E così, il -bitexact che vedevo spesso in giro, non so cosa sia diventato, quindi ho fatto che toglierlo. Cosa peggiore è che ora il bitrate va espresso in b/s, mentre prima era in kb/s, con la conseguenza che -b 300 non dà quel gran risultato :).
Ad ogni modo, la prima cosa che faccio è pubblicare tutte le informazioni che ho raccolto sui codec video supportati dalla PSP. Quanto segue proviene da diversi siti, che non sto a creditare, perché sono veramente tanti, e molti hanno informazioni obsolete o inaccurate, e non voglio confondere le idee a nessuno:
La PSP supporta due codec per il video MPEG4 e h.264/AVC MP Level3 (quest’ultimo dal firmware 2.00).
La risoluzione dello schermo della PSP è 480×272, ma non si può usare perché il numero massimo di pixel supportato è 76800 (almeno in MPEG-4). Risoluzioni supportate:
- 320×240 (Per video in 4:3 usare sempre questo)
- 368×208 (Consigliato per video in 16:9)
- 416×176
- 320×176
- 384×160
- 480×160
- 400×192
Framerate supportati:
- 30
- 29.97 (NTSC – Questo funziona di sicuro)
- 29.970030 (NTSC preciso – A me non funziona, almeno non con H.264!)
- 24 (Dal fw 2.60)
- 23.976 (NTSC film – Dal fw 2.60)
- 15
- 14.985 (Forse, qualcuno dice di provare)
È facile notare che del caro 25 PAL non c’è traccia…
L’audio è sempre in formato AAC. Bitrate suggeriti:
- 32
- 64
- 96
- 128
Il container è un MP4 modificato da Sony. Un tempo serviva una versione separata di ffmpeg, ora basta quella standard con -f psp. Dal firmware 2.80 è supportato anche il container MP4 standard.Formato MPEG4:
- Bitrate massimo video: 450 kbps
- Bitrate massimo audio: 128 kbps
- Frequenza di campionamento audio: 24000 Hz (non so se ci siano altri valori supportati)
- Nome file obbligato: M4Vxxxxx.MP4
- Cartella obbligata: /MP_ROOT/100MNV01
- Dal fw 2.80 pare che i file possano avere nome qualunque e vadano messi in /PSP/VIDEO (o /VIDEO???)Formato H.264:
- Bitrate sicuramente supportati:
– 300
– 380
– 512
– 768
Forse va bene addirittura qualsiasi bitrate.
- Il framerate 29.970030 NON funziona con H.264. Usare -r 29.97.
- Nome file obbligato: MAQxxxxx.MP4
- Cartella obbligata: /MP_ROOT/100ANV01 (pare funzioni anche /MP_ROOT/101ANV01)
- Dal fw 2.80 pare che i file possano avere nome qualunque e vadano messi in /PSP/VIDEO (o /VIDEO???)
Chi è interessato a vedere come far fruttare tutte queste informazioni legga l’articolo intero :).
Vediamo come procedere. Quanto segue è stato testato sulla mia PSP, che monta firmware 2.71 SE, ed è stato codificato con la versione SVN di ieri (21/11/2006) di ffmpeg.
Il primo passo consiste nell’estrazione del video dal DVD. Come ormai sanno anche le prugne, i DVD sono crittati, quindi la cosa non è immediata. Ma non è nemmeno complessa, grazie a vobcopy (che in realtà usa libdvdcss). Dobbiamo solo capire quale titolo del DVD ci interessa. Per farlo basta utilizzare un qualunque player (io ho usato Kaffeine), e così scopriamo che il video di Martyr è il primo titolo. A questo punto basta lanciare:
sukko@unholycathedral tmp $ mount /mnt/lg sukko@unholycathedral tmp $ vobcopy -n 1 -b 100k Vobcopy 1.0.0 - GPL Copyright (c) 2001 - 2006 robos@muon.de [Hint] All lines starting with "libdvdread:" are not from vobcopy but from the libdvdread-library [Info] Path to dvd: /dev/hdc libdvdread: Using libdvdcss version 1.2.9 for DVD access [Info] Name of the dvd: DEPECHE_MODE_MARTYR [Info] There are 6 titles on this DVD. [Info] There are 6 chapters on the dvd. [Info] Most chapters has title 1 with 1 chapters. [Info] There are 6 angles on this dvd. [Info] Using Title: 1 [Info] Title has 1 chapters and 1 angles [Info] Using Chapter: 1 [Info] Using Angle: 1 libdvdread: Attempting to retrieve all CSS keys libdvdread: This can take a _long_ time, please be patient libdvdread: Get key for /VIDEO_TS/VIDEO_TS.VOB at 0x00000129 libdvdread: Elapsed time 0 libdvdread: Get key for /VIDEO_TS/VTS_01_0.VOB at 0x00000204 libdvdread: Elapsed time 0 libdvdread: Get key for /VIDEO_TS/VTS_01_1.VOB at 0x00000383 libdvdread: Elapsed time 0 libdvdread: Get key for /VIDEO_TS/VTS_02_0.VOB at 0x0001d3d3 libdvdread: Elapsed time 0 libdvdread: Get key for /VIDEO_TS/VTS_02_1.VOB at 0x0001d486 libdvdread: Elapsed time 0 libdvdread: Get key for /VIDEO_TS/VTS_03_0.VOB at 0x0001d60f libdvdread: Elapsed time 0 libdvdread: Get key for /VIDEO_TS/VTS_03_1.VOB at 0x0001d6c2 libdvdread: Elapsed time 0 libdvdread: Get key for /VIDEO_TS/VTS_04_0.VOB at 0x00027cc9 libdvdread: Elapsed time 0 libdvdread: Get key for /VIDEO_TS/VTS_04_1.VOB at 0x00027d7c libdvdread: Elapsed time 0 libdvdread: Found 4 VTS's libdvdread: Elapsed time 0 [Info] DVD-name: DEPECHE_MODE_MARTYR [Info] Outputting to DEPECHE_MODE_MARTYR1-1.vob [Info] Removed ".partial" from DEPECHE_MODE_MARTYR1-1.vob.partial since it got copied in full [Info] Successfully copied file DEPECHE_MODE_MARTYR1-1.vob [Info] Copying finished! Let's see if the sizes match (roughly) [Info] Combined size of title-vobs: 243259392 (232 MB) [Info] Copied size (size on disk): 243259392 (232 MB) [Info] Everything seems to be fine, the sizes match pretty good ;-) [Hint] Have a lot of fun!
Notare 2 cose:
1. Il DVD va montato prima di effettuare l’estrazione.
2. Il parametro -b 100k, che è necessario perché altrimenti, nel video estratto, rimane un pezzo del menù del disco all’inizio. Tale parametro dice semplicemente a vobcopy di saltare i primi 100 Kb. Ovviamente “100k” è un valore che ho trovato a caso, facendo diverse prove.
Ci ritroviamo così con un file DEPECHE_MODE_MARTYR1-1.vob, che ffmpeg è in grado di leggere nativamente. Possiamo quindi passare alla fase di transcodifica. Vediamo la cosa passo-passo per entrambi i formati supportati dalla PSP.
Formato MPEG-4
MPEG-4 è un buon codec (il famoso DivX/XviD), e dà ottimi risultati. Inoltre questi file sono leggibili da tutte le PSP. Lanciamo quindi il comando:
sukko@unholycathedral tmp $ ffmpeg -y -i DEPECHE_MODE_MARTYR1-1.vob -f psp -title "Depeche Mode - Martyr" -s 368x208 -b 400k -r 29.97 -ar 24000 -ab 128 M4V00001.MP4 FFmpeg version SVN-r7150, Copyright (c) 2000-2006 Fabrice Bellard, et al. configuration: --prefix=/usr --disable-debug --enable-gpl --enable-mp3lame --enable-libogg --enable-vorbis --enable-faad --enable-faac --enable-libgsm --enable-xvid --enable-a52 --enable-pp --enable-shared --enable-pthreads --enable-amr_nb --enable-amr_wb --enable-x264 --enable-dts libavutil version: 49.1.0 libavcodec version: 51.25.0 libavformat version: 51.6.0 built on Nov 22 2006 01:08:24, gcc: 3.4.6 Input #0, mpeg, from 'DEPECHE_MODE_MARTYR1-1.vob': Duration: 00:03:22.2, start: 0.487267, bitrate: 9624 kb/s Stream #0.0[0xa0]: Audio: pcm_s16be, 48000 Hz, stereo, 1536 kb/s Stream #0.1[0x1e0]: Video: mpeg2video, yuv420p, 720x576, 9800 kb/s, 25.00 fps(r) Output #0, psp, to 'M4V00001.MP4': Stream #0.0: Video: mpeg4, yuv420p, 368x208, q=2-31, 400 kb/s, 29.97 fps(c) Stream #0.1: Audio: aac, 24000 Hz, stereo, 128 kb/s Stream mapping: Stream #0.1 -> #0.0 Stream #0.0 -> #0.1 Press [q] to stop encoding frame= 6074 q=2.0 Lsize= 12191kB time=202.5 bitrate= 493.2kbits/s video:8325kB audio:2036kB global headers:0kB muxing overhead 17.669849%
Note:
- -f psp: Questo è lo switch che dice a ffmpeg di utilizzare il formato del container modificato da Sony per la PSP.
- -title "...": Stabilisce il “commento” con cui il video comparirà nel menù della PSP.
- -b 400k: Notare il ‘k’…
- -ar 24000: La PSP ha il singolare requisito che l’audio dei video MPEG-4 abbia una frequenza di campionamento di 24 KHz. Non so se esistano altri valori supportati, ma questo funziona sicuramente.
- M4V00001.MP4: I video MPEG-4 devono obbligatoriamente avere un nome simile a questo, in cui è possibile cambiare solo le ultime quattro cifre (forse anche la quintultima), e vanno obbligatoriamenti messi sulla memory stick nella cartella /MP_ROOT/100MNV01. Questo non è vero se la vostra PSP monta un firmware >= 2.80, il quale legge i video dalla cartella /PSP/VIDEO (o forse /VIDEO), qualunque nome abbiano.
Formato H.264:
H.264/AVC (Advanced Video Coding), noto anche con il nome di MPEG-4 Parte 10, è un codec sviluppato per essere facilmente implementabile su qualunque tipo di periferica (dai televisori HDTV ai cellulari) ottenendo un’ottima qualità di riproduzione anche a bassi bitrate. Per questo, è il formato consigliato per la codifica di video per la PSP. ffmpeg supporta questo formato grazie a x264, un’implementazione libera del codec, mentre la PSP lo supporta dal firmware 2.00. Lanciamo il seguente comando:
sukko@unholycathedral tmp $ ffmpeg -y -i DEPECHE_MODE_MARTYR1-1.vob -f psp -title "Depeche mode - Martyr" -s 368x208 -b 400k -r 29.97 -vcodec h264 -coder 1 -g 250 -ab 128 MAQ00001.MP4 FFmpeg version SVN-r7150, Copyright (c) 2000-2006 Fabrice Bellard, et al. configuration: --prefix=/usr --disable-debug --enable-gpl --enable-mp3lame --enable-libogg --enable-vorbis --enable-faad --enable-faac --enable-libgsm --enable-xvid --enable-a52 --enable-pp --enable-shared --enable-pthreads --enable-amr_nb --enable-amr_wb --enable-x264 --enable-dts libavutil version: 49.1.0 libavcodec version: 51.25.0 libavformat version: 51.6.0 built on Nov 22 2006 01:08:24, gcc: 3.4.6 Input #0, mpeg, from 'DEPECHE_MODE_MARTYR1-1.vob': Duration: 00:03:22.2, start: 0.487267, bitrate: 9624 kb/s Stream #0.0[0xa0]: Audio: pcm_s16be, 48000 Hz, stereo, 1536 kb/s Stream #0.1[0x1e0]: Video: mpeg2video, yuv420p, 720x576, 9800 kb/s, 25.00 fps(r) Output #0, psp, to 'MAQ00001.MP4': Stream #0.0: Video: h264, yuv420p, 368x208, q=2-31, 400 kb/s, 29.97 fps(c) Stream #0.1: Audio: aac, 48000 Hz, stereo, 128 kb/s Stream mapping: Stream #0.1 -> #0.0 Stream #0.0 -> #0.1 [h264 @ 0xb7d73008]using SAR=208/207 [h264 @ 0xb7d73008]using cpu capabilities MMX MMXEXT SSE SSE2 3DNow! Press [q] to stop encoding frame= 6074 q=17396069.0 Lsize= 14169kB time=202.6 bitrate= 573.0kbits/s video:8939kB audio:3151kB global headers:1kB muxing overhead 17.184340% [h264 @ 0xb7d73008]slice I:48 Avg QP:27.29 size: 5230 [h264 @ 0xb7d73008]slice P:6026 Avg QP:29.80 size: 1810 [h264 @ 0xb7d73008]mb I I16..4: 50.2% 0.0% 49.8% [h264 @ 0xb7d73008]mb P I16..4: 16.6% 0.0% 0.0% P16..4: 46.3% 0.0% 0.0% 0.0% 0.0% skip:37.2% [h264 @ 0xb7d73008]final ratefactor: 28.73 [h264 @ 0xb7d73008]SSIM Mean Y:0.9446889 [h264 @ 0xb7d73008]kb/s:440.3
Note:
- -vcodec h264: Questo switch dice a ffmpeg di utilizzare il codec H.264.
- -coder 1 -g 250: Questi due switch definiscono alcuni parametri di encoding assolutamente essenziali per la PSP: omettendoli il video non sarà riconosciuto. Forse, viene riconosciuto dai firmware >= 2.80, ma è meglio metterli comunque, in modo che sia leggibile anche dalle PSP dotate di firmware più vecchio.
- MAQ00001.MP4: Similmente al caso precedente, i video H.264 devono obbligatoriamente avere un nome simile a questo, e vanno obbligatoriamente messi nella cartella /MP_ROOT/100ANV01, a meno che non abbiate una versione del firmware >= 2.80.
È tutto. Alcuni parametri possono essere modificati, tenendo conto di quanto scritto all’inizio di questo articolo, altrimenti vi ritroverete con un file illeggibile. Inoltre, i miei lettori più smaliziati, utilizzando le informazioni di questo articolo e dei precedenti, dovrebbero ora essere in grado di convertire un DVD in modo da poterlo vedere sul cellulare, o un video di YouTube/Google Video per PSP (con qualunque firmware). Enjoy ;).
Secondo me l’unico modo che hai per trovare il tempo di fare queste cose senza doverlo fare per forza, ma per puro divertimento, anche dopo una laurea e con un lavoro e una donna, è quello di trovarti un lavoro tipo quello che facevi al CCL.