GNU/Linux y nuestra amada PSP

Bueno... si tenéis la suerte de contar con una PSP os habréis fijado que aunque la scene pertenece casi por completo al mundo GNU/Linux, las utilidades para PC relacionadas con la PSP suelen ser para sistemas windoze/hasefroch. La razón es muy simple: en GNU/Linux no nos hacen falta programas extraños... lo tenemos todo a nuestra disposición, así que... manos a la obra!

El soporte USB de linux y nuestra PSP

Pues nada, enchufad la PSP a algún USB de nuestro PC, ahora, en la PSP activáis el Modo Conexión USB. Si al cabo de unos segundos ejecutáis:

$ dmesg

Veréis que al final aparecerá un nuevo dispositivo USB de Sony... ¿adivináis cuál? pues si... la PSP funciona perfectamente como USB Mass Storage Device, así que ya sólo nos falta montarlo.

Montar correctamente la PSP

Tal vez se monte automáticamente la PSP al enchufarla, también veréis que podéis montarla directamente como VFAT sin más, sin embargo, esto puede traeros problemas porque los nombres de ficheros en la MemoryStick deben tener la misma capitalización que se espera de ellos, esto es: si un archivo tiene que tener su nombre en mayúsculas, hay que ponerlo así o no funcionará. Si usáis la PSP tal cual se monta automáticamente o como dispositivo VFAT veréis que si creáis un fichero con todas sus letras en mayúsculas luego con ls aparece en minúsculas (aunque en realidad, en la MS sí se grabó en mayúsculas). Para evitar este pequeño lío añadiremos la siguiente fila al archivo fstab:

/dev/sda1 /mnt/psp vfat shortname=win95,check=s,rw,user,noauto 0 0

Debéis crear el directorio /mnt/psp o podéis usar /media/psp, como queráis. Como véis, lo montamos como VFAT pero especificando que los nombres cortos se usarán al estilo de Hasefroch95 y respetando la capitalización del sistema de ficheros. Bien, ahora ya podemos montar correctamente la PSP:

$ mount /mnt/psp

Grabando música y fotos

Bien, para grabar MP3 lo único que debemos hacer es meterlos en la carpeta /mnt/psp/PSP/MUSIC.
Para subir fotos, grabaremos nuestros JPG's y PNG's en la carpeta /mnt/psp/PSP/PHOTO.
Los formatos aceptados por la PSP varían según el firmware de la consola, yo uso el 1.50 (por razones evidentes) y puedo cargar también TIFF's (creo... la verdad que no lo he probado).

Pasando vídeos

Bueno... para esto necesitáis el ffmpeg de la ultimísima versión que podáis pillar, es decir, la de la rama sid/unstable. Recordad que podéis encontrarlo en el repositorio de marillat.
Antes de subir un vídeo tenemos que recodificarlo:

$ ffmpeg -i video-in.avi -f psp -title "Titulo" -r 29.97 -b 768 -ar 24000 -ab 32 -s 320x240 video-out.avi

Salvo la resolución, el resto de parámetros podéis cambiarlos para mejorar la calidad o el espacio del video en la MS. Los parámetros podéis consultarlos en la página del manual del ffmpeg... que tampoco os voy a dar todo mascadito!!. En breve intentaré modificar un script de un crysoliano para encodear pelis realizando autocropping y cosas así usando el mencoder.

Una vez tenemos el nuevo vídeo, lo renombramos a M4V00001.MP4, lo de 00001 es el orden, por si tenemos más vídeos pues 00002, 00003, etc. Para que la PSP lea esos vídeos deben estar en la carpeta /mnt/psp/MP_ROOT/100MNV01.

Si deseámos que salga la fotillo del vídeo en el menú de la PSP sólo debemos crear un JPG de 160x120 y llamarle de igual forma que el vídeo (y en la misma carpeta) pero con extensión THM. Si queréis sacar un fotograma directamente de la peli:

$ ffmpeg -y -i video-out.avi -f mjpeg -ss 1 -vframes 1 -s 160x120 -an M4V00001.THM

El fichero que se creará es M4V00001.THM pero debéis llamarlo de la misma forma que el vídeo (si es que cambiasteis el nombre del vídeo). Como véis (y si no ya os lo digo) lo de -ss 1 significa que coja el fotograma del segundo 1, modificadlo si queréis otro fotograma. Y recordad que los thumbs van en el mismo directorio que los vídeos.

