sábado, 30 de octubre de 2010

Descargando video y fotografías de una cámara digital en Linux ...de la manera difícil.

Soy poseedor de una Nikon CoolPix L14, una cámara buena, pero vieja en la actualidad que si alguien te la ofrece, mejor seria que te la regale. Este modelo de cámara me presenta un problema al intentar bajar vídeos capturados de un tamaño mayor a 1 giga.

Según pude observar, el problema se presenta tanto en Windows XP como en Linux, en el primero solo se puede bajar el archivo utilizando el programa Nikon Transfer que viene con la cámara, ya que al intentar con el Explorador de Windows este se corta y produce errores continuamente y en el segundo solo se puede utilizando gPhoto2 desde la consola, ya que al acceder por Nautilus este deja de responder.



¿Que sucede al conectar la cámara?
En el caso de Linux, al conectar la cámara, esta es montada usando USBFS como driver. USBFS es un driver que crea una partición dinámica en /proc/bus/usb y sirve como medio para enviar y recibir mensajes al dispositivo usb conectado; y este driver se utiliza generalmente cuando no hay un driver del kernell especifico para el dispositivo.

Después de conectada la cámara, esta es detectada y montada por el proceso gvfs-gphoto2-volume-monitor el cual la hace accesible a través de Nautilus que usara gvfsd-gphoto2 para poder manejar los archivos que se encuentran en la cámara. Y aquí es donde empiezan los problemas para leer los vídeos muy grandes.

Como no tengo tiempo ni la experiencia para debuguear y ver que es lo que produce el problema, he intentado acceder de otra manera, la cual a funcionado y he podido bajar los archivos sin problemas accediendo desde la consola utilizando gPhoto2.

A continuación detallo los pasos:

Para el proceso necesitaras tener instalado gPhoto2, para eso, ejecutamos el siguiente comando en la consola como administrador:
# yum install gphoto2
Esto instalara gPhoto2 y todas las librerías necesarias. Cuando termines, vuelve a tu usuario normal. Ahora conectamos la cámara y ejecutamos el siguiente comando en la consola:
$ usb-devices
...y entre los resultados encontraremos uno parecido al siguiente:
[Manny@localhost ~]$ usb-devices 
T:  Bus=02 Lev=01 Prnt=01 Port=05 Cnt=04 Dev#=  6 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=04b0 ProdID=016b Rev=01.00
S:  Manufacturer=NIKON
S:  Product=NIKON DSC COOLPIX L14-PTP
S:  SerialNumber=000037119630
C:  #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=06(still) Sub=01 Prot=01 Driver=usbfs
Con esta información confirmamos que tenemos la cámara conectada y detectada, Nautilus seguramente ya la habrá montado automáticamente si tenemos el proceso gvfs-gphoto2-volume-monitor corriendo y nos mostrara el siguiente mensaje:


Hacemos clic en el botón "Desmontar", ya que si no lo hacemos no podremos utilizar gphoto2 para acceder a la cámara. Volvemos a la consola y escribimos el siguiente comando:
$ gphoto2 --list-ports
...y obtenemos el siguiente resultado:
Dispositivos encontrados: 6
Ruta                             Descripción
--------------------------------------------------------------
ptpip:                           PTP/IP Connection               
serial:/dev/ttyS0                Puerto serie 0                  
serial:/dev/ttyS1                Puerto serie 1                  
serial:/dev/ttyS2                Puerto serie 2                  
serial:/dev/ttyS3                Puerto serie 3                  
usb:                             Universal Serial Bus
Nos devuelve todos los puertos (USB o Serie) en los cuales es posible conectar una cámara y de los cuales tenemos permisos de escritura. Si el puerto por el cual se conecta tu cámara no se encuentra presente, este tutorial no te podrá ayudar a resolverlo. Si el puerto se encuentra presente, escribimos el siguiente comando para que gphoto2 auto detecte nuestra cámara y el puerto (Esto solo funciona si tu cámara no utiliza un puerto Serie para conectarse):
$ gphoto2 --auto-detect
...y obtenemos el siguiente resultado:
Modelo                         Puerto                                          
----------------------------------------------------------
USB PTP Class Camera           usb:
Nuestra cámara fue detectada, ahora probemos la comunicación con el siguiente comando:
$ gphoto2 --summary
Obtenemos:
Resumen de la cámara:                                                          
Manufacturer: Nikon Corporation
Model: L14 
  Version: COOLPIX L14V1.0
  Serial Number: 000037119630
Vendor Extension ID: 0xa (1.0)
Vendor Extension Description: microsoft.com: 1.0; Nikon PTP Extensions

Capture Formats: JPEG
Display Formats: JPEG, Association/Directory, DPOF, MS AVI, Defined Type
Supported MTP Object Properties:
 JPEG/3801: dc01/StorageID dc02/ObjectFormat dc03/ProtectionStatus dc04/ObjectSize dc07/ObjectFileName dc0b/ParentObject dc41/PersistantUniqueObjectIdentifier dc44/Name dc87/Width dc88/Height dcd3/ImageBitDepth***CONTINUA***
El resultado del comando va a variar según la cámara, en este caso fue cortado porque era muy largo, pero el objetivo era probar que teníamos una correcta comunicación con la cámara al ver que gphoto2 pudo obtener información de ella. Ahora veamos que archivos se encuentran en la cámara, para eso lanzamos el comando:
$ gphoto2 --list-files
...y obtenemos:
There is no file in folder '/'.                                                
There is no file in folder '/store_00010001'.                                  
There is no file in folder '/store_00010001/DCIM'.
There are 35 files in folder '/store_00010001/DCIM/100NIKON'.
#1     DSCN1725.AVI               rd 943993 KB video/x-msvideo
#2     DSCN1726.JPG               rd  2039 KB 3072x2304 image/jpeg
#3     DSCN1727.JPG               rd  2039 KB 3072x2304 image/jpeg
#4     DSCN1728.JPG               rd  1944 KB 3072x2304 image/jpeg
#5     DSCN1729.JPG               rd  1847 KB 3072x2304 image/jpeg
#6     DSCN1730.JPG               rd  1693 KB 3072x2304 image/jpeg
#7     DSCN1731.JPG               rd  1985 KB 3072x2304 image/jpeg
Hay varias carpetas dentro de la cámara y múltiples tipos de archivos posibles según la cámara, en este caso hay imágenes JPEG y un archivo de video AVI. Ahora necesitamos bajar todos esos archivos a nuestro equipo, para eso ejecutamos el comando:
$ gphoto2 --get-all-files
El comando hará que gphoto2 baje todos los archivos que están en la cámara a nuestro equipo en el directorio de donde se ejecuto el comando
Descargando 'DSCN1725.AVI' de la carpeta '/store_00010001/DCIM/100NIKON'...    
Downloading... |-                                            |   3,1%    16m47s
Ahora solo resta esperar que se termine de bajar los archivos, para luego disfrutar de nuestras fotos y vídeos.

1 comentario:

ThecaTTony dijo...

Gracias por el dato, tengo una de esas y nunca se llevó bien con mi Linux.