How To: Image processing and management


  • Convert a batch of PNG images to JPG:
    mogrify -format jpg -quality 90 *.png
  • Convert a batch of PNG images to JPG, and resize to thumbnail:
    mogrify -format jpg -quality 90 -thumbnail 512 *.png


  • Encode an Exif date tag into photos (recursively, in a whole directory):
    exiftool -AllDates-= -AllDates="2008:01:01 12:00:00" -overwrite_original -r .
  • Remove the GPS Exif tag from photos:
    exiftool -gps:all= -xmp:geotag= image.jpg -overwrite_original *
  • Add Copyright tag to all JPG images in directory:
    exiftool *.jpg -Copyright="Copyright (c) Dmitry Brant."


  • Create video (x264) from a series of still frames (png):
ffmpeg -r 60 -f image2 -s 600x360 -start_number 0 -i frame%d.png -vcodec libx264 -crf 18 -pix_fmt yuv420p test.mp4

(-r = frame rate, -crf = quality (lower is better))

ffmpeg -r 60 -f image2 -s 1280x720 -start_number 0 -i frame%d.png -vcodec libtheora -qscale:v 7 test.ogv
  • Convert video from one format (e.g. x265) to another format (e.g. x264), making use of Nvidia hardware acceleration (requires a build of ffmpeg that includes support for cuda):
ffmpeg -hwaccel cuda -i [input.mp4] -map 0 -c:v h264_nvenc -crf 17 -vf format=yuv420p -c:a copy [output.mp4]


  • Create a bitmap font for use with Python PIL from a TrueType font:
    Download the otf2bdf tool:
    Use the pilfont utility, or do it directly in Python.
    ./otf2bdf -p 10 -r 96 -o font.bdf font.ttf
    (-p = font size, -r = screen dpi)
  • Steganography for PNG files: zsteg
    zsteg -a filename.png
    zsteg -E [name] filename.png
  • Convert HEIC images to JPG (using heif-convert)
for f in *.HEIC; do heif-convert -q 100 $f $f.jpg; done