Bueno, eso es todo, intentaré hacer más recetillas sobre la PSP y el GNU/Linux, ok?

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

titulo del video

Holas:
Yo para convertir las pelis y videos ejecuto:
$ ffmpeg -i video.avi -f psp -title "Titulo" -r 14.985 -b 768 -ar 24000 -ab 128 -s 368x208 M4V00100.MP4

Se ve y se oye de miedo. Si pongo los frames a 29,97 el video va muy acelerado y si pongo el bitrate del sonido a 32, se oye muy bajito y mal.
La resolucion la pongo a 368x208 porque es el tamaño de la pantalla y si lo pongo a menos, al hacer zoom o fullscreen se distorsiona la imagen.

Por otro lado, no consigo que me identifique el título.
Lo ponga entre comillas: -title "Titulo"
Lo ponga con comillas simples -title 'Titulo'
Lo ponga sin comillas: -title Titulo
Nada de nada, en la PSP me aparece sin título.

¿A alguien le aparece el titulo al convertir el video a mp4 o soy un caso perdido?

El firmware de mi maquina es 2.60

Un saludeT

Imagen de int-0

Titulo del video en psp...

Pues mirando en foros mucha gente pregunta por ese mismo problema y no hay ninguna respuesta... por lo visto en la version CVS del ffmpeg lo tienen arreglado. Si abres el video con XINE verás que SI aparece el título... enfins... cosas raras...

En cuanto a lo de tu framerate y tal... claro... tu tienes un firmware 2.60, con otros codecs y tal... nosotros (creo q los que participamos en el hilo) usamos el 1.50, que tiene unos codecs un tanto "antiguos"... ¿por qué no actualizamos? pues yo personalmente porque quiero usar esa pequeña maravilla para otras cosas a parte de para jugar... Tus parametros pueden no funcionar con firmwares mas antiguos (de hecho estoy casi seguro).
------------------------------------
init=/bin/bash to conquer the world!

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Mi PSP no lee el video!!

Pues eso, que despues de un par de horas pasando el reino de los cielos y otra hora y media (tengo el disco duro de datel) para pasar el archivo de mas de 700 megas a la consola, la psp no lo ve :S con el comando de la receta... puede tener algo que ver con el tamaño? el original ocupa giga y medio y tiene sonido 5.1 ac3, he dado por supuestro que ese comando me lo pasaria directamente a stereo, es asi?

Imagen de int-0

Lo pilla o no?

Te aparece el iconejo diciendo: DATOS NO COMPATIBLES o símplemente no aparece nada?. En cuanto al audio, no se si el ffmpeg, al especificarle el formato de salida (psp) será buen programa y recomprimirá el audio como deba hacerlo, si no es así tendremos que ver lo que debemos hacer para especificarlo nosotros... no? pues eso...

Si no te aparece nada resulta que no tienes el video donde debe estar, crea bien los directorios y los nombres de archivo (y en mayúsculas!).

Si te aparece DATOS NO COMPATIBLES el problema será del audio...
------------------------------------
init=/bin/bash to conquer the world!

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

PSP Video - Problemas movimiento

Buenas a todos, espero que alguien me pueda ayudar con mi problema con los videos en la PSP. He googleado muchísimo y he hecho muchas pruebas y lo máximo que he conseguido es que el video lo reconozca mi PSP (firm. 2.01) con su título y todo, el video se reproduce correctamente hasta que algún píxel se mueve, vamos que con una imágen estática y el audio todo va bien pero en cuanto hay movimiento, pantalla negra. El mismo video si lo reproduzco en mi SuSE linux 10.0 (586) OSS, con cualquier reproductor (VLC, MPlayer, Kaffeine, Noatun...) la imágen se reproduce a tronpicones.
Tengo instalado lo siguiente:
- ffmpeg_0.4.9-4.pm.cvs20060201_i686.rpm
- faad2_2.0-0.pm.7_i686.rpm
y he probado con estos dos paquetes
- faac_1.24-0.pm.2_i586.rpm (sin suerte)
- faac-18102004-1.i686.rpm (creado por mí para sustituir las librerias del faac_1.24 porque ví que todo el mundo usaba las del 18-10-2004)

y además uso este scrip que he escrito para automatizar todo el proceso, os lo pego aquí para que lo uséis y mejoréis:

#!/bin/bash

SRCFILE="$1"
encdir=$HOME
title="$2"

