From 96f115675c396ee192749b6709c9abb72218f8bc Mon Sep 17 00:00:00 2001 From: Dave Rice Date: Tue, 13 Mar 2018 10:47:33 -0400 Subject: [PATCH 01/12] remove comment --- makelossless | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makelossless b/makelossless index feb5ccb5..bc447cf4 100755 --- a/makelossless +++ b/makelossless @@ -1,6 +1,6 @@ #!/bin/bash # makelossless -#this script is not actively maintained. + VERSION="1.0" SCRIPTDIR=$(dirname $(which "${0}")) . "${SCRIPTDIR}/mmfunctions" || { echo "Missing '${SCRIPTDIR}/mmfunctions'. Exiting." ; exit 1 ;}; From 0604770cde61c164a7518a99d185ad07e899b498 Mon Sep 17 00:00:00 2001 From: Dave Rice Date: Tue, 13 Mar 2018 10:23:59 -0400 Subject: [PATCH 02/12] use OBJECTS_FIND_EXCLUSIONS array to standardize how to search in objects --- makeframemd5 | 2 +- mmfunctions | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/makeframemd5 b/makeframemd5 index 92c505d7..10463fe3 100755 --- a/makeframemd5 +++ b/makeframemd5 @@ -38,7 +38,7 @@ while [ "${*}" != "" ] ; do _set_up_framemd5 cd "${PACKAGE_PATH}" FILELIST=$(_maketemp) - find "./objects" -type f ! -name ".*" ! -path "*/access/*" ! -path "*/service/*" > "${FILELIST}" + find "./objects" -type f "${OBJECTS_FIND_EXCLUSIONS[@]}" > "${FILELIST}" (IFS=$'\n' for FILE in $(cat "${FILELIST}") ; do VIDEOTEST=$(file -Ib "${FILE}" | grep 'video') diff --git a/mmfunctions b/mmfunctions index 2e705d36..ce04f5e4 100755 --- a/mmfunctions +++ b/mmfunctions @@ -2,6 +2,11 @@ SCRIPTNAME=$(basename "${0}") SCRIPTDIR=$(dirname "${0}") +OBJECTS_FIND_EXCLUSIONS=(! -name ".*") +OBJECTS_FIND_EXCLUSIONS+=(! -path "*/access/*") +OBJECTS_FIND_EXCLUSIONS+=(! -path "*/service/*") +OBJECTS_FIND_EXCLUSIONS+=(! -path "*/trimmed_materials/*") + # load configuration file if [ -f "${TEMP_MMCONFIG}" ] ; then # for use in ingestfiletest; prevents test files from going to permanent storage @@ -991,7 +996,7 @@ _find_input (){ ISOBJECT="Y" INPUTFILES=$(_maketemp) # find av files in a directory and output to a temp list - find "${1}/objects" -type f -size +0 ! -path "*/access/*" ! -path "*/service/*" ! -name ".DS_Store" | while read file ; do + find "${1}/objects" -type f -size +0 "${OBJECTS_FIND_EXCLUSIONS[@]}" | while read file ; do streamcount=$(ffprobe -loglevel quiet "$file" -show_entries format=nb_streams -of default=nw=1:nk=1) duration_ts=$(ffprobe -loglevel quiet "$file" -show_entries stream=duration_ts -of default=nw=1:nk=1) if [[ "$streamcount" > 0 && "${duration_ts}" != 1 ]] ; then From 9819518f007fae94c9536ec9f03b533dbc2c72d8 Mon Sep 17 00:00:00 2001 From: Dave Rice Date: Tue, 20 Mar 2018 11:47:56 -0400 Subject: [PATCH 03/12] refactor input handling better filtering of candidate input files --- makelossless | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/makelossless b/makelossless index bc447cf4..14317362 100755 --- a/makelossless +++ b/makelossless @@ -40,8 +40,36 @@ while [ "${*}" != "" ] ; do [ -d "${INPUT}" ] && LOGDIR="${INPUT}/metadata/logs" [ -f "${INPUT}" ] && LOGDIR="$(dirname "${INPUT}")/lossless/logs" [ ! "${LOGDIR}" ] && LOGDIR="${INPUT}/metadata/logs" + + INPUTFILES=$(_maketemp) - find "${INPUT}" -type f \( -iname "*.mov" -o -iname "*.avi" -o -iname "*.mxf" \) -print0 | while read -d $'\0' SOURCEFILE ; do + if [ -f "${INPUT}" ] ; then + streamcount=$(ffprobe -loglevel quiet "$file" -show_entries format=nb_streams -of default=nw=1:nk=1) + duration_ts=$(ffprobe -loglevel quiet "$file" -show_entries stream=duration_ts -of default=nw=1:nk=1) + if [[ "$streamcount" > 0 && "${duration_ts}" != 1 ]] ; then + _report -d "Input file: $file" + echo "$file" >> "${INPUTFILES}" + fi + elif [ -d "${INPUT}" ] ; then + # find av files in a directory and output to a temp list + find "${1}/objects" -type f -size +0 "${OBJECTS_FIND_EXCLUSIONS[@]}" | while read file ; do + streamcount=$(ffprobe -loglevel quiet "$file" -show_entries format=nb_streams -of default=nw=1:nk=1) + duration_ts=$(ffprobe -loglevel quiet "$file" -show_entries stream=duration_ts -of default=nw=1:nk=1) + if [[ "$streamcount" > 0 && "${duration_ts}" != 1 ]] ; then + _report -d "Input file: $file" + echo "$file" >> "${INPUTFILES}" + fi + done + else + _report -wt "Error: ${INPUT} is not a file or directory" + exit 1 + fi + INPUTFILECOUNT=$(wc -l "${INPUTFILES}" | awk '{print $1}') + if [[ "${INPUTFILECOUNT}" = 0 ]] ; then + _report -w "Error no audiovisual input files were found." + exit 1 + fi + while read SOURCEFILE ; do OUTPUTDIR=$(dirname "${SOURCEFILE}") SOURCEFILENAME=$(basename "${SOURCEFILE}") @@ -102,7 +130,7 @@ while [ "${*}" != "" ] ; do continue fi _report -dt done with "${SOURCEFILE}" - done + done < "${INPUTFILES}" shift _log -e done From 5a85e18236c37d1769387ea09d3dd16dee3ea0f5 Mon Sep 17 00:00:00 2001 From: Dave Rice Date: Tue, 20 Mar 2018 13:35:35 -0400 Subject: [PATCH 04/12] split array filling --- makelossless | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/makelossless b/makelossless index 14317362..ddd0765f 100755 --- a/makelossless +++ b/makelossless @@ -95,7 +95,9 @@ while [ "${*}" != "" ] ; do INPUTOPTIONSFRAMEMD5+=(-vcodec libopenjpeg) SUFFIX="_j2k" else - MIDDLEOPTIONS+=(-c:v ffv1 -level 3 -g 1) + MIDDLEOPTIONS+=(-c:v ffv1) + MIDDLEOPTIONS+=(-level 3) + MIDDLEOPTIONS+=(-g 1) SUFFIX="_ffv1" fi _add_video_filter "setfield=bff" # this is a presumption but much of the uncompressed input is bff but not probably labelled From f60a6a64837b9c83dfb4e9589bf9f6e74fd734eb Mon Sep 17 00:00:00 2001 From: Dave Rice Date: Tue, 20 Mar 2018 13:37:59 -0400 Subject: [PATCH 05/12] only make logging directory if running --- makelossless | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makelossless b/makelossless index ddd0765f..ff9fb59d 100755 --- a/makelossless +++ b/makelossless @@ -106,9 +106,9 @@ while [ "${*}" != "" ] ; do MIDDLEOPTIONS+=(-c:a copy) fi _get_codectagstring "${SOURCEFILE}" - _run mkdir -p "${OUTPUTDIR}" "${LOGDIR}" if [ "${CODEC_TAG_STRING}" == "2vuy" -o "${CODEC_TAG_STRING}" == "v210" ] ; then _report -dt "${SOURCEFILENAME} is ${CODEC_TAG_STRING}, starting encode" + _run mkdir -p "${OUTPUTDIR}" "${LOGDIR}" _prep_ffmpeg_log _filter_to_middle_option From 63283997fcd9eb786cd632ad8a812c0a1822ec95 Mon Sep 17 00:00:00 2001 From: Dave Rice Date: Tue, 20 Mar 2018 13:53:49 -0400 Subject: [PATCH 06/12] update bracketed conditions --- makelossless | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makelossless b/makelossless index ff9fb59d..33af3218 100755 --- a/makelossless +++ b/makelossless @@ -106,7 +106,7 @@ while [ "${*}" != "" ] ; do MIDDLEOPTIONS+=(-c:a copy) fi _get_codectagstring "${SOURCEFILE}" - if [ "${CODEC_TAG_STRING}" == "2vuy" -o "${CODEC_TAG_STRING}" == "v210" ] ; then + if [[ "${CODEC_TAG_STRING}" == "2vuy" || "${CODEC_TAG_STRING}" == "v210" ]] ; then _report -dt "${SOURCEFILENAME} is ${CODEC_TAG_STRING}, starting encode" _run mkdir -p "${OUTPUTDIR}" "${LOGDIR}" _prep_ffmpeg_log From 3da20dab734c170f2f331bdff482469170134db7 Mon Sep 17 00:00:00 2001 From: Dave Rice Date: Tue, 20 Mar 2018 14:44:22 -0400 Subject: [PATCH 07/12] also run on ffv1 versions less than 3 --- makelossless | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/makelossless b/makelossless index 33af3218..6f10cdf9 100755 --- a/makelossless +++ b/makelossless @@ -21,6 +21,10 @@ _usage(){ } [ "${#}" = 0 ] && _usage +_get_ffv1_version(){ + FFV1_VERSION=$(ffmpeg -debug 1 -i "${1}" -vframes 1 -f null - 2>&1 | grep -m 1 "^\[ffv1" | grep -o "ver:[^ ]*" | cut -d":" -f2) +} + # command-line options to set mediaid and original variables OPTIND=1 while getopts ":jnh" OPT ; do @@ -106,7 +110,13 @@ while [ "${*}" != "" ] ; do MIDDLEOPTIONS+=(-c:a copy) fi _get_codectagstring "${SOURCEFILE}" - if [[ "${CODEC_TAG_STRING}" == "2vuy" || "${CODEC_TAG_STRING}" == "v210" ]] ; then + if [[ "${CODEC_TAG_STRING}" == "ffv1" ]] ; then + _get_ffv1_version "${SOURCEFILE}" + fi + echo "hi ${FFV1_VERSION} ${CODEC_TAG_STRING}" + if [[ "${CODEC_TAG_STRING}" == "2vuy" || \ + "${CODEC_TAG_STRING}" == "v210" || \ + ("${CODEC_TAG_STRING}" == "FFV1" && "${FFV1_VERSION}" -lt "3") ]] ; then _report -dt "${SOURCEFILENAME} is ${CODEC_TAG_STRING}, starting encode" _run mkdir -p "${OUTPUTDIR}" "${LOGDIR}" _prep_ffmpeg_log From e2d6efd1e50c03082dccb8921605b1d9fdbee0de Mon Sep 17 00:00:00 2001 From: Dave Rice Date: Thu, 14 Jun 2018 15:46:57 -0400 Subject: [PATCH 08/12] replicate vrecord's ffv1 options --- makelossless | 2 ++ 1 file changed, 2 insertions(+) diff --git a/makelossless b/makelossless index 6f10cdf9..ee3b1a08 100755 --- a/makelossless +++ b/makelossless @@ -102,6 +102,8 @@ while [ "${*}" != "" ] ; do MIDDLEOPTIONS+=(-c:v ffv1) MIDDLEOPTIONS+=(-level 3) MIDDLEOPTIONS+=(-g 1) + MIDDLEOPTIONS+=(-slices 16) + MIDDLEOPTIONS+=(-slicecrc 1) SUFFIX="_ffv1" fi _add_video_filter "setfield=bff" # this is a presumption but much of the uncompressed input is bff but not probably labelled From e98d429520649bf0f470084ab5323c604ab16c18 Mon Sep 17 00:00:00 2001 From: Dave Rice Date: Thu, 14 Jun 2018 15:49:28 -0400 Subject: [PATCH 09/12] remove some spacing --- makelossless | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/makelossless b/makelossless index ee3b1a08..4e638038 100755 --- a/makelossless +++ b/makelossless @@ -44,7 +44,7 @@ while [ "${*}" != "" ] ; do [ -d "${INPUT}" ] && LOGDIR="${INPUT}/metadata/logs" [ -f "${INPUT}" ] && LOGDIR="$(dirname "${INPUT}")/lossless/logs" [ ! "${LOGDIR}" ] && LOGDIR="${INPUT}/metadata/logs" - + INPUTFILES=$(_maketemp) if [ -f "${INPUT}" ] ; then @@ -122,9 +122,7 @@ while [ "${*}" != "" ] ; do _report -dt "${SOURCEFILENAME} is ${CODEC_TAG_STRING}, starting encode" _run mkdir -p "${OUTPUTDIR}" "${LOGDIR}" _prep_ffmpeg_log - _filter_to_middle_option - _run_critical ffmpeg ${INPUTOPTIONS[@]} -i "${SOURCEFILE}" ${MIDDLEOPTIONS[@]} "${OUTPUTDIR}/${SOURCEFILENAME%.*}${SUFFIX}.mkv" -f framemd5 -an "${LOGDIR}/${SOURCEFILENAME%.*}.framemd5" if [ "${CODEC_TAG_STRING}" == "2vuy" ] ; then _run_critical ffmpeg ${INPUTOPTIONS[@]} -i "${OUTPUTDIR}/${SOURCEFILENAME%.*}${SUFFIX}.mkv" -f framemd5 -pix_fmt uyvy422 -an "${LOGDIR}/${SOURCEFILENAME%.*}${SUFFIX}.framemd5" From 63a35e26d4123b850bb6b8dd79cf6e37253a5e62 Mon Sep 17 00:00:00 2001 From: Dave Rice Date: Tue, 16 Oct 2018 16:24:13 -0400 Subject: [PATCH 10/12] add nostdin to ffmpeg ffv1 version check --- mmfunctions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mmfunctions b/mmfunctions index ce04f5e4..f2286afd 100755 --- a/mmfunctions +++ b/mmfunctions @@ -1229,7 +1229,7 @@ _get_audio_mapping(){ _get_codectagstring(){ CODEC_TAG_STRING=$(ffprobe "${1}" -show_streams -select_streams v:0 2> /dev/null | grep "^codec_tag_string=" | cut -d = -f 2) if [[ "${CODEC_TAG_STRING}" = "FFV1" ]] ; then - FFV1_VERSION=$(ffmpeg -debug 1 -i "${1}" -t 0.1 -f null - &1 | grep -o "ver:[0-9]*" | tail -n1 | cut -d: -f2) + FFV1_VERSION=$(ffmpeg -nostdin -debug 1 -i "${1}" -t 0.1 -f null - &1 | grep -o "ver:[0-9]*" | tail -n1 | cut -d: -f2) else FFV1_VERSION="" fi From a6723b27fa6c7bf97b30241ab9f2e8cdb1bdb5fe Mon Sep 17 00:00:00 2001 From: Dave Rice Date: Mon, 12 Nov 2018 11:13:18 -0500 Subject: [PATCH 11/12] store source of makelossless and update non-3.4 ffv1 --- makelossless | 95 ++++++++++++++++++++++++++++++++++++++++------------ mmfunctions | 1 + 2 files changed, 74 insertions(+), 22 deletions(-) diff --git a/makelossless b/makelossless index 4e638038..18987e4d 100755 --- a/makelossless +++ b/makelossless @@ -5,6 +5,7 @@ VERSION="1.0" SCRIPTDIR=$(dirname $(which "${0}")) . "${SCRIPTDIR}/mmfunctions" || { echo "Missing '${SCRIPTDIR}/mmfunctions'. Exiting." ; exit 1 ;}; DEPENDENCIES=(ffmpeg ffprobe mediainfo) +FFV1_VERSION_EXPECTED=3.4 _initialize_make _usage(){ @@ -22,7 +23,28 @@ _usage(){ [ "${#}" = 0 ] && _usage _get_ffv1_version(){ - FFV1_VERSION=$(ffmpeg -debug 1 -i "${1}" -vframes 1 -f null - 2>&1 | grep -m 1 "^\[ffv1" | grep -o "ver:[^ ]*" | cut -d":" -f2) + FFV1_VERSION="$(ffmpeg -nostdin -debug 1 -i "${1}" -vframes 1 -f null - 2>&1 | grep -m 1 "^\[ffv1" | grep -o "ver:[0-9.]*" | cut -d":" -f2)" +} + +_get_frame_rate(){ + FRAMERATE=$(ffprobe -i "${1}" -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1) +} + +_update_filename(){ + filename="${1}" + filename_noext="${filename%.*}" + filename_ext="${filename##*.}" + filename_lastunderscore="${filename_noext##*_}" + filename_wolastunderscore="${filename_noext%_*}" + if [[ "${filename_lastunderscore}" == "${SUFFIX}" ]] ; then + echo "${filename_wolastunderscore}_${SUFFIX}r1.${filename_ext}" + elif [[ "${filename_lastunderscore}" == "${SUFFIX}r"* ]] ; then + REVISION="$(echo "${filename_lastunderscore}" | cut -d "r" -f 2-)" + NEWREVISION=$((REVISION+1)) + echo "${filename_wolastunderscore}_${SUFFIX}r${NEWREVISION}.${filename_ext}" + else + echo "${filename_wolastunderscore}_${SUFFIX}.${filename_ext}" + fi } # command-line options to set mediaid and original variables @@ -86,6 +108,10 @@ while [ "${*}" != "" ] ; do _get_codectagstring "${SOURCEFILE}" _get_videostreamcount "${SOURCEFILE}" _get_audiostreamcount "${SOURCEFILE}" + _get_width "${SOURCEFILE}" + _get_height "${SOURCEFILE}" + _get_frame_rate "${SOURCEFILE}" + INPUTOPTIONS+=(-nostdin) INPUTOPTIONS+=(-vsync 0) if [[ "${VIDEOSTREAMCOUNT}" > 0 ]] ; then @@ -97,48 +123,73 @@ while [ "${*}" != "" ] ; do if [[ "${JPEG2000MODE}" == "Y" ]] ; then MIDDLEOPTIONS+=(-c:v libopenjpeg) INPUTOPTIONSFRAMEMD5+=(-vcodec libopenjpeg) - SUFFIX="_j2k" + SUFFIX="j2k" else MIDDLEOPTIONS+=(-c:v ffv1) MIDDLEOPTIONS+=(-level 3) MIDDLEOPTIONS+=(-g 1) MIDDLEOPTIONS+=(-slices 16) MIDDLEOPTIONS+=(-slicecrc 1) - SUFFIX="_ffv1" + SUFFIX="ffv1" fi - _add_video_filter "setfield=bff" # this is a presumption but much of the uncompressed input is bff but not probably labelled + _add_video_filter "setfield=bff,setsar=40/27,setdar=4/3" # this is a presumption but much of the uncompressed input is bff but not probably labelled fi + + if [[ "${WIDTH}" = "720" && "${HEIGHT}" = "486" || "${HEIGHT}" = "480" ]] && [[ "${FRAMERATE}" = "30000/1001" || "${FRAMERATE}" = "29970/1001" || "${FRAMERATE}" = "2997/100" ]] ; then + _report -dt "Presuming this is NTSC and adding metadata about colorspace, aspect ratio, interlacement, and broadcast range." + MIDDLEOPTIONS+=(-color_primaries smpte170m) + MIDDLEOPTIONS+=(-color_trc bt709) + MIDDLEOPTIONS+=(-colorspace smpte170m) + MIDDLEOPTIONS+=(-aspect 4/3) + MIDDLEOPTIONS+=(-color_range mpeg) + MIDDLEOPTIONS+=(-field_order bt) + fi + if [[ "${AUDIOSTREAMCOUNT}" > 0 ]] ; then MIDDLEOPTIONS+=(-c:a copy) fi _get_codectagstring "${SOURCEFILE}" - if [[ "${CODEC_TAG_STRING}" == "ffv1" ]] ; then + if [[ "${CODEC_TAG_STRING}" == "FFV1" ]] ; then _get_ffv1_version "${SOURCEFILE}" fi - echo "hi ${FFV1_VERSION} ${CODEC_TAG_STRING}" if [[ "${CODEC_TAG_STRING}" == "2vuy" || \ "${CODEC_TAG_STRING}" == "v210" || \ - ("${CODEC_TAG_STRING}" == "FFV1" && "${FFV1_VERSION}" -lt "3") ]] ; then - _report -dt "${SOURCEFILENAME} is ${CODEC_TAG_STRING}, starting encode" - _run mkdir -p "${OUTPUTDIR}" "${LOGDIR}" - _prep_ffmpeg_log - _filter_to_middle_option - _run_critical ffmpeg ${INPUTOPTIONS[@]} -i "${SOURCEFILE}" ${MIDDLEOPTIONS[@]} "${OUTPUTDIR}/${SOURCEFILENAME%.*}${SUFFIX}.mkv" -f framemd5 -an "${LOGDIR}/${SOURCEFILENAME%.*}.framemd5" - if [ "${CODEC_TAG_STRING}" == "2vuy" ] ; then - _run_critical ffmpeg ${INPUTOPTIONS[@]} -i "${OUTPUTDIR}/${SOURCEFILENAME%.*}${SUFFIX}.mkv" -f framemd5 -pix_fmt uyvy422 -an "${LOGDIR}/${SOURCEFILENAME%.*}${SUFFIX}.framemd5" + ("${CODEC_TAG_STRING}" == "FFV1" && "$(echo "${FFV1_VERSION} < ${FFV1_VERSION_EXPECTED}" | bc)" == "1") ]] ; then + if [[ -n "${FFV1_VERSION}" ]] ; then + _report -dt "${SOURCEFILENAME} is ${CODEC_TAG_STRING} version ${FFV1_VERSION} (${FFV1_VERSION}<${FFV1_VERSION_EXPECTED}), starting encode" else - _run_critical ffmpeg ${INPUTOPTIONS[@]} ${INPUTOPTIONSFRAMEMD5[@]} -i "${OUTPUTDIR}/${SOURCEFILENAME%.*}${SUFFIX}.mkv" -f framemd5 -an "${LOGDIR}/${SOURCEFILENAME%.*}${SUFFIX}.framemd5" + _report -dt "${SOURCEFILENAME} is ${CODEC_TAG_STRING}, starting encode" fi - if [ $(grep -v "^#" "${LOGDIR}/${SOURCEFILENAME%.*}.framemd5" | md5 -q) = $(grep -v "^#" "${LOGDIR}/${SOURCEFILENAME%.*}${SUFFIX}.framemd5" | md5 -q) ] ; then - _report -dt "Everything looks safe. Going to delete the original." - _run_critical mediainfo -f --language=raw --output=XML "${SOURCEFILE}" > "${LOGDIR}/${SOURCEFILENAME%.*}_mediainfo.xml" - _run_critical rm -f -v "${SOURCEFILE}" + LOSSLESS_OUTPUT=$(_update_filename "${OUTPUTDIR}/${SOURCEFILENAME%.*}.mkv") + REFORMATTED_DIR="${1}/objects/reformatted/$(date +%Y-%m-%dT%H-%M-%S)" + _run_critical _mkdir2 "${REFORMATTED_DIR}" + SOURCE_FRAMEMD5_OUTPUT="${REFORMATTED_DIR}/${SOURCEFILENAME}_$(date +%Y-%m-%dT%H-%M-%S).framemd5" + LOSSLESS_FRAMEMD5_OUTPUT="${REFORMATTED_DIR}/$(basename "${LOSSLESS_OUTPUT}_$(date +%Y-%m-%dT%H-%M-%S).framemd5")" + if [[ ! -f "${LOSSLESS_OUTPUT}" && ! -f "${SOURCE_FRAMEMD5_OUTPUT}" ]] ; then + _run mkdir -p "${OUTPUTDIR}" "${LOGDIR}" + _prep_ffmpeg_log + _filter_to_middle_option + _report -dt "Creating a framemd5 report and lossless ffv1 for ${SOURCEFILENAME}." + _run_critical ffmpeg ${INPUTOPTIONS[@]} -i "${SOURCEFILE}" ${MIDDLEOPTIONS[@]} "${LOSSLESS_OUTPUT}" -f framemd5 -an "${SOURCE_FRAMEMD5_OUTPUT}" + _report -dt "Create a framemd5 for the output to verify against ${SOURCEFILENAME}." + if [ "${CODEC_TAG_STRING}" == "2vuy" ] ; then + _run_critical ffmpeg ${INPUTOPTIONS[@]} -i "${LOSSLESS_OUTPUT}" -f framemd5 -pix_fmt uyvy422 -an "${LOSSLESS_FRAMEMD5_OUTPUT}" + else + _run_critical ffmpeg ${INPUTOPTIONS[@]} ${INPUTOPTIONSFRAMEMD5[@]} -i "${LOSSLESS_OUTPUT}" -f framemd5 -an "${LOSSLESS_FRAMEMD5_OUTPUT}" + fi + if [ $(grep -v "^#" "${SOURCE_FRAMEMD5_OUTPUT}" | md5 -q) = $(grep -v "^#" "${LOSSLESS_FRAMEMD5_OUTPUT}" | md5 -q) ] ; then + _report -dt "Everything looks safe. Going to move original to reformatted directory." + _run_critical mediainfo -f --language=raw --output=XML "${SOURCEFILE}" > "${REFORMATTED_DIR}/${SOURCEFILENAME}_mediainfo.xml" + _run_critical mv -v -n -f -v "${SOURCEFILE}" "${REFORMATTED_DIR}/" + else + _report -wt "Not looking safe. Going to keep the original." + fi else - _report -wt "Not looking safe. Going to keep the original." + _report -wt "Either ${LOSSLESS_OUTPUT} or ${SOURCE_FRAMEMD5_OUTPUT} already exists. Not proceeding." fi else - _report -wt "${SOURCEFILENAME} is not 2vuy or v210 or progressive ffv1, skipping" - _writeerrorlog "makelossless" "The source file is not 2vuy or v210 or progressive ffv1, so makelossless was unable to run." + _report -wt "${SOURCEFILENAME} is not 2vuy or v210 or progressive ffv1 or progressive ffv1 or ffv1 less than 3.4, skipping" + _writeerrorlog "makelossless" "The source file is not 2vuy or v210 or progressive ffv1 or ffv1 less than 3.4, so makelossless was unable to run." continue fi _report -dt done with "${SOURCEFILE}" diff --git a/mmfunctions b/mmfunctions index f2286afd..70a19e89 100755 --- a/mmfunctions +++ b/mmfunctions @@ -6,6 +6,7 @@ OBJECTS_FIND_EXCLUSIONS=(! -name ".*") OBJECTS_FIND_EXCLUSIONS+=(! -path "*/access/*") OBJECTS_FIND_EXCLUSIONS+=(! -path "*/service/*") OBJECTS_FIND_EXCLUSIONS+=(! -path "*/trimmed_materials/*") +OBJECTS_FIND_EXCLUSIONS+=(! -path "*/reformatted/*") # load configuration file if [ -f "${TEMP_MMCONFIG}" ] ; then From 769470841eb4f4330706de984c3fbd0f1a39556c Mon Sep 17 00:00:00 2001 From: Dave Rice Date: Tue, 13 Nov 2018 14:59:59 -0500 Subject: [PATCH 12/12] transcode ffv1 in non-mkv too --- makelossless | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/makelossless b/makelossless index 18987e4d..08aecee3 100755 --- a/makelossless +++ b/makelossless @@ -154,7 +154,8 @@ while [ "${*}" != "" ] ; do fi if [[ "${CODEC_TAG_STRING}" == "2vuy" || \ "${CODEC_TAG_STRING}" == "v210" || \ - ("${CODEC_TAG_STRING}" == "FFV1" && "$(echo "${FFV1_VERSION} < ${FFV1_VERSION_EXPECTED}" | bc)" == "1") ]] ; then + ("${CODEC_TAG_STRING}" == "FFV1" && "$(echo "${FFV1_VERSION} < ${FFV1_VERSION_EXPECTED}" | bc)" == "1") || \ + ("${CODEC_TAG_STRING}" == "FFV1" && "${SOURCEFILE##*.}" != "mkv") ]] ; then if [[ -n "${FFV1_VERSION}" ]] ; then _report -dt "${SOURCEFILENAME} is ${CODEC_TAG_STRING} version ${FFV1_VERSION} (${FFV1_VERSION}<${FFV1_VERSION_EXPECTED}), starting encode" else