Attention! There's no guarantee, explicit or implied, for anything contained in these pages. Use at your own risk! |
Conversions
editImage file formats
editGIF to PNG
editPNGs 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
editProgressive 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
editWhere 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
editWMA (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
editStill, 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
editFor a command line tool to perform automatic MP3 to Ogg Vorbis conversion, take a look at mp32ogg.
PNG optimization
editThis 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 Wikipedia:How to keep image file sizes as small as possible.
My scripts
editWeb gallery harvester
editThis is a python script to be executed from the command line. It requires the lynx browser and the wget download manager:
Usage: python <scriptname> <directory> <url>
#!/usr/bin/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