DSTNAME=M4V$(printf '%05d' ${RANDOM})

# select destination directory, use last selected
##encdir=$(kdialog --title "¿Dónde quieres guardar el video(s)?" --getexistingdirectory $encdir) &&
# encdir not writable?
##while test ! -w "$encdir"
##do
##	kdialog --error "No tiene permiso para escribir en este directorio"
##	encdir=$(kdialog --title "¿Dónde quieres guardar el video(s)?" --getexistingdirectory $HOME)
##done


if [ -z $title ]
then title=$(kdialog --title "PSPRecode" --inputbox "Título:" "$2" 2> /dev/null)
fi

if [ -z $frate ]
then
	frate=$(kdialog --title "PSPRecode" --combobox "Framerate" 14.985 29.97 2> /dev/null)
	test -z "$frate" && exit
fi

if [ -z $vbitrate ]
then
	vbitrate=$(kdialog --title "PSPRecode" --combobox "Video Bitrate" 768 380 512 2> /dev/null)
	test -z "$vbitrate" && exit
fi

if [ -z $abitrate ]
then
	abitrate=$(kdialog --title "PSPRecode" --combobox "Audio Bitrate" 32 64 96 2> /dev/null)
	test -z "$abitrate" && exit
fi

#ffmpeg -i "${SRCFILE}" -b 380 -r 29.97 -s 368x208 -f mp4 -vcodec mpeg4 -aspect 4:3 -g 300 -me epzs -qmin 3 -qmax 9 -hq -acodec aac -ab 96 -ar 24000 -ac 2 -y "${DSTNAME}.MP4"
ffmpeg -y -i "${SRCFILE}" -pass 1 -passlogfile "${DSTNAME}" -title "${title}" -s 368x208 -r "${frate}" -b "${vbitrate}" -acodec aac -ac 2 -ar 24000 -ab "${abitrate}" -f psp "${DSTNAME}.MP4"
ffmpeg -y -i "${SRCFILE}" -pass 2 -passlogfile "${DSTNAME}" -title "${title}" -s 368x208 -r "${frate}" -b "${vbitrate}" -acodec aac -ac 2 -ar 24000 -ab "${abitrate}" -f psp "${DSTNAME}.MP4"
rm "${DSTNAME}-0.log"

ffmpeg -y -i "${SRCFILE}" -f mjpeg -ss 5 -vframes 1 -s 160x120 -an "${DSTNAME}.THM"


echo "${DSTNAME}.MP4 y ${DSTNAME}.THM generados."
kdialog --msgbox "${DSTNAME}.MP4 y ${DSTNAME}.THM generados."

#FIN

Lo podéis guardar como psp-recode.sh en /usr/local/bin y despues invocarlo con esta sintaxis: psp-recode.sh nombrevideo [titulo]

PSP Video - Correcto

El problema con el video estaba en el AVI fuente que el Avidemux me lo cortó mal (el jo**** packet vob). Si os sirve de información: he comprado una MemoryStick de SanDisk y me reproduce todos los videos sin problemas, sin embargo en la MemoryStick de MagicGate es imposible, ya que ésta lleva una protección para archivos con copyright, si os habéis fijado en las aplicaciones de Güindous hay un programa llamado Atomchanger.exe que se encarga de engañar a la PSP para que se crea que el video es original.
En resumen, todo de maravilla instalando los paquetes de packman para SuSE: ffmpeg_0.4.9-4.pm.cvs20060201_i686.rpm y faac_1.24-0.pm.2_i586.rpm. Y aquí os pongo mi script final (mejorable por supuesto) que os permite también elegir dónde guardar el video. Está probado con todos los valores posibles y mi PSP Type A firm:2.01 los reproduce con total soltura

#!/bin/bash
# Autor: Ivanvega (ivanvegacbr@gmail.com)

SRCFILE="$1"
encdir=$HOME
title="$2"

DSTNAME=M4V$(printf '%05d' ${RANDOM})

# select destination directory, use last selected
encdir=$(kdialog --title "¿Dónde quieres guardar el video(s)?" --getexistingdirectory $encdir) &&
# encdir not writable?
while test ! -w "$encdir"
do
	kdialog --error "No tiene permiso para escribir en este directorio"
	encdir=$(kdialog --title "¿Dónde quieres guardar el video(s)?" --getexistingdirectory $HOME)
done


if [ -z $title ]
then title=$(kdialog --title "PSPRecode" --inputbox "Título:" "$2" 2> /dev/null)
fi

