media-tools/to_vp9/to_vp9.sh
2023-07-27 00:13:08 +02:00

88 lines
2.5 KiB
Bash
Executable file

#!/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