Concatenar varios PDFs en uno.

Debido a que tenia varios PDFs ordenados por nombre tal como se muestra en la imagen, y con la dificultad de la lectura o búsqueda de información, he decidido concatenar-los con gs (Ghostscript).

Para ello desde la consola:

gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=concatenados.pdf mypdf\(01\).pdf mypdf\(02\).pdf mypdf\(03\).pdf mypdf\(04\).pdf mypdf\(05\).pdf mypdf\(06\).pdf mypdf\(07\).pdf mypdf\(08\).pdf mypdf\(09\).pdf mypdf\(10\).pdf mypdf\(11\).pdf mypdf\(12\).pdf mypdf\(13\).pdf mypdf\(14\).pdf mypdf\(15\).pdf mypdf\(16\).pdf mypdf\(17\).pdf mypdf\(18\).pdf mypdf\(19\).pdf mypdf\(20\).pdf mypdf\(21\).pdf mypdf\(22\).pdf mypdf\(23\).pdf mypdf\(24\).pdf mypdf\(25\).pdf mypdf\(26\).pdf mypdf\(27\).pdf mypdf\(28\).pdf mypdf\(29\).pdf mypdf\(30\).pdf mypdf\(31\).pdf mypdf\(32\).pdf mypdf\(33\).pdf mypdf\(34\).pdf mypdf\(35\).pdf mypdf\(36\).pdf mypdf\(37\).pdf mypdf\(38\).pdf mypdf\(39\).pdf mypdf\(40\).pdf mypdf\(41\).pdf mypdf\(42\).pdf mypdf\(43\).pdf mypdf\(44\).pdf mypdf\(45\).pdf mypdf\(46\).pdf mypdf\(47\).pdf mypdf\(48\).pdf mypdf\(49\).pdf mypdf\(50\).pdf mypdf\(51\).pdf mypdf\(52\).pdf mypdf\(53\).pdf mypdf\(54\).pdf mypdf\(55\).pdf mypdf\(56\).pdf mypdf\(57\).pdf mypdf\(58\).pdf mypdf\(59\).pdf mypdf\(60\).pdf mypdf\(61\).pdf mypdf\(62\).pdf mypdf\(63\).pdf mypdf\(65\).pdf mypdf\(66\).pdf mypdf\(67\).pdf mypdf\(68\).pdf mypdf\(69\).pdf mypdf\(70\).pdf mypdf\(71\).pdf mypdf\(72\).pdf mypdf\(73\).pdf mypdf\(74\).pdf mypdf\(75\).pdf mypdf\(76\).pdf mypdf\(77\).pdf mypdf\(78\).pdf mypdf\(79\).pdf mypdf\(80\).pdf mypdf\(81\).pdf mypdf\(82\).pdf mypdf\(83\).pdf mypdf\(84\).pdf mypdf\(85\).pdf mypdf\(86\).pdf mypdf\(87\).pdf mypdf\(88\).pdf mypdf\(89\).pdf

Ahora tengo un solo documento ordenado por titulo y sus marcadores. El espacio ocupado por los PDFs era de unos 21M, sin embargo el tamaño del PDF es ahora de unos 7,6 M.

Saludos!

 

Utilizar la terminal vía proxy

El otro día se cayo la salida principal a Internet cuando estaba realizando unas descargas en la terminal, pues bien o me esperaba a que el tiempo mejorara y la salida principal a Internet estuviese operativa o modificaba algunas variables y así poder utilizar la terminal vía proxy  y continuar con lo que estaba haciendo.

Pues bien, me decidí a modificar o añadir las variables para poder redirigir el trafico por uno de los proxys.

Para ello basta con ejecutar en la terminal los siguientes comandos:

export http_proxy='http://$username:$password@$internet_proxy:$proxy_port/'
export https_proxy='http://$username:$password@$internet_proxy:$proxy_port/'
export ftp_proxy='http://$username:$password@$internet_proxy:$proxy_port/'
export no_proxy='localhost,127.0.0.1,192.168.0.0/16,dominio_interno.com'

Bien, con el primer export hemos indicado que todo lo que sea http vaya por el proxy, con el segundo ya lo habéis adivinado y el tercero no hace falta decirlo.

