123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #!/bin/sh
- # The post-processing script gets called after taking a burst of
- # pictures into a temporary directory. The first argument is the
- # directory containing the raw files in the burst. The contents
- # are 1.dng, 2.dng.... up to the number of photos in the burst.
- #
- # If the capture was from a YUV source instead of raw sensor data
- # the burst dir will contain .jpg files instead of .dng files
- #
- # The second argument is the filename for the final photo without
- # the extension, like "/home/user/Pictures/IMG202104031234"
- #
- # The third argument is 1 or 0 for the cleanup user config. If this
- # is 0 the .dng file should not be moved to the output directory
- #
- # The post-processing script is responsible for cleaning up
- # temporary directory for the burst.
- set -e
- if [ "$#" -ne 3 ]; then
- echo "Usage: $0 [burst-dir] [target-name] [save-dng]"
- exit 2
- fi
- BURST_DIR="$1"
- TARGET_NAME="$2"
- SAVE_DNG="$3"
- MAIN_PICTURE="$BURST_DIR"/1
- if [ -f "$MAIN_PICTURE.jpg" ]; then
- # Just move over the main jpeg if this was a YUV capture
- cp "$MAIN_PICTURE.jpg" "$TARGET_NAME.jpg"
- # Clean up the temp dir containing the burst
- rm -rf "$BURST_DIR"
- exit 0
- fi
- # Copy the first frame of the burst as the raw photo
- cp "$BURST_DIR"/1.dng "$TARGET_NAME.dng"
- # Create a .jpg if raw processing tools are installed
- DCRAW=""
- TIFF_EXT="dng.tiff"
- if command -v "dcraw_emu" > /dev/null
- then
- DCRAW=dcraw_emu
- # -fbdd 1 Raw denoising with FBDD
- set -- -fbdd 1
- elif [ -x "/usr/lib/libraw/dcraw_emu" ]; then
- DCRAW=/usr/lib/libraw/dcraw_emu
- # -fbdd 1 Raw denoising with FBDD
- set -- -fbdd 1
- elif command -v "dcraw" > /dev/null
- then
- DCRAW=dcraw
- TIFF_EXT="tiff"
- set --
- fi
- CONVERT=""
- if command -v "convert" > /dev/null
- then
- CONVERT="convert"
- # -fbdd 1 Raw denoising with FBDD
- set -- -fbdd 1
- elif command -v "gm" > /dev/null
- then
- CONVERT="gm"
- fi
- if [ -n "$DCRAW" ]; then
- # +M use embedded color matrix
- # -H 4 Recover highlights by rebuilding them
- # -o 1 Output in sRGB colorspace
- # -q 3 Debayer with AHD algorithm
- # -T Output TIFF
- $DCRAW +M -H 4 -o 1 -q 3 -T "$@" "$MAIN_PICTURE.dng"
- # If imagemagick is available, convert the tiff to jpeg and apply slight sharpening
- if [ -n "$CONVERT" ];
- then
- if [ "$CONVERT" = "convert" ]; then
- convert "$MAIN_PICTURE.$TIFF_EXT" -sharpen 0x1.0 -sigmoidal-contrast 6,50% "$TARGET_NAME.jpg"
- else
- # sadly sigmoidal contrast is not available in imagemagick
- gm convert "$MAIN_PICTURE.$TIFF_EXT" -sharpen 0x1.0 "$TARGET_NAME.jpg"
- fi
- # If exiftool is installed copy the exif data over from the tiff to the jpeg
- # since imagemagick is stupid
- if command -v exiftool > /dev/null
- then
- exiftool -tagsFromfile "$MAIN_PICTURE.$TIFF_EXT" \
- -software="Megapixels" \
- -overwrite_original "$TARGET_NAME.jpg"
- fi
- echo "$TARGET_NAME.jpg"
- else
- cp "$MAIN_PICTURE.$TIFF_EXT" "$TARGET_NAME.tiff"
- echo "$TARGET_NAME.tiff"
- fi
- fi
- # Clean up the temp dir containing the burst
- rm -rf "$BURST_DIR"
- # Clean up the .dng if the user didn't want it
- if [ "$SAVE_DNG" -eq "0" ]; then
- rm "$TARGET_NAME.dng"
- fi
|