if [ -z $resol ]
then
	resol=$(kdialog --title "PSPRecode" --menu "Resolución" 320x240 "320x240  (4:3)" 368x208 "368x208 (16:9)" 2> /dev/null)
	test -z "$resol" && exit
fi

if [ -z $frate ]
then
	frate=$(kdialog --title "PSPRecode" --combobox "Framerate" 14.985 29.97 --default 29.97 2> /dev/null)
	test -z "$frate" && exit
fi

if [ -z $vbitrate ]
then
	vbitrate=$(kdialog --title "PSPRecode" --combobox "Video Bitrate" 768 512 380 2> /dev/null)
	test -z "$vbitrate" && exit
fi

if [ -z $abitrate ]
then
	abitrate=$(kdialog --title "PSPRecode" --combobox "Audio Bitrate" 32 64 96 128 --default 64 2> /dev/null)
	test -z "$abitrate" && exit
fi

BAR=`kdialog --progressbar "Codificando..." 4 --icon video --caption "Codificando video para PSP"`
#ffmpeg -i "${SRCFILE}" -b 380 -r 29.97 -s 368x208 -f mp4 -vcodec mpeg4 -aspect 4:3 -g 300 -me epzs -qmin 3 -qmax 9 -hq -acodec aac -ab 96 -ar 24000 -ac 2 -y "${DSTNAME}.MP4"
dcop $BAR setProgress 1
dcop $BAR setLabel "Primera pasada sobre $SRCFILE..."
ffmpeg -y -i "${SRCFILE}" -pass 1 -passlogfile "${DSTNAME}" -title "${title}" -s "${resol}" -r "${frate}" -b "${vbitrate}" -ar 24000 -ab "${abitrate}" -f psp "${encdir}/${DSTNAME}.MP4"
dcop $BAR setProgress 2
dcop $BAR setLabel "Segunda pasada. Creando $DSTNAME.MP4..."
ffmpeg -y -i "${SRCFILE}" -pass 2 -passlogfile "${DSTNAME}" -title "${title}" -s "${resol}" -r "${frate}" -b "${vbitrate}" -ar 24000 -ab "${abitrate}" -f psp "${encdir}/${DSTNAME}.MP4"
dcop $BAR setProgress 3
dcop $BAR setLabel "Generando imágen/icono $DSTNAME.THM..."
rm "${DSTNAME}-0.log"
ffmpeg -y -i "${SRCFILE}" -f mjpeg -ss 5 -vframes 1 -s 160x120 -an "${encdir}/${DSTNAME}.THM"
rm "gmon.out"
dcop $BAR setProgress 4
dcop $BAR close


echo "${DSTNAME}.MP4 y ${DSTNAME}.THM generados."
kdialog --msgbox "${DSTNAME}.MP4 y ${DSTNAME}.THM generados."

Lo podéis invocar como antes: psp-recode.sh nombre_video [título], sin las cuotas por supuesto.

Nos vemos y viva Linux y KDE (son mis gustos, jeje)

Imagen de int-0

Sincronizar vídeos en la PSP

Bien... leyendo por algunos foros he encontrado que el reproductor interno de la PSP trabaja con un framerate constante, mas concretamente 29.97 fps, por defecto el ffmpeg los deja a 25 fps, esto hace que los videos se desincronicen tanto. Si al codificar especificais el framerate (con -r 29.97) conseguiréis mayor sincronización. De todas formas, en un video de 2:45s se me han ido unos pocos fotogramas, esto me hace pensar que en realidad debo subir un poco más... tal vez a 30 fps. Si entre todos los interesados hacemos unas pruebas seguro que damos con la tasa correcta.

En la receta ahora viene especificado el framerate, viene 29.97 que, como digo, no es sincronización exacta pero si muy buena.
------------------------------------
init=/bin/bash to conquer the world!

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

He probado a convertir

He probado a convertir Madagascar y al visualizarla en la PSP el sonido se retrasa con respecto al video. Si avanzo un poquito la película se vuelve a sincronizar, pero mientras se reproduce se vuelve a retrasar. En el PC, con mplayer, por ejemplo, no sucede esto. ¿Sabeis qué puede ser?

Imagen de int-0

Razón no te falta...

Yo también me he dado cuenta de que el audio/video se desincroniza pero solo en la PSP... mis conocimientos sobre encoding son muy escasos como para poder averiguar porqué sucede esto. Si el problema se debe al proceso de codificación supongo que lo arreglaran en siguientes versiones de ffmpeg.

