Files
bash-folders/bash-folders-video-optimizer.sh

78 lines
1.5 KiB
Bash
Executable File

#!/usr/bin/env bash
usage() {
cat << EOF
USAGE: ${0##*/} [OPTION] PATH
Watches when new videos are added to a folder and optimizes them.
OPTIONS:
--help Display this usage message and exit
EOF
}
optimize() {
touch -a "${2}"
ffmpeg \
-i "${1}" \
-c:v "libx264" \
-tune stillimage \
-c:a "aac" \
-b:a "192k" \
-pix_fmt "yuv420p" \
-nostdin \
-shortest \
"${2}"
}
run() {
local file extension optimized
optimized="${1}/optimized"
set -e
mkdir --parents "${optimized}"
while read -r file; do
extension="${file##*.}"
[[ "${extension,,}" =~ (avi|m(kv|p4|ov)) ]] || continue
printf '%s\n' "Optimizing file '${file}'..."
if ! optimize "${file}" "${optimized}/${file%.*}.mp4"; then
printf '%s\n' "Failed to optimize file: '${file}'" >&2
fi
done < <(inotifywait --monitor --event "create" --event "moved_to" --format '%f' "${1}")
}
main() {
local opts
opts="$(getopt \
--options h \
--longoptions help \
--name "${0##*/}" \
-- "${@}" \
)"
eval set -- "${opts}"
while true; do
case "${1}" in
-h | --help ) usage; return 0;;
-- ) shift; break;;
* ) break;;
esac
shift
done
if [[ -z "${1}" ]]; then
printf '%s\n' "No folder specified" >&2
return 1
fi
mkdir --parents "${1}"
run "${1}"
}
main "${@}"