diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2868744 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +config + diff --git a/README.md b/README.md index 95b5ac7..a5e5a2a 100644 --- a/README.md +++ b/README.md @@ -147,6 +147,7 @@ of this parameter has the format `=`. |`AUTOMATED_CONVERSION_HANDBRAKE_CUSTOM_ARGS`| Custom arguments to pass to HandBrake when performing a conversion. | (no value) | |`AUTOMATED_CONVERSION_INSTALL_PKGS`| Space-separated list of Alpine Linux packages to install. This is useful when the automatic video converter's hooks require tools not available in the container image. See https://pkgs.alpinelinux.org for the list of available Alpine Linux packages. | (no value) | |`AUTOMATED_CONVERSION_USE_TRASH`| When set to `1`, the automatic video converter uses the trash directory. So when the automatic video converter is configured to *not* keep sources, it will move them to the trash directory (`/trash` inside the container) instead of deleting them. | `0` | +|`AUTOMATED_CONVERSION_IGNORE_DIRECTORIES`| Space-separated list of directories which should be ignored. | (no value) | #### Deployment Considerations diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..eea786f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +version: "3" +services: + handbrake: + #build: ./ + image: salvachll/handbrake + restart: always + user: 0:0 + volumes: + - "./config:/config:rw" + - "/mnt/dirToWatch/:/watch:rw" + - "/mnt/dirToWatch/:/output:rw" + ports: + - 5800:5800 + environment: + - USER_ID=0 + - GROUP_ID=0 + - KEEP_APP_RUNNING=1 + - CONTAINER_DEBUG=1 + - AUTOMATED_CONVERSION=1 + - AUTOMATED_CONVERSION_PRESET=General/Super HQ 1080p30 Surround + - AUTOMATED_CONVERSION_FORMAT=mp4 + - AUTOMATED_CONVERSION_VIDEO_FILE_EXTENSIONS=avi mp4 # Convert just .avi files + - AUTOMATED_CONVERSION_OUTPUT_SUBDIR=SAME_AS_SRC # Output folder should be the same as the original file + - AUTOMATED_CONVERSION_NON_VIDEO_FILE_ACTION=ignore # Ignore non matching files + - AUTOMATED_CONVERSION_CHECK_INTERVAL=3600 # Check every hour + - AUTOMATED_CONVERSION_SOURCE_STABLE_TIME=2 + - AUTOMATED_CONVERSION_IGNORE_DIRECTORIES=ignore alsothis diff --git a/rootfs/etc/services.d/autovideoconverter/run b/rootfs/etc/services.d/autovideoconverter/run index eeb89d7..1eadffd 100755 --- a/rootfs/etc/services.d/autovideoconverter/run +++ b/rootfs/etc/services.d/autovideoconverter/run @@ -75,7 +75,15 @@ log_hb_encode_progress_yad() { WATCHDIR_HASH_calculate() { WATCHDIR="$1" - find "$WATCHDIR" -follow -type f -not -path '*/\.*' -printf '%T@:%s:%p:%m\n' | md5sum | cut -d' ' -f1 + echo ----------------------------------------------------------------- + echo ----------------------------------------------------------------- + echo ----------------------------------------------------------------- + echo find "$WATCHDIR" -follow -type f $FILE_EXTENSIONS_PARAMS $IGNORED_DIRECTORIES_PARAMS -not -path '*/\.*' -printf '%T@:%s:%p:%m\n' + echo ----------------------------------------------------------------- + echo ----------------------------------------------------------------- + echo ----------------------------------------------------------------- + + eval find "$WATCHDIR" -follow -type f $FILE_EXTENSIONS_PARAMS $IGNORED_DIRECTORIES_PARAMS -not -path '*/\.*' -printf '%T@:%s:%p:%m\n' | md5sum | cut -d' ' -f1 } WATCHDIR_HASH_isset() { @@ -408,7 +416,13 @@ process_watch_folder() { # First, get the list of files in the watch folder, filtering all files # files under VIDEO_TS or BDMV and keeping only their parent directory. - find "$WF" -follow -type f -not -path '*/\.*' -printf "%T@ %p\n" | \ + echo ----------------------------------------------------------------- + echo ----------------------------------------------------------------- +echo find "$WF" -follow -type f $FILE_EXTENSIONS_PARAMS $IGNORED_DIRECTORIES_PARAMS -not -path '*/\.*' -printf "\"%T@ %p\n\"" + echo ----------------------------------------------------------------- + echo ----------------------------------------------------------------- + + eval find "$WF" -follow -type f $FILE_EXTENSIONS_PARAMS $IGNORED_DIRECTORIES_PARAMS -not -path '*/\.*' -printf "\"%T@ %p\n\"" | \ sort -n | \ cut -d' ' -f2- | \ sed 's|/\([^/]*\)/VIDEO_TS/.*$|/\1|g' | \ @@ -460,6 +474,49 @@ process_watch_folder() { [ -f "$FAILED_CONVERSIONS" ] || touch "$FAILED_CONVERSIONS" [ -f "$SUCCESSFUL_CONVERSIONS" ] || touch "$SUCCESSFUL_CONVERSIONS" + +set_default_settings() { + # Set default settings. + AC_PRESET="${AUTOMATED_CONVERSION_PRESET:-Very Fast 1080p30}" + AC_FORMAT="${AUTOMATED_CONVERSION_FORMAT:-mp4}" + AC_SOURCE_STABLE_TIME="${AUTOMATED_CONVERSION_SOURCE_STABLE_TIME:-5}" + AC_SOURCE_MIN_DURATION="${AUTOMATED_CONVERSION_SOURCE_MIN_DURATION:-10}" + AC_SOURCE_MAIN_TITLE_DETECTION="${AUTOMATED_CONVERSION_SOURCE_MAIN_TITLE_DETECTION:-0}" + AC_OUTPUT_DIR="${AUTOMATED_CONVERSION_OUTPUT_DIR:-/output}" + AC_OUTPUT_SUBDIR="${AUTOMATED_CONVERSION_OUTPUT_SUBDIR:-UNSET}" + AC_KEEP_SOURCE="${AUTOMATED_CONVERSION_KEEP_SOURCE:-1}" + AC_VIDEO_FILE_EXTENSIONS="${AUTOMATED_CONVERSION_VIDEO_FILE_EXTENSIONS:-}" + AC_NON_VIDEO_FILE_ACTION="${AUTOMATED_CONVERSION_NON_VIDEO_FILE_ACTION:-ignore}" + AC_NON_VIDEO_FILE_EXTENSIONS="${AUTOMATED_CONVERSION_NON_VIDEO_FILE_EXTENSIONS:-jpg jpeg bmp png gif txt nfo}" + AC_NO_GUI_PROGRESS="${AUTOMATED_CONVERSION_NO_GUI_PROGRESS:-0}" + AC_HANDBRAKE_CUSTOM_ARGS="${AUTOMATED_CONVERSION_HANDBRAKE_CUSTOM_ARGS:-}" + AC_OVERWRITE_OUTPUT="${AUTOMATED_CONVERSION_OVERWRITE_OUTPUT:-0}" + AC_IGNORE_DIRECTORIES="${AUTOMATED_CONVERSION_IGNORE_DIRECTORIES:-}" + + IGNORED_DIRECTORIES_PARAMS="" + for ignored_dir in $AC_IGNORE_DIRECTORIES; do + IGNORED_DIRECTORIES_PARAMS="$IGNORED_DIRECTORIES_PARAMS -not -path '*$ignored_dir*'" + done + + FILE_EXTENSIONS_PARAMS="" + if [[ ! -z $AC_VIDEO_FILE_EXTENSIONS ]]; then + FILE_EXTENSIONS_PARAMS="\\( " + for file_extension in $AC_VIDEO_FILE_EXTENSIONS; do + FILE_EXTENSIONS_PARAMS="$FILE_EXTENSIONS_PARAMS -iname '*.$file_extension' -o" + done + FILE_EXTENSIONS_PARAMS="${FILE_EXTENSIONS_PARAMS::-2} \\)" + echo FILE_EXTENSIONS_PARAMS $FILE_EXTENSIONS_PARAMS + fi + + # Apply per-watch folder settings. + if [ -n "${DIR#*/watch}" ]; then + for VAR in PRESET FORMAT SOURCE_STABLE_TIME SOURCE_MIN_DURATION SOURCE_MAIN_TITLE_DETECTION OUTPUT_DIR OUTPUT_SUBDIR KEEP_SOURCE VIDEO_FILE_EXTENSIONS NON_VIDEO_FILE_ACTION NON_VIDEO_FILE_EXTENSIONS NO_GUI_PROGRESS HANDBRAKE_CUSTOM_ARGS OVERWRITE_OUTPUT IGNORE_DIRECTORIES + do + eval "AC_$VAR=\"\${AUTOMATED_CONVERSION_${VAR}_${DIR#*/watch}:-\$AC_$VAR}\"" + done + fi +} + while true; do for i in $(seq 1 ${AUTOMATED_CONVERSION_MAX_WATCH_FOLDERS:-5}); do DIR="/watch$i" @@ -467,29 +524,7 @@ while true; do DIR="/watch" fi - # Set default settings. - AC_PRESET="${AUTOMATED_CONVERSION_PRESET:-Very Fast 1080p30}" - AC_FORMAT="${AUTOMATED_CONVERSION_FORMAT:-mp4}" - AC_SOURCE_STABLE_TIME="${AUTOMATED_CONVERSION_SOURCE_STABLE_TIME:-5}" - AC_SOURCE_MIN_DURATION="${AUTOMATED_CONVERSION_SOURCE_MIN_DURATION:-10}" - AC_SOURCE_MAIN_TITLE_DETECTION="${AUTOMATED_CONVERSION_SOURCE_MAIN_TITLE_DETECTION:-0}" - AC_OUTPUT_DIR="${AUTOMATED_CONVERSION_OUTPUT_DIR:-/output}" - AC_OUTPUT_SUBDIR="${AUTOMATED_CONVERSION_OUTPUT_SUBDIR:-UNSET}" - AC_KEEP_SOURCE="${AUTOMATED_CONVERSION_KEEP_SOURCE:-1}" - AC_VIDEO_FILE_EXTENSIONS="${AUTOMATED_CONVERSION_VIDEO_FILE_EXTENSIONS:-}" - AC_NON_VIDEO_FILE_ACTION="${AUTOMATED_CONVERSION_NON_VIDEO_FILE_ACTION:-ignore}" - AC_NON_VIDEO_FILE_EXTENSIONS="${AUTOMATED_CONVERSION_NON_VIDEO_FILE_EXTENSIONS:-jpg jpeg bmp png gif txt nfo}" - AC_NO_GUI_PROGRESS="${AUTOMATED_CONVERSION_NO_GUI_PROGRESS:-0}" - AC_HANDBRAKE_CUSTOM_ARGS="${AUTOMATED_CONVERSION_HANDBRAKE_CUSTOM_ARGS:-}" - AC_OVERWRITE_OUTPUT="${AUTOMATED_CONVERSION_OVERWRITE_OUTPUT:-0}" - - # Apply per-watch folder settings. - if [ -n "${DIR#*/watch}" ]; then - for VAR in PRESET FORMAT SOURCE_STABLE_TIME SOURCE_MIN_DURATION SOURCE_MAIN_TITLE_DETECTION OUTPUT_DIR OUTPUT_SUBDIR KEEP_SOURCE VIDEO_FILE_EXTENSIONS NON_VIDEO_FILE_ACTION NON_VIDEO_FILE_EXTENSIONS NO_GUI_PROGRESS HANDBRAKE_CUSTOM_ARGS OVERWRITE_OUTPUT - do - eval "AC_$VAR=\"\${AUTOMATED_CONVERSION_${VAR}_${DIR#*/watch}:-\$AC_$VAR}\"" - done - fi + set_default_settings # Process watch folder. process_watch_folder "$DIR" @@ -498,4 +533,3 @@ while true; do sleep "${AUTOMATED_CONVERSION_CHECK_INTERVAL:-5}" done -# vim:ft=sh:ts=4:sw=4:et:sts=4