Ahora bien con el cuarto indicamos que localhost,127.0.0.1,192.168.0.0/16,dominio_interno.com no pase por el proxy, de esta forma este trafico no sera redirigido al exterior y podremos acceder a la red interna sin problemas.

Para dejar de salir por el proxy una vez se recupere la salida principal a Internet realizamos un unset de las variables.

unset http_proxy
unset https_proxy
unset ftp_proxy

Otro uso es cuando el ancho de banda de la salida principal a Internet esta a full.

Actualizar youtube-dl

Debido al mensaje de error de youtube-dl al querer realizar una descarga de una playlist, he tenido que actualizarlo de la siguiente forma.

Este era el mensaje de error:

ERROR: Unable to extract title; please report this issue on https://yt-dl.org/bug . Be sure to call youtube-dl with the –verbose flag and include its complete output. Make sure you are using the latest version; type youtube-dl -U to update.

test@test:~/Vídeos$ youtube-dl -U
It looks like you installed youtube-dl with a package manager, pip, setup.py or a tarball. Please use that to update.

Para realizar la instalación como root:

apt-get install python-setuptools
easy_install pip
pip install --upgrade youtube-dl

test@test:~# file /usr/bin/youtube-dl
/usr/bin/youtube-dl: Python script, ASCII text executable

Y con esto es todo.
Ahora a descargar la playlist, exportar los vídeos a la tablet y verlos por el camino.

Grabar vídeo con audio interno y micrófono con ffmpeg en debian

El otro día me hicieron una pregunta, como podía grabar el audio interno del escritorio y el micrófono a la vez, en este caso mi respuesta fue con pulseaudio y ffmpeg, aunque la cuestión era grabar vídeo con audio interno y micrófono con ffmpeg en debian.

Pues bien para ello tenemos que tener instalado pulseaudio, no voy a explicar como hacerlo, solo el concepto de capturar el audio interno y micrófono y también tenemos que tener ffmpeg.

Para proceder a capturar el audio crearemos un modulo nulo module-null-sink el cual envía toda la salida a /dev/null, lo creamos así:

pactl load-module module-null-sink sink_name=conmimodulo

ahora dentro del modulo creado “conmimodulo” nombre descriptivo vamos a añadir la entrada de audio del micrófono de esta forma:

pactl load-module module-loopback source="alsa_input.usb-PixArt_Imaging_Inc._A4_TECH_PC_Cam-02-Cam.analog-mono" sink=conmimodulo

Una vez cargado este modulo cargaremos la salida de audio del escritorio de la misma manera:

pactl load-module module-loopback source="alsa_output.pci-0000_00_14.2.analog-stereo.monitor" sink=conmimodulo

Para saber que fuente escoger lo podemos ver así:

pacmd list-sources   esta es la salida del micrófono

index: 1
name: <alsa_input.usb-PixArt_Imaging_Inc._A4_TECH_PC_Cam-02-Cam.analog-mono>
driver: <module-alsa-card.c>
flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY
state: RUNNING
suspend cause:
priority: 9049
volume: mono: 44647 /  68% / -10,00 dB
balance 0,00
base volume: 9619 /  15% / -50,00 dB
volume steps: 65537
muted: no
current latency: 0,42 ms
max rewind: 0 KiB
sample spec: s16le 1ch 48000Hz
channel map: mono
Mono
used by: 2
linked by: 2
fixed latency: 99,94 ms
card: 1 <alsa_card.usb-PixArt_Imaging_Inc._A4_TECH_PC_Cam-02-Cam>
module: 7
properties:
alsa.resolution_bits = "16"
device.api = "alsa"
device.class = "sound"
alsa.class = "generic"
alsa.subclass = "generic-mix"
alsa.name = "USB Audio"
alsa.id = "USB Audio"
alsa.subdevice = "0"
alsa.subdevice_name = "subdevice #0"
alsa.device = "0"
alsa.card = "2"
alsa.card_name = "A4 TECH PC Cam"
alsa.long_card_name = "PixArt Imaging Inc. A4 TECH PC Cam at usb-0000:00:12.2-1, high speed"
alsa.driver_name = "snd_usb_audio"
device.bus_path = "pci-0000:00:12.2-usb-0:1:1.2"
sysfs.path = "/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1.2/sound/card2"
udev.id = "usb-PixArt_Imaging_Inc._A4_TECH_PC_Cam-02-Cam"
device.bus = "usb"
device.vendor.id = "093a"
device.vendor.name = "Pixart Imaging, Inc."
device.product.id = "2700"
device.product.name = "A4 TECH PC Cam"
device.serial = "PixArt_Imaging_Inc._A4_TECH_PC_Cam"
device.form_factor = "webcam"
device.string = "hw:2"
device.buffering.buffer_size = "9594"
device.buffering.fragment_size = "2398"
device.access_mode = "mmap"
device.profile.name = "analog-mono"
device.profile.description = "Mono Analógico"
device.description = "A4 TECH PC Cam Mono Analógico"
alsa.mixer_name = "USB Mixer"
alsa.components = "USB093a:2700"
module-udev-detect.discovered = "1"
device.icon_name = "camera-web-usb"
ports:
analog-input-mic: Micrófono (priority 8700, latency offset 0 usec, available: unknown)
properties:
device.icon_name = "audio-input-microphone"
active port: <analog-input-mic>

