diff --git a/video-convert b/video-convert index af2b640..55a8b2c 100755 --- a/video-convert +++ b/video-convert @@ -2,8 +2,12 @@ # Look into HW video encoding to vp9 instead of h264: # https://www.reddit.com/r/VP9/comments/g9uzzv/hardware_encoding_vp9_on_intel/ +log_file="" fail() { echo "$*" >&2 + if [[ -e ${log_file} ]]; then + rm ${log_file} + fi exit -1 } @@ -50,10 +54,16 @@ mstodate() { function move { base="$(dirname "${IN}")" - [ ! -d "${base}" ] && continue - base=/remote/media/backup/"${base}" - [ ! -d "${base}" ] && mkdir -p "${base}" || fail "Unable to mkdir '${base}'" - [ -e "${base}" ] && mv "${IN}" "${base}"/ || fail "Unable to move '$IN'" + if [ ! -d "${base}" ]; then + continue + fi + base=/multimedia/backup"${base}" + if [ ! -d "${base}" ]; then + mkdir -p "${base}" || fail "Unable to mkdir '${base}'" + fi + if [ -d "${base}" ]; then + mv "${IN}" "${base}"/ || fail "Unable to move '$IN'" + fi } function convert { @@ -61,13 +71,15 @@ function convert { SRC_CODEC="$2" FORMAT="$3" OUT="${IN/%.???/.mkv}" - ORIG=${OUT} + IN="$(realpath "${IN}")" + OUT="$(realpath "${OUT}")" + ORIG="${OUT}" if [[ "${OUT}" == "${IN}" ]]; then - OUT=${OUT/.mkv/.transcoded.mkv} + OUT="${OUT/.mkv/.transcoded.mkv}" [ -e "${OUT}" ] && rm "${OUT}" else [ -e "${OUT}" ] && move && return 0 - [ -e /remote/media/backup/"${OUT}" ] && return 0 + [ -e /multimedia/backup/"${OUT}" ] && return 0 fi TITLE="${IN%.*}" @@ -94,7 +106,7 @@ function convert { -c copy -vf vpp_qsv=format=nv12 -c:v h264_qsv - -global_quality 25 + -global_quality 20 " fi @@ -106,24 +118,23 @@ function convert { STARTTIME=$(date +%s) LASTTIME=${STARTTIME} LASTPOS=0 - IN=$(realpath "${IN}") - OUT=$(realpath "${OUT}") - DIN=$(dirname "${IN}") - DOUT=$(dirname "${OUT}") + DIN="$(dirname "${IN}")" + DOUT="$(dirname "${OUT}")" quiet=" -v quiet - -loglevel fatal + -loglevel error " # quiet="" + log_file=$(mktemp) { docker run \ --device=/dev/dri \ --user=$(id -u) \ --rm \ ${ADD_GROUPS} \ - -v "${DIN}:${DIN}" \ - -v "${DOUT}:${DOUT}" \ + -v "${DIN}":"${DIN}" \ + -v "${DOUT}":"${DOUT}" \ intel-media-ffmpeg \ ffmpeg \ ${quiet} \ @@ -135,22 +146,25 @@ function convert { ${output_flags} \ -movflags +faststart \ "${OUT}" \ - -y || echo "ffmpeg failed" + -y || echo "FFMPEG failed" | tee ${log_file} } | while read line; do if [[ "${line}" == "ffmpeg failed" ]]; then - fail "FFMPEG failed" + cat ${log_file} + fail "Terminating" false exit -1 break fi POS=$(echo $line | sed -n 's/^frame=*\(.*\)/\1/p') if [[ "${POS}" == "" ]]; then + true continue fi NOW=$(date +%s) ELAPSEDTIME=$(( NOW - LASTTIME )) if (( ELAPSEDTIME <= 5 )); then + true continue fi @@ -174,6 +188,7 @@ function convert { mv "${OUT}" "${IN}" || fail "Unable to mv '${OUT}' -> '${IN}'" fi } + rm ${log_file} NOW=$(date +%s) echo -e "\nCompleted in $(mstodate $(( NOW - STARTTIME ))000)" } @@ -199,6 +214,8 @@ function check_and_convert { } if [ -z "$1" ]; then + find . -name '* *' -type d | while read file; do mv "${file}" "${file// /_}" || fail "Unable to rename dir ${file}"; done + find . -name '* *' -type f | while read file; do mv "${file}" "${file// /_}" || fail "Unable to rename file ${file}"; done find . -type f \ -and -not -path "./backup/*" | sort | while read file; do check_and_convert "${file}" @@ -208,3 +225,11 @@ else check_and_convert "${file}" done fi + +cat << EOF +To transfer the updated files: + +rsync -avprlP --remove-source-files /multimedia/Downloads/ azurite:/multimedia/ +find /multimedia/Downloads/ -type d -empty -delete + +EOF