User:Etz Haim/Tech Corner



GIF to PNG
PNGs are always a better alternative to the stone-age, abusive patent-crippled GIFs. Avoid contributing GIFs to Wikipedia.

Conversion, the gif2png way:

gif2png file.gif

the ImageMagick/GraphicsMagick way:

convert file.gif file.png

and the NetPBM way:

giftopnm < file.gif | pnmtopng > file.png

Progressive JPEGs to non-progressive
Progressive JPEG is the JPEG equivalent of the "interlaced GIF"; while being downloaded, the image gradually "fades in" from a low-quality, heavily pixelized form to its full quality. Progressive JPEG makes the download of big image files somewhat smoother and compensates you for the wait, for a small increase on the total download size.

When images are converted into thumbnails, the "progressive" feature of the JPEG on the full-size image is obviously unnecessary (though no great cost either). You can convert progressive JPEGs to non-progressive from the command line, using the mogrify utility from ImageMagick:

mogrify *.jpg

Make sure you keep a backup of the original(s) before executing this command.

If you are going to make such conversions you should use a specific tool like jpegtran which can do it losslessly. do not throw away quality by using a general perpose tool that will decode and re-encode the jpeg. In most cases its probablly not worth the hassle though.

Audio file formats
Where possible it is best to avoid conversions from one lossy format to another. try to get hold of an original that has never undergone lossy compression and use that as a source for your ogg file (or get the author to do the ogg encoding themselves from the original source material).

WMA to WAV audio
WMA (Windows Media Audio) is an evil proprietary audio file format owned by Microsoft. You can't contribute WMA files to Wikipedia, and it's also best to avoid using them at all. If you want to convert any WMA's you own to anything else, you have to convert them to WAV first. For this purpose, you may use this bash shell script (requires MPlayer):

for i in *.wma; do mplayer -vo null -vc dummy \ -ao pcm -waveheader \ -slave -nolirc -nojoystick -nomouseinput "$i" && mv audiodump.wav "`basename "$i" .wma`.wav"; done

If you want to resample the sound clips to 44100Hz (CD quality), add the following command line option to the above:

-af resample=44100

WAV to Ogg Vorbis
Still, WAV files are too big to be uploaded to Wikipedia. Ogg Vorbis is a lossy compressed audio file format, equivalent to MP3, except its files have and .ogg suffix, and it's not patent-encumbered like MP3.

You can convert your WAV files to Ogg Vorbis, either using a graphical tool such as Audacity or Sweep, or with the oggenc tool that comes with most Linux distributions:

oggenc file.wav -o file.ogg

The oggenc tool has a lot of command line options. You may have a look at its man (manual) page:

man oggenc

For an audio player that can handle .ogg files, try XMMS (on Linux), WinAmp (on Windows) or MPlayer (on most platforms).

MP3 to Ogg Vorbis
For a command line tool to perform automatic MP3 to Ogg Vorbis conversion, take a look at mp32ogg.

PNG optimization
This is my recipe for reducing the size of PNGs to the smallest possible:

pngrewrite infile.png outfile.png # if the PNG has < 256 colors optipng -o7 outfile.png advpng -z4 outfile.png

For more information see How to keep image file sizes as small as possible.

Web gallery harvester
This is a python script to be executed from the command line. It requires the lynx browser and the wget download manager:

Usage: python      

import os, sys from urlparse import urlparse from fnmatch import fnmatch browser_id = 'Mozilla/5.0 (X11; U; Linux i586; rv:1.7.3) Gecko/20040914 Firefox/0.10.1' extensions = ('jpg', 'JPG', 'jpeg', 'JPEG', 'png', 'PNG', 'gif', 'GIF', 'bmp', 'BMP') dir, referer = sys.argv[1:3] path = os.path.join(os.getcwd, dir) os.mkdir(path) os.chdir(path) meta = open('.meta', 'w') meta.write('This directory contains the images linked in:\n\n') meta.write(referer + '\n') meta.close print path rawlist = os.popen('lynx --dump "%s"' % referer) cmd = 'wget "%s" --accept=%s --referer="%s" --user-agent="%s"' for item in rawlist: if 'http://' in item: url = item.split[-1] filename = os.path.split(urlparse(url)[2])[-1] for ext in extensions: if fnmatch(filename, '*.'+ext): os.system(cmd % (url, ext, referer, browser_id)) break
 * 1) !/usr/bin/python