Ha aparecido un reproductor de video (XVid encapsulado en PMP) que
permite reproducir pelis con la máxima resolución de la PSP. Hasta ahora los encoders que hay sólo son para windoze... no lo he probado ni con wine... de que sepa algo lo comentaré... ok?
------------------------------------
init=/bin/bash to conquer the world!

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

He encontrado una solución

He probado con la siguiente combinación,

ffmpeg -i peli.avi -f psp -r 14.985 -s 320x240 -b 768 -ar 24000 -ab 32 M4V00002.MP4

creo que la fundamental es la opción "-r 14985" y ya no se desincroniza el audio respecto al video. Eso sí, he probado con Transporter 2, una película no muy larga, y me ha ocupado casi medio giga. En la web he visto ripeos que ocupan bastante menos para películas igual o más largas.

Pero bueno, de momento me sirve. Lo que sí que veo es que la reproducción no es tan nítida, sobre todo en escenas rápidas, como en el ordenador o en el reproductor divx del salón.

A ver si podemos pasar las películas con ffmpeg pronto al formato pmp.

Saludos.

Imagen de int-0

Reproducción más nítida y framerate

Bueno, para aumentar la calidad habrá que aumentar el bitrate, no? la opción -b 768 habrá que aumentarla (aunque el archivo ocupará más). En cuanto a lo de usar -r 14.985... ese framerate es muy bajo, no? la PSP lo soporta bien?

Estoy pensando en codificar con mencoder a doble pasada, que deja los videos niquelados y ocupando nada y luego recodificarlos con el ffmpeg ya al formato PSP...
------------------------------------
init=/bin/bash to conquer the world!

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Me da un error

Buenas soy muy novato en linux, de los que sigue paso a paso todo lo que ponen por que no entienda nada. xD Me da el siguiente error.

root@cul:/home/kovi# ffmpeg -i bob.avi -f psp -title "Naruto" -r 29.97 -b 768 -ar 24000 -ab 32 -s 320x240 video-out.avi ffmpeg version CVS, build 3276800, Copyright (c) 2000-2004 Fabrice Bellard
configuration: --extra-cflags=-fomit-frame-pointer -DRUNTIME_CPUDETECT --build i486-linux-gnu --enable-gpl --enable-pp --enable-zlib --enable-vorbis --enable-libogg --enable-theora --enable-a52 --enable-dts --enable-dc1394 --enable-libgsm --disable-debug --prefix=/usr
built on Oct 4 2006 10:57:36, gcc: 4.0.3 (Ubuntu 4.0.3-1ubuntu5)

Seems that stream 0 comes from film source: 30000.00 (30000/1) -> 23.98 (24000/1001)
Input #0, avi, from 'bob.avi':
Duration: 00:23:19.5, start: 0.000000, bitrate: 934 kb/s
Stream #0.0: Video: mpeg4, yuv420p, 640x480, 30000.00 fps
Stream #0.1: Audio: mp3, 48000 Hz, stereo, 192 kb/s
Output #0, psp, to 'video-out.avi':
Stream #0.0: Video: mpeg4, yuv420p, 320x240, 29.97 fps, q=2-31, 768 kb/s
Stream #0.1: Audio: 0x0000, 24000 Hz, stereo, 32 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
[mpeg4 @ 0x8336c48]removing common factors from framerate
Unsupported codec for output stream #0.1

Imagen de int-0

Tal vez sea...

...porque el archivo de salida lo pones .avi? no le veo mas diferencias... a lo mejor el ffmpeg de ubuntu tiene unas opciones diferentes a las de debian...
------------------------------------------
For Happy Lusers! Try this as root!
dd if=/dev/zero of=/dev/hda bs=1G count=10
------------------------------------------

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Imagen de brue

recordad...

... que con el firm open edition 3C+ de Dark Alex se pueden reproducir MP4s (AVC) fullscreen (480x272) y de un bitrate ilimitado. Para obtener una calidad similar a los UMDs basta con tener una peli en DVD ripeada sin recomprimir y usar el ffmpeg con un tamaño de video de 480x272 y un bitrate de 2000 Smiling

Por cierto, ¿sabéis que han robado las umd tools? Eye-wink Lástima que no sean soft libre y para más jodienda no corran sobre el kernel linux.

--
·brue

brue