Para ver los sinks

pacmd list-sinks   este es el que he creado para realizar el vídeo con el nombre conmimodulo

index: 5
name: <conmimodulo>
driver: <module-null-sink.c>
flags: DECIBEL_VOLUME LATENCY FLAT_VOLUME DYNAMIC_LATENCY
state: RUNNING
suspend cause:
priority: 1000
volume: front-left: 65536 / 100% / 0,00 dB, front-right: 65536 / 100% / 0,00 dB
balance 0,00
base volume: 65536 / 100% / 0,00 dB
volume steps: 65537
muted: no
current latency: 9,05 ms
max request: 3 KiB
max rewind: 3 KiB
monitor source: 6
sample spec: s16le 2ch 44100Hz
channel map: front-left,front-right
Estéreo
used by: 2
linked by: 5
configured latency: 20,00 ms; range is 0,50 .. 2000,00 ms
module: 28
properties:
device.description = "Salida Nula"
device.class = "abstract"
device.icon_name = "audio-card"

Y para ver las fuentes:

pacmd list-modules

 

Bueno como podemos observar se nos han dado unos indices y creado los modulos, proseguimos para grabar el vídeo .

El vídeo lo grabaremos de la siguiente forma y lo adaptaremos a lo que queramos grabar

ffmpeg -f x11grab -s 1280x1005 -r 25 -i :0.0+1280,19 -f pulse -i conmimodulo.monitor -ac 2 -b:v 25000k -y conmimodulo.avi

bien indicamos a ffmpeg que queremos grabar el escritorio indicando x11grab con un tamaño de 1280×1005 este sera el tamaño del vídeo y siempre se tiene que ajustar al tamaño que podemos grabar si hubiese puesto 1006 un pixel mas este seria el resultado:

[x11grab @ 0x155cc80] Capture area 1280x1006 at position 1280.19 outside the screen size 2560x1024
:0.0+1280,19: Invalid argument

He indicado que quiero grabar 25 FPS  y la región a grabar esta ubicada en :0.0+1280,19 pues bien empezando desde las coordenadas 0.0 grábame a partir de la 1280,19 que significa, pues grábame la pantalla de la derecha 1280 a partir del pixel 19, osea elimina la barra superior, el error anterior indica el tamaño de mi escritorio 2560×1024 del cual solo grabaremos 1280×1006 empezando por el pixel 1280,19, si queremos saber las coordenadas podemos utilizar xwininfo, queda claro, ¿no?.

Seguimos indico que utilice pulse y en este caso que utilice conmimodulo.monitor en estereo (-ac 2) con una velocidad de salida de bits de 25000k aceptamos sobreescribir conmimodulo.avi

Para ver si funciona vamos a grabar un vídeo en este caso uno incrustado dentro del otro.

 

Para visualizarlo he utilizado mplayer.

mplayer conmimodulo.avi

Eso es todo.