Publi

  • Software de edición de vídeo libre para GNU/Linux

    Edición de vídeo en GNU/Linux

    Me gusta mucho la edición de vídeo. Es una tarea que me relaja desde hace mucho tiempo. Y si puedo meter algún efecto de vez en cuando, mejor. Me encanta investigar e inventar. Aunque, a veces, la mejor forma de transmitir conocimiento, una idea o dar a conocer tu trabajo es de forma audiovisual.

    Aquí viene el dilema, desde hace más de 10 años soy usuario exclusivo de GNU/Linux. Al principio, como muchas personas, empecé haciendo arranque dual con Windows, aunque siempre he sido de no apagar el ordenador, de dejarlo por la noche haciendo algo, o al menos encendido para seguir por donde me quedé el día anterior (costumbre que empezó con Windows, porque al hibernar o al suspender tenía muchos problemas para levantar de nuevo el estado del equipo, incluso con los drivers oficiales y actualizados de todo; aunque en GNU/Linux también me ha pasado alguna vez).… Leer artículo completo

  • Experimento: Creando un nuevo efecto de imagen para el secuenciador de vídeo de Blender (VSE) con código fuente


    Lo que pongo aquí es solo un experimento. Como dije en mi anterior post, me encanta Blender para hacer montajes de vídeo y para mí, es el mejor editor de vídeo disponible para GNU/Linux. Aunque tiene un pequeño defecto, bueno, muy grande… apenas tiene efectos para los vídeos, por lo que si quieres algún efecto que no sea un crossfade, una corrección de color, o un blur, vas a tener que hacerlo de otra forma y eso implica exportar vídeo y luego importarlo cuando esté hecho.… Leer artículo completo

  • ¿Qué son y cómo utilizar direcciones IP flotantes en DigitalOcean? [Vídeo]

    Un problema que teníamos los que utilizamos los servicios de Digital Ocean es que cuando paras una máquina para realizar una actualización, la dirección IP de la misma es inaccesible y dejas a todos tus visitantes en la estacada y mi humilde blog sin visitas ni nada que le diga a mis visitantes que sigo vivo.

    Al menos sucedía así hasta hace un tiempo, cuando lanzaron las IP flotantes o Floating IPs.… Leer artículo completo

  • Generando imágenes en C, sólo por diversión, empezando desde cero (Parte I)

    colores_y_formasHace tiempo que no pongo nada de imagen digital, y ya tenía ganas. No haremos nada complicado, pero muchas veces, cuando empezamos a programar, pensamos en representar el contenido de un array en una imagen, o para esas veces en que pensamos que un simple algoritmo nos puede ayudar a crear la imagen que queremos.

    Cómo generar las imágenes

    Para generar las imágenes, vamos a pensar en un buffer sencillo, lineal de tipo unsigned char, o uint8_t, para imágenes en blanco y negro… vamos a empezar con imágenes sencillas, ya meteremos color… y más cosas.… Leer artículo completo

  • Problema con dos discos duros externos en USB3

    dos_discos_duros

    De repente, llegan a mis manos dos discos duros externos de 2.5″. Ambos USB3, enchufados a un HUB USB3.0 como el de la foto de más abajo, y tengo que copiar información entre ellos (varios Gb de datos, por lo que, cuanto más rápida sea la copia mejor). Como mi ordenador sólo dispone de un puerto USB3.0, el HUB era necesario. Cuidado, en muchos ordenadores que tienen varios puertos USB3.0, en realidad tienen un HUB interno y estamos en las mismas.… Leer artículo completo

  • Generando fotogramas de vídeo en C con frei0r (y MLT) [Parte II – Generando filtros]

    Ahora le toca el turno a la creación de filtros, y de paso presento algunas utilidades más para frei0r de mi cosecha (con alguna que otra función copiada de algún lado).

    Esta vez, entre otras cosas, aunque habrá mucho código sin documentar por aquí, vamos a ver cómo podemos dar para cada canal de la imagen, la porción de rojo, verde y azul que queramos, sólo para practicar la creación de un filtro sencillo.… Leer artículo completo

  • Arduino: Usando el serial para comunicarnos con el ordenador

    Es interesante ver cómo los programas que corren con Arduino pueden hacer uso del puerto serie para comunicarnos con el ordenador. No sólo vale para hacer la programación del chip, sino que podemos intercambiar información, variar el comportamiento del programa… o simplemente tener un canal para depurar nuestro programa mostrando el estado de las variables en cualquier momento.

    La configuración es muy sencilla, sólo necesitamos especificar la velocidad del puerto serie cuando queramos iniciar la comunicación.… Leer artículo completo

  • Probando Google+, vídeos, imágenes y vida digital integradas

    Aunque he tardado un poco en entrar, estoy curioseando un poco. Hace poco, Google presentaba el botón +1 con el que desarrollaría una potente herramienta social, al estilo del «Me Gusta» de Facebook (¿alguien se acuerda de cuando era «Mola»?)  integrada con el buscador, bien, aquello era sólo una de las muchas pinceladas que nos dieron para lo que se nos venía encima.

    Lo primero, será tener un Google Profile bien configurado, puesto que será la base de toda la comunicación.… Leer artículo completo

  • Leyendo archivos de imagen en formato BMP en C

    n1214332197_30461081_3311160

    Hoy vamos a practicar a leer una imagen desde un archivo BMP desde C. Aunque existen muchas APIs disponibles que son capaces de hacerlo, y mucho mejor que lo que voy a plantear (puesto que nos limitaremos a BMPs sin compresión y a 24bits por pixel), es un buen ejercicio para leer archivos con un formato especificado y documentado.

    Para este tipo de archivos, tendremos dos cabeceras disponibles, la primera será la cabecera de fichero, y la segunda, la cabecera de información de imagen, que las definimos aquí:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    typedef struct bmpFileHeader
    {
      /* 2 bytes de identificación */
      uint32_t size;        /* Tamaño del archivo */
      uint16_t resv1;       /* Reservado */
      uint16_t resv2;       /* Reservado */
      uint32_t offset;      /* Offset hasta hasta los datos de imagen */
    } bmpFileHeader;

    typedef struct bmpInfoHeader
    {
      uint32_t headersize;      /* Tamaño de la cabecera */
      uint32_t width;               /* Ancho */
      uint32_t height;          /* Alto */
      uint16_t planes;                  /* Planos de color (Siempre 1) */
      uint16_t bpp;             /* bits por pixel */
      uint32_t compress;        /* compresión */
      uint32_t imgsize;     /* tamaño de los datos de imagen */
      uint32_t bpmx;                /* Resolución X en bits por metro */
      uint32_t bpmy;                /* Resolución Y en bits por metro */
      uint32_t colors;              /* colors used en la paleta */
      uint32_t imxtcolors;      /* Colores importantes.
    Leer artículo completo