Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Retocar videos

Para pasar vídeos en formato 3gp, habitual en algunos teléfonos móviles, al más estándar avi podemos hacer:
$ ffmpeg -i videoIn.3gp -f avi -vcodec xvid -acodec mp3 -ar 22050 videoOut.avi

Y al contrario para pasar vídeos a formato 3gp, por ejemplo desde flv, típico de internet:
$ ffmpeg -i videoIn.flv -vcodec libx264 -acodec libfaac videoOut.3gp

Para rotar vídeos que hemos grabado con cámaras de fotos en modo vertical, en vez de horizontal, podemos hacer:
$ mencoder -vf rotate=1 videoIn.avi -oac mp3lame -ovc lavc -o videoOut.avi
o bien:
$ mencoder -vf rotate=1,hqdn3d,eq=25:50 -oac pcm -ovc lavc videoIn.avi -o videoOut.avi
Si además queremos añadir bandas negras a los lados para que el vídeo resultante mantenga las proporciones de imagen de los vídeos horizontales podemos hacer:
$ mencoder -vf rotate=2,expand=-176:0:88:0 -oac pcm -ovc lavc videoIn.mov -o videoOut.avi

video, mencoder, ffmpeg

PDF Editor

Recientemente he descubierto “PDF Editor”, un programa GPL para GNU/Linux que permite editar PDFs.
Hasta ahora me limitaba a trabajar con pdfs desde el prompt o incluso con GIMP.
PDF Editor no es que funcione maravillosamente, aún está un poco verde, da algunos errores de funcionamiento… pero al final sirve para lo que promete: editar ficheros PDFs.
Funciona en modo gráfico y comando y además está en los repositorios de Debian, Ubuntu…
$ sudo aptitude install pdfedit

PDF Editor, PDF, pdfedit

Renombrar fotos en base a la fecha de la cabecera Exif

Para renombrar fotos poniéndoles la fecha en que se realizaron podemos usar el siguiente comando:
$ jhead -n%Y%m%d-%H%M%S *.jpg

p1020288.jpg --> 20090628-155508.jpg
p1020289.jpg --> 20090628-155558.jpg

Podemos, mejorar el comando con:
$ jhead -autorot -n%Y%m%d-%H%M%S *.jpg

p1020288.jpg --> 20090628-155508.jpg
p1020289.jpg --> 20090628-155558.jpg

La opción -autorot rota automáticamente las fotos para que se vean todas correctamente.

Otro más sencillo para consultar las cabeceras exif es “exif“, “jhead” sirve principalmente para modificar las cabeceras.
 

exif, jhead, prompt, fotos, jpg, imágenes

Pasar de Access a MySQL

Tengo unos compañeros que se empeñan en utilizar Ms-Access, que es de los pocos programas que no funcionan de manera alguna en GNU/Linux (solo queda el recurso de usar una máquina virtual, como VirtualBox).
Por ello cuando necesito trabajar con ella (o ellos necesitan hacer consultas rápidas y como no saben me lo piden a mi) utilizo un pequeño script para pasar las tablas de Ms-Access a MySQL.
Y dice así:

#!/bin/bash
#
# vuelca_mdb 0.1 - GPL
# (c) Guimi
# http://guimi.net
#
# Ult. mod: Guimi 2009-07
#

# DATOS DEL FICHERO MDB
mdb=xxx.mdb
TABLA1=XXX
TABLA2=YYY

# DATOS DE MYSQL
bbdd=xxx
usuario=xxx
clave=xxx

# FICHERO TEMPORAL
tmp="tmp.$$"

echo "Exportando desde mdb..."
mdb-schema $mdb -S > sql-creacion_mdb$$.sql
mdb-export $mdb $TABLA1 -S -I > sql-datos_mdb$$.sql
mdb-export $mdb $TABLA2 -S -I >> sql-datos_mdb$$.sql

echo "Modificando ficheros exportados..."
# Hay que añadir "IF EXISTS" al "DROP TABLE"
sed 's/DROP TABLE/DROP TABLE IF EXISTS/g' sql-creacion_mdb$$.sql > $tmp
# Hay que cambiar "Long Integer" por "Integer"
sed 's/Long Integer/Integer/g' $tmp > sql-creacion_mdb$$.sql

# Hay que añadir un punto y coma ";" al final de cada linea -que acaba en ")"-
sed -e s/.$/\)\;/g sql-datos_mdb$$.sql > $tmp
mv $tmp sql-datos_mdb$$.sql

