#!/bin/bash # set shopt-options used by this shell-script # Note, 0 (true) from shopt -q is "false" in a math context. shopt -q globstar; globstar_set=$? ((globstar_set)) && shopt -s globstar shopt -q extglob; extglob_set=$? ((extglob_set)) && shopt -s extglob # return default shopt-options function finish { ((globstar_set)) && shopt -u globstar ((extglob_set)) && shopt -u extglob } trap finish EXIT print_help() { printf "Help: not implemented yet" } while getopts 'e:dh' flag; do case "${flag}" in e) extension+=("$OPTARG");; d) delete=true;; h) print_help exit 0;; *) exit 1 ;; esac done # Print available encoders readarray -t encoders <<<$(ffmpeg -encoders -hide_banner|grep vp9) echo "In FFMPEG verfügbare Encoder:" for i in "${!encoders[@]}"; do echo "$i: ${encoders[i]}" #encoders[i]=$(echo ${encoders[0]} | awk '{print $2}') done # Choose an encoder while :; do read -r -p "Choose an encoder [0]: " encoder [[ $encoder =~ ^[0-9]+$ ]] || { echo "Enter a valid number"; continue; } if ((encoder >= 0 && encoder < ${#encoders[@]})); then encoder=$(echo "${encoders[$encoder]}" | awk '{print $2}') break else echo "Not a valid encoder, try again" fi done # Choose an GPU, if encoder is GPU accelerated # ls /sys/class/drm/renderD129/device/consumer*/consumer/ | grep supp # lspci | grep ' VGA ' | cut -d" " -f 1 | xargs -i lspci -v -s {} gpu="/dev/dri/renderD129" # encoder-specific settings # write array into string extension="${extension[*]}" # change separator extension=${extension// /|} for file in **/*.@($extension); do if [[ ${file: -3} == "mkv" ]]; then file_out="${file%.*}2.mkv" else file_out="${file%.*}.mkv"; fi #just for testing. This will be removed in a future release echo "$encoder" #VP9_vaapi #there are problems with the -global_quality:v/-q:v settings only being able to make quality worse. Help is appreciated #not enough tested. So it is still experimental if [[ $encoder == "vp9_vaapi" ]]; then ffmpeg -hide_banner -hwaccel vaapi -vaapi_device $gpu -i "$file" -map 0 -c copy -c:v vp9_vaapi -rc_mode CQP -bf 1 -bsf:v vp9_raw_reorder,vp9_superframe -vf 'hwupload' "$file_out" && if [[ "$delete" = true ]]; then rm "$file"; fi fi #VP9_qsv #was not able to test it. So it is still experimental if [[ $encoder == "vp9_qsv" ]]; then ffmpeg -hide_banner -hwaccel qsv -qsv_device $gpu -i "$file" -c:v vp9_qsv -vf 'hwupload' "${file%.*}.mkv" && if [[ "$delete" = true ]]; then rm "$file"; fi fi #libvpx-vp9 #... done