Shell exercices

Wanna convert a pdf to images and create a gallery. Well, I had some actions with that and I did my way through the GNU, and other, utilities.

1. First
You need to convert the PDF document to images. Not so easy, there is pdftohtml but it doesn't generate images, instead it extracts the text and images from the document. However there is ImageMagick, a great project, which provides convert. So I ran a convert file.pdf file.png but I couldn't figure out how to preselect the size to get bigger resolutions. After that I have opened file.pdf with xpdf and I took screenshots with scrot from the xpdf window.

2. Crop images
I cropped the images to remove the borders and toolbars with for image in *.png ; do convert $image -crop 150x150+30+20 ; done where I selected the geometry of the crop size in GIMP within the dialog of the crop tool.

3. Rename files
Next I figured out how to rename files, and how to bulk rename (Thunar -B) them better.

4. Finally
I have found photon --thumbsize=50x50 --sizelist=0 -o photon ../images which creates nice web galleries. With javascript, you can view the presentation as in a pdf reader, by pressing space to switch pages.

However there is a bug, fortunately this blog entry will remember me to file it upstream. My images are png files, and it creates jpeg files. The original files are copied verbatim without modifications, but the html files contains source images only with .jpg extensions. Bad, because I have png files...

5. A last one before to go
for html in *.html ; do cat $html | sed -r 's,(original)/([0-9]+)-(projet-tuteure)\.jpg,\1/\2-\3.png,' > $html ; done


You can see the result of photon if you are interested.

Edit: Just in case I forget about it and would need it again... photon --thumbsize=105x105 --display-lines=4 --sizelist=0 --resize-quality-low=95 --img-bgcolor=#ffffff --body-bgcolor=#2e3436 -k steel -o photon ../images && cd photon && for html in *.html ; do cat $html | sed -r 's,(original)/([0-9]+)-(projet-tuteure)\.jpg,\1/\2-\3.png,' > $html ; done && cd ..


Wanna download a YouTube video?

If you want to download a YouTube video it is really easy with the shell. All you have to do is to pick up the video_id in the URL and feed it to the script. It will then fetch the valid URL to download the flv video.

But that's not why I want to blog about it because there are already scripts to download YouTube videos. The reason I'm blogging is because it is a one-liner.

wget "http://www.youtube.com/get_video?`wget -q -O - "http://youtube.com/watch?v=$1" | egrep -m1 -o 'video_id=[^&]+&l=[0-9]+&t=[^"&]+'`" -O $1.flv

Note: $1 is the video_id parameter sent to the script.

Download the script.


Random MAC address

I just thought I had need to blog about that, a script to generate a random MAC address. It is based on $RANDOM from any shell and works reliably.

#! /bin/sh
# Generates a random mac address
echo $RANDOM | openssl md5 | sed 's/\(..\)/\1:/g' | cut -b0-17