echo "Cargando datos en MySQL..."
mysql -D $bbdd -u $usuario --password=$clave < sql-creacion_mdb$$.sql
mysql -D $bbdd -u $usuario --password=$clave < sql-datos_mdb$$.sql

echo "Borrando ficheros temporales..."
rm sql-creacion_mdb$$.sql
rm sql-datos_mdb$$.sql


A continuación otros comandos que pueden ser utiles (proceden del paquete mdbtools).

Mostrar la versión del fichero mdb:
$ mdb-ver xxx.mdb

Mostrar las tablas de un fichero mdb (-1 para mostrar una tabla por fila):
$ mdb-tables -1 xxx.mdb

Generar un fichero C con un Array con los datos de una tabla:
$ mdb-array xxx.mdb TABLA

Access, mdb, mysql, script, prompt, Ms-Access, mdbtools

Edición de ficheros odf desde prompt (línea de comandos)

Me encuentro con que tengo un conjunto de documentos en formato odf, concretamente odt y ods, en los que me gustaría hacer una simple modificación: pongamos que quiero cambiar en todos ellos “NOMBRE_CLIENTE” por “El Cliente”.
Para ello basta con utilizar un simple script que dice así:

#!/bin/bash
#
# modifica_odf 0.1 - GPL
# (c) Guimi
# http://guimi.net
#
# Ult. mod: Guimi 2009-06
#

####################################
tmpdir="tmp.$$"

# Hacemos un bucle para tratar todos los odf del directorio
for x in `ls *.od?`
do
  # Mostramos info
  echo "Modificando $x..."

  # Descomprimimos el odf en un directorio temporal
  unzip -q $x -d $tmpdir
  cd $tmpdir

  # Realizamos las modificaciones necesarias en styles.xml
  sed 's/NOMBRE_CLIENTE/El Cliente/g' styles.xml > tmp.xml
  mv tmp.xml styles.xml

  # Realizamos las modificaciones necesarias en content.xml
  sed 's/NOMBRE_CLIENTE/El Cliente/g' content.xml > tmp.xml
  mv tmp.xml content.xml

  # Borramos el fichero temporal tmp.xml
  rm tmp.xml

  # Regeneramos el odf
  zip -rq9 ../$x *

  # Salimos y borramos el directorio temporal
  cd ..
  rm -r $tmpdir
done

edición de ficheros odf desde prompt, edición masiva de ficheros odf, modificar ficheros odt ods odp odf

 

Uso básico de screen en Linux

Tiene dos funcionalidades principales:

  • Permitir múltiples sesiones de terminal en una sola terminal (o conexión).

  • Desacoplar los programas en ejecución de la terminal real para que sigan en funcionamiento en background aunque se cierre la terminal, que podrá reconectarse más tarde.

Ejemplo de uso:
$ screen

  • Dentro de la sesión ejecutamos un programa, por ejemplo top, y lo desacoplamos con Ctrl-a Ctrl-d.

  • Desde otra sesión de terminal (o la misma) reacoplamos el proceso con screen -r o screen -R -D.

Comandos (dentro de screen). Todos empiezan por Ctrl-a:

Ctrl-a ? Ayuda y sumario de funciones
Ctrl-a c Crear una nueva terminal
Ctrl-a Ctrl-n or Ctrl-a Ctrl-p Cambiar a la Siguiente o Anterior terminal
Ctrl-a Ctrl-N Cambiar a la Siguiente o Anterior terminal N [0-9]
Ctrl-a ” Lista navegable de terminales en funcionamiento
Ctrl-a a Limpiar un Ctrl-a pulsado por error
Ctrl-a Ctrl-d Desconectar y dejar la sesión en funcionamiento
Ctrl-a x Bloquear todas las terminales con una clave

Uso básico de screen en Linux, comando screen

Conocer que equipos hay en una red

Hay varias herramientas que nos permiten conocer que equipos son alcanzables en nuestra red.
 

nmap

Herramienta de exploración de redes y analizador de puertos.
 
$ nmap -sP 192.168.0.0/24

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2007-06-27 10:13 CEST
Host equipo1 (192.168.0.1) appears to be up.
Host equipo2 (192.168.0.2) appears to be up.
Host equipo3 (192.168.0.4) appears to be up.
...
Nmap finished: 256 IP addresses (12 hosts up) scanned in 2.219 seconds

 

fping

