Skip to content

Instantly share code, notes, and snippets.

@stevenpray
Created February 11, 2020 01:26
Show Gist options
  • Save stevenpray/157ec3d659c7c6504d3c51c6f7d0f93a to your computer and use it in GitHub Desktop.
Save stevenpray/157ec3d659c7c6504d3c51c6f7d0f93a to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
LOG_FILE=
function log() {
local LOG_TEXT="${1}"
local LOG_DATE=
LOG_DATE="$(date -u +'%Y-%m-%dT%H:%M:%S.%3NZ')"
if [ ! -z "${LOG_FILE}" ]; then
echo -e "${LOG_DATE}\t${LOG_TEXT}" >>"${LOG_FILE}"
fi
echo "${LOG_TEXT}"
}
log "Postprocess started"
TRANSCODE_TIMER_START=${SECONDS}
function err() {
log "ERROR: ${1}"
log "Postprocess errored in $((${SECONDS} - ${TRANSCODE_TIMER_START}))s"
exit 1
}
TRANSCODE_SRC="${1}"
if [ -z "${TRANSCODE_SRC}" ]; then
err "File is required"
fi
if [ "${TRANSCODE_SRC:0:1}" != "/" ]; then
TRANSCODE_SRC="$(pwd)/${TRANSCODE_SRC}"
fi
if [ ! -f "${TRANSCODE_SRC}" ]; then
err "File does not exist"
fi
TRANSCODE_DIR="$(dirname "${TRANSCODE_SRC}")"
#log "TRANSCODE_DIR: '${TRANSCODE_DIR}'"
TRANSCODE_SRC="$(basename "${TRANSCODE_SRC}")"
#log "TRANSCODE_SRC: '${TRANSCODE_SRC}'"
TRANSCODE_OUT="${TRANSCODE_SRC%.*}.mkv"
#log "TRANSCODE_OUT: '${TRANSCODE_OUT}'"
OLD_FILENAME="${TRANSCODE_SRC}"
NEW_FILENAME=$(echo "${TRANSCODE_SRC}" | sed -e "s/[^A-Za-z0-9,'()/ ._-]/_/g")
if [ "${OLD_FILENAME}" != "${NEW_FILENAME}" ]; then
mv "${TRANSCODE_DIR}/${OLD_FILENAME}" "${TRANSCODE_DIR}/${NEW_FILENAME}" || err "Failed to rename src file"
TRANSCODE_SRC="${NEW_FILENAME}"
fi
cd "${TRANSCODE_DIR}" || err "Failed to change dir"
if [ -f "${TRANSCODE_OUT}" ]; then
err "File already exists"
fi
if [ -d "${TRANSCODE_OUT}" ]; then
err "File already exists"
fi
TRANSCODE_RES=$(
LD_LIBRARY_PATH="" \
ffprobe \
-v error \
-select_streams v:0 \
-show_entries stream=height -of csv=s=x:p=0 \
"${TRANSCODE_SRC}"
) || err "Failed to get src resolution"
TRANSCODE_RES=$(echo ${TRANSCODE_RES} | awk '{print $1}')
#log "TRANSCODE_RES: ${TRANSCODE_RES}"
TRANSCODE_VBR=6000
if [[ ${TRANSCODE_RES} -lt 720 ]]; then
TRANSCODE_VBR=4000
fi
if [[ ${TRANSCODE_RES} -lt 480 ]]; then
TRANSCODE_VBR=1500
fi
#log "TRANSCODE_VBR: ${TRANSCODE_VBR}"
LD_LIBRARY_PATH="" \
ffmpeg \
-i "${TRANSCODE_SRC}" \
-loglevel error \
-vaapi_device /dev/dri/renderD128 \
-f lavfi -i movie="${TRANSCODE_SRC}[out+subcc]" \
-c:s srt \
-metadata:s:s:0 language=eng \
-filter:v yadif\=deint\=interlaced,format\=nv12,hwupload \
-color_primaries:v bt709 \
-color_trc:v bt709 \
-colorspace:v bt709 \
-c:v hevc_vaapi \
-b:v ${TRANSCODE_VBR}k \
-metadata:s:v title\= \
-disposition:v default \
-c:a copy \
-metadata:s:a:0 title\= \
-disposition:a:0 default \
-map 0:v:0 -map 0:m:language:eng -map 1:s \
"${TRANSCODE_OUT}"
TRANSCODE_STATUS=$?
if [ ${TRANSCODE_STATUS} -eq 0 ]; then
rm "${TRANSCODE_SRC}" || err "Failed to remove src file"
#log "Removed '${TRANSCODE_SRC}'"
elif [ -f "${TRANSCODE_OUT}" ]; then
rm "${TRANSCODE_OUT}" || err "Failed to remove out file"
#log "Removed '${TRANSCODE_OUT}'"
fi
log "Postprocess completed in $((${SECONDS} - ${TRANSCODE_TIMER_START}))s"
exit ${TRANSCODE_RETVAL}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment