lunes, 12 de noviembre de 2012

Conversión CBR a PDF. El poder del terminal de Linux

Para aquellos que no creen en el poder -y la comodidad- del terminal de Linux, vamos a poner un ejemplo. Como ya habíamos dicho, mi interés por la "tablet "Nexus 7 nace en la necesidad de leer cómodamente los libros científicos con fotos y formulas; secundariamente, podemos leer también comics. En la Nexus uso de lector Aldiko, que no lee los CBR (Comic Book Rar). Aunque no fuera así, rar es un formato privativo, así que es mejor cambiarlo; idealmente deberíamos pasarlo a djvu, pero para poder leerlos en cualquier dispositivo, la transformación más sencilla es a PDF. Lo podemos hacer de forma gráfica.
1. Descomprimir los CBR a las imágenes JPG que los compone
2. Convertir los jpg en PDF
3. Borrar el CBR

Como es natural, eso es muy cómodo para hacer uno, pero para hacer 210, como era mi intención, es muy cansado; cuando llevas 10 ya no puedes más. La solución, el terminal. El que hice (cbr2pdf v.0.1Alpha) era bastante deficiente, por lo que hckorootx lo ha mejorado muchas veces (sustituyendo el rename por una versión de mv que sirva para todas las distribuciones) hasta llegar a la versión 0.7RC, que podemos pasar a 1.0 stable.
El script es así

#!/bin/bash

# Cambio de espacios por guiones bajos en todos los .cbr
for fichero_cbr in *.cbr; do
        if [[ "$fichero_cbr" != "${fichero_cbr// /_}" ]]; then
                mv "$fichero_cbr" "${fichero_cbr// /_}"
        fi
done

# Descompresión, cambio de .JPG a .jpg (si es que hay .JPG) y conversión a PDF
for fichero_cbr in *.cbr; do
        unrar e $fichero_cbr
        for fichero_JPG in *.JPG; do
                mv "$fichero_JPG" "${fichero_JPG//.JPG/.jpg}" 2> /dev/null
        done
        convert *.jpg "${fichero_cbr//.cbr/.pdf}"
        rm $fichero_cbr
        rm *.jpg
done

# Fin del script


El resultado es este:





Este es solo una muestra con solo 10 ejemplares de un famoso comic nacional. Los 210 tardaron solo 10 minutos. Este es un ejemplo del poder del terminal.

14 comentarios:

  1. Me gusta el script, aunque es mejor usar Perfect Viewer. Éste te lee los CBR sin ningún tipo de problema, sin tener que andar convirtiendo nada a PDF.

    Es el mejor lector de Manga/Comics que hay para Android.

    https://play.google.com/store/apps/details?id=com.rookiestudio.perfectviewer&hl=es

    ResponderEliminar
  2. La instalaré en la Nexus para probar. De todas formas con el script y aldiko estoy cubierto.

    ResponderEliminar
  3. Necesito mas ayuda, no se muy bien como se ejecuta un script, si se guarda o que...
    copié todo eso en el terminal y nada

    ResponderEliminar
    Respuestas
    1. Como indica la primera línea

      #!/bin/bash

      es un script en bash. Lo grabas como fichero de texto plano y lo ejecutas

      a veces simplemente

      . nombre.fichero

      y listo

      Eliminar
    2. ya te digo, soy muy torpe, sera que soy nuevo en esto....
      abro un editor de texto y escribo simplemente:

      #!bin/bash

      y lo guardo con que extension y/o nombre?

      Y luego que?

      Gracias

      Eliminar
    3. Por pasos,
      1. Introduces todo este texto en un fichero de texto plano (gedit, kwrite, nano o lo que quieras)

      #!/bin/bash

      # Cambio de espacios por guiones bajos en todos los .cbr
      for fichero_cbr in *.cbr; do
      if [[ "$fichero_cbr" != "${fichero_cbr// /_}" ]]; then
      mv "$fichero_cbr" "${fichero_cbr// /_}"
      fi
      done

      # Descompresión, cambio de .JPG a .jpg (si es que hay .JPG) y conversión a PDF
      for fichero_cbr in *.cbr; do
      unrar e $fichero_cbr
      for fichero_JPG in *.JPG; do
      mv "$fichero_JPG" "${fichero_JPG//.JPG/.jpg}" 2> /dev/null
      done
      convert *.jpg "${fichero_cbr//.cbr/.pdf}"
      rm $fichero_cbr
      rm *.jpg
      done

      # Fin del script

      2. Después lo guardas con el nombre que quieras, con o sin extensión (por ejemplo cbr2pdf, por que así sabes de que va el script). si queremos ser muy puristas, le podemos dar una extensión sh (lo que indica que es un SHell script, en general en lenguaje bash), y así sabemos con certeza, meses después, que significa ese fichero cbr2pdf.sh (script bash que convierte cbr a pdf)

      3. Le damos permiso de ejecución al script (ya que si no el fichero recién generado no tendrá permiso de ejecución y al ordenarlo no lo permitirá). Como verás después, no siempre es necesario

      su -c 'chmod +x cbr2pdf'

      o también, si usas sudo

      sudo chmod +x cbr2pdf

      4. Lo ejecutas; diferentes posibilidades
      4.a. Directamente, y si si tiene permiso de ejecución
      ./cbr2pdf.sh

      4.b. Sin permiso de ejecución
      sh cbr2pdf.sh

      4.c. Directamente, aun sin derechos de ejecución, aunque ahora estoy dudando (fíjate que hay un espacio entre . y el nombre del fichero)
      . cbr2pdf.sh

      El nombre puede ser incluso solo una letra

      Eliminar
    4. ok, estoy probandolo, por ahora me ha borrado alguno archivos, asi que sigo hasta dar con la tecla y ya comento

      de nuevo gracias

      Eliminar
    5. Claro que te borra ficheros. Al terminar, formado el pdf, borra el cdr y los jpg (rm es la abreviatura de remove). Te recomendaría hacer todas las pruebas en un directorio aparte con copias de los cbr originales, que mantienes en otro sitio.

      Eliminar
    6. Claro que te borra ficheros. Al terminar, formado el pdf, borra el cdr y los jpg (rm es la abreviatura de remove). Te recomendaría hacer todas las pruebas en un directorio aparte con copias de los cbr originales, que mantienes en otro sitio.

      Eliminar
    7. Ha sido my util :) ¡muchas gracias!

      Eliminar
  4. vale, me vuelve a fallar, creo que el problema esta en la fila 16:
    convert *.jpg "${fichero_cbr//.cbr/.pdf}"

    en el terminal me pone algo como esto:
    ./cbr2pdf: línea 16: convert: orden no encontrada

    y por eso se pierde de algna manera el contenido

    ResponderEliminar
  5. convert forma parte del paquete imagemagick. Tendrás que instalar imagemagick
    En Fedora (0 sudo si lo has instalado y configurado)
    su -c 'yum install imagemagick'

    En Ubuntu, debian
    sudo apt-get install imagemagick

    Si no te gusta el terminal, en synaptic, packagekit, yumex o la aplicación gráfica que tenga su distribución para instalar paquetes también la pueden instalar en gráfico

    ResponderEliminar
    Respuestas
    1. Bien, ya funcionó todo perfect, muchas gracias, eres de buena ayuda

      Eliminar
  6. Sugerencia para la descompresión, sobreescribir archivos, por ejemplo, si hay Thumbs.db
    unrar e -o+ $fichero_cbr

    ResponderEliminar