Una herramienta de ping que se puede utilizar fácilmente para múltiples equipos y en scripts.
 
$ fping -g 192.168.0./24

192.168.0.0 error while sending ping: Permission denied
192.168.0.1 is alive
192.168.0.2 is alive
192.168.0.3 is alive
ICMP Host Unreachable from 192.168.0.2  for ICMP Echo sent to 192.168.0.4
...

 
O mejor:
$ fping -g 192.168.0./24 2> /dev/null | grep alive

192.168.0.1 is alive
192.168.0.2 is alive
192.168.0.3 is alive
...

 

ip

Herramienta de configuración del protocolo ip. Permite ver y modificar rutas, dispositivos, tuneles…
 
$ ip neig

192.168.0.4 dev eth1 lladdr xx:xx:xx:xx:xx:xx STALE
192.168.0.60 dev eth1 lladdr xx:xx:xx:xx:xx:xx STALE
192.168.0.61 dev eth1 lladdr xx:xx:xx:xx:xx:xx STALE
192.168.0.52 dev eth1 lladdr xx:xx:xx:xx:xx:xx STALE
...

 

nbtscan

Escanea redes en busca de nombres NETBIOS.
 
# nbtscan -r 192.168.0.0/24

Doing NBT name scan for addresses from 192.168.0.0/24

IP address       NetBIOS Name     Server    User             MAC address
------------------------------------------------------------------------------
192.168.0.0    Sendto failed: Permission denied
192.168.0.2     <unknown>                  <unknown>
192.168.0.60    xxxx-LAB10       <server>  xxxx-LAB10       xx:xx:xx:xx:xx:xx
192.168.0.52    xxxxxxxxxxxx-01  <server>  xxxxxxxxxxxx-01  xx:xx:xx:xx:xx:xx
192.168.0.61    xxxx-LAB11       <server>  xxxx-LAB11       xx:xx:xx:xx:xx:xx
...

 

Conocer que equipos hay en una red, Buscar equipos en una red, Averiguar que equipos hay en una red

Uso de mencoder

mencoder es una herramienta muy potente que viene en el paquete mplayer y permite trabajar con archivos de audio y video.
mencoder genera ficheros en formato AVI a no ser que se le indique lo contrario.

Se utiliza:
mencoder {videos de entrada} [opciones] [-o archivo de salida]

Como se ve puede utilizarse para encadenar varios archivos de video:
mencoder video1.avi video2.avi -o video_unido.avi

Algunas de las opciones más utiles son:

  • oac (output audio codec) {copy,pcm,mp3lame,lavc}
    libavc utiliza un codec de la libreria libavcodec

  • ovc (output video codec) {copy,divx4,raw,libavc}
  • vf (video filter)
    • flip (Voltear arriba-abajo)

    • mirror (Voltear derecha-izquierda)
    • rotate[=...] (Girar)
    • scale[=...] (Escalar)
    • crop[=...] (Recortar)
    • denoise3d[=...] (intenta eliminar el ruido)
    • hqdn3d[=...] (intenta eliminar el ruido con mayor calidad)
    • eq[=brillo:contraste] (Modifica los colores)
    • eq2[=...] (Modifica los colores)

    Opciones que más utilizo:

    Salida como mpeg -of mpeg
    Copiar el video -ovc copy -oac copy
    Recodificar el video -ovc lavc -lavcopts vcodec=xvid:mbd=2:trell:autoaspect
    -ovc lavc -lavcopts vcodec=mpeg4
    Indicar frames per second (fps) -fps 25
    Indicar inicio y fin de la codifiación -ss 0:10 -endpos 01:15:23
    Incluir subtitulos -sub subtitulos.srt
    Rotar video -vf rotate=1 (90º en sentido horario)
    -vf rotate=2 (90º en sentido anti-horario)
    Escalar video -vf scale=320:240
    Usar sonido externo -audiofile audio.mp3
    Des/Codificar archivos de imagen -mf type=png:fps=25 (con mf -multifiles)
    Negativo -vf eq2=1.0:-0.8
    Añadir información -info name=titulo,artist=guimi

    Ejemplos:

    • Reproducción rápida de DVD

      • mplayer dvd://1
    • Codificar videos como mpeg
      • mencoder video1.avi video2.avi -of mpeg -o videoFinal.mpg
    • Rotar un video, quitarle el ruido y darle más luz
      • mencoder -vf rotate=1,hqdn3d,eq=75:100 -oac pcm -ovc lavc videoIn.avi -o videoOut.avi
    • Convertir parte de un video a AVI con codec Xvid
      • mencoder videoIn.ogg -ss 10 -endpos 01:42:55.5 -oac pcm -ovc lavc -lavcopts vcodec=xvid:mbd=2:trell:autoaspect -o videoOut.avi
    • Codificar los capítulos 10-15 del título 2 de un DVD, redimensionando
      • mencoder dvd://2 -chapter 10-15 -vf scale=640:480 -o titulo2.avi -oac copy -ovc lavc -lavcopts vcodec=mpeg4
    • Igual pero con libavcodec
      • mencoder dvd://2 -o titulo2.avi -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=1800 -oac copy
    • Codificación de archivos jpg
      • mencoder “mf://*.jpg” -mf fps=25 -o salida.avi -ovc lavc -lavcopts vcodec=mpeg4
    • Codificar video con un fichero de audio externo
      • mencoder videoIn.avi -o videoOut.avi -ovc copy -oac mp3lame -audiofile audio.wav
    • Incluir subtítulos en un vídeo
      • mencoder -ovc lavc -oac mp3lame pelicula.avi -o pelicula_con_subtitulos.avi -sub subtitulos.xxx

    Referencias y ejemplos del manual de mencoder, de Hache Muda y propios.

    Uso de mencoder, comando mencoder en Linux

