diff options
Diffstat (limited to 'ffmpeg/resize-and-transcode-recursively')
-rwxr-xr-x | ffmpeg/resize-and-transcode-recursively | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/ffmpeg/resize-and-transcode-recursively b/ffmpeg/resize-and-transcode-recursively new file mode 100755 index 0000000..8a7a207 --- /dev/null +++ b/ffmpeg/resize-and-transcode-recursively @@ -0,0 +1,65 @@ +#!/bin/sh +#### rmdir test rm mv mkdir printf sed grep rev cut stat(-c "%s") ffprobe ffmpeg + +set -u + +if test $# -lt 2 || test $# -gt 3 || test -z "$1" || test -z "$2"; then + printf "usage: %s input-dir output-dir [max-min-dim]\n" "$0" >&2 + exit 1 +fi + +err () { + colour="$1" + format="$2" + shift 2 + printf '\x1b['"${colour}m${format}"'\x1b[m\n' "$@" >&2 +} + +alert () { err "1;31" "$@"; } +header () { err "1;34" "$@"; } +subheader () { err "34" "$@"; } +red () { err "31" "$@"; } +green () { err "32" "$@"; } +yellow () { err "33" "$@"; } +magenta () { err "35" "$@"; } +cyan () { err "36" "$@"; } + +input="$(printf '%s\n' "$1" | sed '$s/\/*$/\//')" +output="$(printf '%s\n' "$2" | sed '$s/\/*$/\//')" +shift 2 + +process() { + d="$1" + shift 1 + for f in "$d"*; do + if test -L "$f"; then + continue + elif test -f "$f"; then + if printf '%s\n' "$f" | sed -n '$p' | grep '\.tmp\.mkv$' >/dev/null; then + alert 'Old temporary file found: %s' "$f" + continue + fi + file="${f#$input}" + keep="$output$file" + tmp="$(printf '%s\n' "$f" | rev | cut -d . -f 2- | rev).tmp.mkv" + out="$(printf '%s\n' "$keep" | rev | cut -d . -f 2- | rev).mkv" + mkdir -p -- "$(dirname -- "$out")" + resize-and-transcode "$f" "$tmp" "$@" + r=$? + if test $r = 0; then + if ! mv -- "$tmp" "$out" ; then + alert 'Failed to move %s to %s' "$tmp" "$out" + elif ! rm -- "$f"; then + alert 'Failed to remove old file: %s' "$f" + fi + elif test $r = 1; then + mv -- "$f" "$keep" + fi + elif test -d "$f"; then + process "$f/" "$@" + fi + done + rmdir -- "$d" 2>/dev/null || : +} + +process "$input" "$@" |