diff --git a/scripts/build.sh b/scripts/build.sh index 288f45c..885a71e 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -229,6 +229,7 @@ make clean --disable-podpages --disable-txtpages || exit make -j "$(nproc)" || exit sudo make install || exit +sudo cp ff*_g /usr/local/bin/ # validate encoders hash -r diff --git a/scripts/recc_encode.sh b/scripts/recc_encode.sh index 40ff717..f17c327 100755 --- a/scripts/recc_encode.sh +++ b/scripts/recc_encode.sh @@ -4,27 +4,42 @@ # do not take this as a holy grail. usage() { - echo "unrecognized arguments, please retry" - echo "encode -i input_file [-p] output_file" - echo -e "\t-p print the command instead of executing [optional]" + echo "encode -i input_file [-p true/false] [-g NUM] output_file" + echo -e "\t-p print the command instead of executing it [optional]" + echo -e "\t-g set film grain for encode [optional]" return 0 } encode() { ENCODE_FILE="/tmp/encode.sh" + SVT_PARAMS="${GRAIN}tune=0:enable-overlays=1:scd=1:enable-hdr=1:fast-decode=1:enable-variance-boost=1:enable-qm=1:qm-min=0:qm-max=15" + UNMAP=$(unmap_streams "$INPUT") + AUDIO_FORMAT='-af "aformat=channel_layouts=7.1|5.1|stereo|mono" -c:a libopus' + AUDIO_BITRATE=$(get_bitrate_audio "$INPUT") + FFMPEG_PARAMS='-y -c:s copy -c:V libsvtav1 -pix_fmt yuv420p10le -crf 25 -preset 3 -g 240' + NL=' \\\n\t' - echo ffmpeg -i \""$INPUT"\" -map 0 $(unmap_streams "$INPUT") \ - -af '"aformat=channel_layouts=7.1|5.1|stereo|mono"' -c:a libopus $(get_bitrate_audio "$INPUT") \ - -c:s copy -c:V libsvtav1 -pix_fmt yuv420p10le -crf 25 -preset 3 -g 240 \ - -svtav1-params \"tune=0:enable-overlays=1:scd=1:enable-hdr=1:fast-decode=1:enable-variance-boost=1\" \ - \""$OUTPUT"\" "&& mkvpropedit \"$OUTPUT\" --add-track-statistics-tags " > "$ENCODE_FILE" + echo '#!/bin/bash' > "$ENCODE_FILE" + echo -e ffmpeg -i \""$INPUT"\" -map 0 $UNMAP \ + $AUDIO_FORMAT $NL $AUDIO_BITRATE \ + "$FFMPEG_PARAMS" -dolbyvision 1 -svtav1-params \ + $NL "\"$SVT_PARAMS\" \"$OUTPUT\" ||" $NL \ + ffmpeg -i \""$INPUT"\" -map 0 $UNMAP \ + $AUDIO_FORMAT $NL $AUDIO_BITRATE \ + "$FFMPEG_PARAMS" -svtav1-params \ + $NL "\"$SVT_PARAMS\" \"$OUTPUT\"" >> "$ENCODE_FILE" - if [[ "$PRINT_OUT" == "true" ]]; - then - cat "$ENCODE_FILE" - else - bash "$ENCODE_FILE" - fi + if [[ "$EXT" == "mkv" ]]; then + echo "mkvpropedit \"$OUTPUT\" --add-track-statistics-tags" >> "$ENCODE_FILE" + echo "mkvpropedit \"$OUTPUT\" --edit info --set \"title=\"" >> "$ENCODE_FILE" + fi + + if [[ "$PRINT_OUT" == "true" ]]; + then + cat "$ENCODE_FILE" + else + bash "$ENCODE_FILE" + fi } unmap_streams(){ @@ -50,22 +65,39 @@ get_bitrate_audio() { } -OPTS='i:p' +OPTS='i:p:g:' NUM_OPTS=$(echo $OPTS | tr ':' '\n' | wc -l) PRINT_OUT="false" +GRAIN="" +# only using -i MIN_OPT=2 -MAX_OPT=4 -test "$#" -lt $MIN_OPT && usage && exit 1 -test "$#" -gt $MAX_OPT && usage && exit 1 +# using all + output name +MAX_OPT=$(( NUM_OPTS * 2 - 1 )) +test "$#" -lt $MIN_OPT && echo "not enough arguments" && usage && exit 1 +test "$#" -gt $MAX_OPT && echo "too many arguments" && usage && exit 1 while getopts "$OPTS" flag; do case "${flag}" in i) INPUT="${OPTARG}" ;; p) - PRINT_OUT="true" + PRINT_OUT="${OPTARG}" + if [[ "$PRINT_OUT" != "false" && "$PRINT_OUT" != "true" ]]; then + echo "unrecognized argument for -p: $PRINT_OUT" + usage + exit 1 + fi + ;; + g) + if [[ ${OPTARG} != ?(-)+([[:digit:]]) || ${OPTARG} -lt 0 ]]; then + echo "${OPTARG} is not a positive integer" + usage + exit 1 + fi + GRAIN="film-grain=${OPTARG}:film-grain-denoise=1:" ;; *) + echo "wrong flags given" usage exit 1 ;; @@ -73,21 +105,19 @@ while getopts "$OPTS" flag; do done # allow optional output filename -if [[ "$#" -eq $MAX_OPT ]]; then +if [[ $(($# % 2)) != 0 ]]; then OUTPUT="${@: -1}" -elif [[ - ("$PRINT_OUT" == "true") && - ( "$#" -eq 3) - ]]; then - OUTPUT="${HOME}/av1_${INPUT}" -elif [[ "$#" -eq 2 ]]; then - OUTPUT="${HOME}/av1_${INPUT}" else - OUTPUT="${@: -1}" + OUTPUT="${HOME}/av1_${INPUT}" fi -echo -echo "INPUT: $INPUT, PRINT_OUT: $PRINT_OUT, OUTPUT: $OUTPUT" -echo +# always use same container for output +INP_FILENAME=$(basename -- "$INPUT") +EXT="${INP_FILENAME##*.}" +OUTPUT="${OUTPUT%.*}" +OUTPUT+=".${EXT}" +echo +echo "INPUT: $INPUT, PRINT_OUT: $PRINT_OUT, GRAIN: $GRAIN, OUTPUT: $OUTPUT" +echo encode diff --git a/scripts/refresh_build.sh b/scripts/refresh_build.sh new file mode 100755 index 0000000..eb1895f --- /dev/null +++ b/scripts/refresh_build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +git pull +bash ./scripts/install_deps.sh || exit 1 +bash ./scripts/build.sh || exit 1