Comprobaciones de HW en GNU/Linux

DISPOSITIVOS

# lspci | cat /proc/cpuinfo

# lsusb | cat /proc/scsi/scsi

 

MEMORIA

# free

# memtest86

 

DISCOS

# dd if=/dev/… of=/dev/null

# smartmontools

 

RED

# nictools_nopci

# nictools_pci

 

CPU

# cpuburn

# crashme

# fuzz

# stress

 

OTROS

# mbmon

# sensord

# lmbench

# lm_sensors

# lshw | hwinfo | x86info

# ltp

# spew

 

Comprobaciones de HW en GNU/Linux, Veruificar hardware en Linux, chequeo de hardware

Trabajar con PDFs desde el prompt

Instalamos PDFTK (The PDF ToolKit):
# aptitude install pdftk

Extraer paginas de un pdf (opcion 1):
$ pdftk file.pdf burst

Extraer paginas de un pdf (opcion 2):
$ convert -density 150 archivo.pdf img_%04d.tiff

Convertir imagenes en un pdf:
$ convert *.tiff archivo.pdf

OCR:
$ for x in $(ls img_*tiff); do gocr $x >> kk.txt; done

Extraer imágenes de un pdf:
$ pdfimages -j file.pdf img

Extraer texto de un pdf:
$ pdftotext file.pdf

Unir pdfs:
$ pdftk *.pdf cat output nuevo.pdf

Unir parte de unos pdfs con otros:
# Insertamos la página 2 del fichero B entre la página 2 y la página 3 del fichero A
$ pdftk A=file1.pdf B=file2.pdf cat A1-2 B2 A3-end output nuevo.pdf

Rotar pdfs:
# S(outh) – 180% ; E(ast) 90%; W(est) 270%; N(orth) 0%
$ pdftk A=file1.pdf cat A1-endS output nuevo.pdf
En un pdf que contiene páginas giradas, será necesario rotar al Norte para que recuperen la orientación original.

Añadir marca de agua:
$ pdftk fileIn.pdf background marca_agua.pdf output fileOut.pdf
Se recomienda que marca_agua.pdf sea del tamaño de las páginas del PDF (A4, letter…).
Si el pdf son imágenes, éstas taparán la marca de agua y no se verá.
Es útil en pdfs con textos. La alternativa es el “sello”.
Añadir sello:
$ pdftk fileIn.pdf stamp sello.pdf output fileOut.pdf
Se recomienda que sello.pdf sea del tamaño de las páginas del PDF (A4, letter…).
El pdf se “estampará” como sello encima de las páginas del pdf. La alternativa es la marca de agua.

Modificar los datos de propiedades de un pdf (autor, fecha de modificación…):
$ pdftk fichero.pdf dump_data output propiedades.dat
$ vi propiedades.dat
$ pdftk fichero.pdf update_info propiedades.dat output fichero_mod.pdf

Convertir pdf en txt:
$ pdftotext -layout fich.pdf fich.txt

Trabajar con PDFs desde el prompt, edición de PDFs desde la línea de comandos