Add sync-camera
A script to automatically copy files from the camera. It will also automatically convert MOV to MP4.
This commit is contained in:
parent
2ee3e3c322
commit
a361543acf
95
sync-camera
Executable file
95
sync-camera
Executable file
@ -0,0 +1,95 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
CAMERA_DEVICE=""
|
||||||
|
MOUNT_DIR="/tmp/camera-mount"
|
||||||
|
OUTPUT_DIR=""
|
||||||
|
REMOVE_FILES=0
|
||||||
|
|
||||||
|
function print_usage() {
|
||||||
|
echo "USAGE: ${0##*/} -d <device> -o <dir> [-t <dir>] [-r]"
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts "d:o:t:rh" opt
|
||||||
|
do
|
||||||
|
case "$opt" in
|
||||||
|
'd')
|
||||||
|
CAMERA_DEVICE=${OPTARG}
|
||||||
|
;;
|
||||||
|
'o')
|
||||||
|
OUTPUT_DIR=${OPTARG}
|
||||||
|
;;
|
||||||
|
't')
|
||||||
|
MOUNT_DIR="${OPTARG}"
|
||||||
|
;;
|
||||||
|
'r')
|
||||||
|
REMOVE_FILES=1
|
||||||
|
;;
|
||||||
|
'h')
|
||||||
|
print_usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$CAMERA_DEVICE" ]
|
||||||
|
then
|
||||||
|
echo "Failed to set the camera device."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$OUTPUT_DIR" ]
|
||||||
|
then
|
||||||
|
echo "Failed to set the output directory."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! mkdir "$MOUNT_DIR"
|
||||||
|
then
|
||||||
|
echo "Unable to create mount directory '$MOUNT_DIR'."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! sudo mount -o "uid=$(id --user),gid=$(id --group)" "$CAMERA_DEVICE" "$MOUNT_DIR"
|
||||||
|
then
|
||||||
|
rmdir "$MOUNT_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
while IFS= read -r -d '' INPUT_FILE
|
||||||
|
do
|
||||||
|
OUTPUT_PATH="$OUTPUT_DIR/${INPUT_FILE##*/}"
|
||||||
|
if ! [ -f "$OUTPUT_PATH" ]
|
||||||
|
then
|
||||||
|
echo "Copying ${INPUT_FILE} to ${OUTPUT_PATH} ..."
|
||||||
|
cp "$INPUT_FILE" "${OUTPUT_PATH::-4}.jpg"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $REMOVE_FILES -eq 1 ]
|
||||||
|
then
|
||||||
|
echo "Removing ${INPUT_FILE} and ${INPUT_FILE::-4}.THM ..."
|
||||||
|
rm -f "$INPUT_FILE" "${INPUT_FILE::-4}.THM"
|
||||||
|
fi
|
||||||
|
done < <(find "$MOUNT_DIR" -type f -name '*.JPG' -print0)
|
||||||
|
|
||||||
|
while IFS= read -r -d '' INPUT_FILE
|
||||||
|
do
|
||||||
|
OUTPUT_PATH="$OUTPUT_DIR/${INPUT_FILE##*/}"
|
||||||
|
if ! [ -f "$OUTPUT_PATH" ]
|
||||||
|
then
|
||||||
|
echo "Converting ${INPUT_FILE} to MP4 at ${OUTPUT_PATH} ..."
|
||||||
|
ffmpeg -loglevel fatal -nostdin -i "$INPUT_FILE" "${OUTPUT_PATH::-4}.mp4"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $REMOVE_FILES -eq 1 ]
|
||||||
|
then
|
||||||
|
echo "Removing ${INPUT_FILE} and ${INPUT_FILE::-4}.THM ..."
|
||||||
|
rm -f "$INPUT_FILE" "${INPUT_FILE::-4}.THM"
|
||||||
|
fi
|
||||||
|
done < <(find "$MOUNT_DIR" -type f -name '*.MOV' -print0)
|
||||||
|
|
||||||
|
sudo umount "$MOUNT_DIR"
|
||||||
|
rmdir "$MOUNT_DIR"
|
Loading…
Reference in New Issue
Block a user